master: subtree updates oct 4 2023

poky: 61531cd395..e444d2bed0:
  Adrian Freihofer (3):
        lib/oe/utils: Refactor to make multiprocess_launch callable without d
        lib/oe/package: Refactor to make strip_execs callable without d
        oeqa/selftest/devtool: Refactor runqemu pre-requisites

  Alexander Kanavin (69):
        cargo-c-native: fix version check
        igt-gpu-tools: do not write shortened git commit hash into binaries
        curl: build and run the full set of ptests
        ptest: report tests that were killed on timeout
        perl: use 64 bit integers across all targets
        perl: ensure all failures are caught
        strace: parallelize ptest
        strace: remove from time64.inc exception list
        busybox: enable 64 bit shell arithmetic (via long long type)
        openssl: parallelize tests
        openssl: ensure all ptest fails are caught
        glibc-tests: rename to glibc-y2038-tests
        sysstat: merge .inc into .bb
        sysstat: update 12.6.2 -> 12.7.4
        glib-2.0: update 2.76.4 -> 2.78.0
        ovmf: update edk2-stable202305 -> edk2-stable202308
        libdnf: update 0.70.1 -> 0.71.0
        liburi-perl: update 5.17 -> 5.21
        python3-pygobject: update 3.44.1 -> 3.46.0
        go-helloworld: update to latest revision
        gzip: update 1.12 -> 1.13
        procps: update 4.0.3 -> 4.0.4
        screen: update 4.9.0 -> 4.9.1
        gobject-introspection: update 1.76.1 -> 1.78.0
        igt-gpu-tools: update 1.27.1 -> 1.28
        libva-utils: update 2.19.0 -> 2.20.0
        piglit: update to latest revision
        groff: add a patch to resolve build races
        groff: fix another build race via backport
        systemd: upgrade 254 -> 254.4
        util-linux: upgrade 2.39.1 -> 2.39.2
        cmake: upgrade 3.27.4 -> 3.27.5
        jquery: upgrade 3.7.0 -> 3.7.1
        python3-setuptools-rust: upgrade 1.6.0 -> 1.7.0
        vulkan: upgrade 1.3.250.0 -> 1.3.261.1
        libxcb: upgrade 1.15 -> 1.16
        xcb-proto: upgrade 1.15.2 -> 1.16.0
        boost: upgrade 1.82.0 -> 1.83.0
        btrfs-tools: upgrade 6.3.3 -> 6.5.1
        createrepo-c: upgrade 0.21.1 -> 1.0.0
        debianutils: upgrade 5.12 -> 5.13
        diffoscope: upgrade 244 -> 249
        ethtool: upgrade 6.3 -> 6.5
        font-util: upgrade 1.4.0 -> 1.4.1
        freetype: upgrade 2.13.1 -> 2.13.2
        ghostscript: upgrade 10.01.2 -> 10.02.0
        iproute2: upgrade 6.4.0 -> 6.5.0
        json-c: upgrade 0.16 -> 0.17
        kmscube: upgrade to latest revision
        libarchive: upgrade 3.7.1 -> 3.7.2
        libsdl2: upgrade 2.28.0 -> 2.28.3
        libsolv: upgrade 0.7.24 -> 0.7.25
        man-pages: upgrade 6.04 -> 6.05.01
        meson: upgrade 1.1.1 -> 1.2.1
        mmc-utils: upgrade to latest revision
        mtd-utils: upgrade 2.1.5 -> 2.1.6
        puzzles: upgrade to latest revision
        python3-dtschema: upgrade 2023.6.1 -> 2023.7
        python3-git: upgrade 3.1.35 -> 3.1.36
        python3-libarchive-c: upgrade 4.0 -> 5.0
        python3-setuptools: upgrade 68.2.1 -> 68.2.2
        python3-sphinx: upgrade 7.2.5 -> 7.2.6
        seatd: upgrade 0.7.0 -> 0.8.0
        sqlite3: upgrade 3.43.0 -> 3.43.1
        tiff: upgrade 4.5.1 -> 4.6.0
        vala: upgrade 0.56.8 -> 0.56.13
        xf86-input-libinput: upgrade 1.3.0 -> 1.4.0
        xwayland: upgrade 23.1.2 -> 23.2.1
        python3-setuptools-scm: fix upstream version check

  Alexandre Belloni (1):
        python3: fix SoB on patch

  Antoine Lubineau (1):
        cve-check: add CVSS vector string to CVE database and reports

  Bruce Ashfield (9):
        linux-yocto/6.4: update to v6.4.15
        linux-yocto/6.1: update to v6.1.52
        linux-yocto/6.4: update to v6.4.16
        linux-yocto/6.1: update to v6.1.53
        linux-yocto/6.1: update to v6.1.55
        linux-yocto-dev: update to v6.6-rcX
        linux-yocto: introduce 6.5 reference kernel recipes
        linux-libc-headers: uprev to v6.5
        linux-libc-headers: default to 6.5

  Charles-Antoine Couret (1):
        systemd-boot-cfg: add .conf suffix to default entry label

  Chen Qi (1):
        python3: add cpython to CVE_PRODUCT

  Daniel Semkowicz (2):
        wic: bootimg-partition: Fix file name in debug message
        uboot-extlinux-config.bbclass: Add missing variable descriptions

  Deepthi Hemraj (2):
        binutils: stable 2.41 branch updates.
        glibc: stable 2.38 branch updates.

  Denys Dmytriyenko (2):
        bitbake.conf: add MACHINE to SDK_NAME
        spdx: use TOOLCHAIN_OUTPUTNAME for SDK filename prefix

  Derek Straka (1):
        pypi.bbclass: Update the upstream checks to automatically replace '_' with '-'

  Eilís 'pidge' Ní Fhlannagáin (2):
        lib/oe/package_managegment: Add nativesdk-intercept PATH
        update_mandb: deb fails due to missing man cache

  Etienne Cordonnier (1):
        bitbake: bitbake-worker/runqueue: Avoid unnecessary bytes object copies

  Insu Park (1):
        bitbake: data: Add missing dependency handling of remove operator

  Jan Garcia (1):
        insane.bbclass: Count raw bytes in shebang-size

  Joshua Watt (6):
        classes/create-spdx-2.2: Add extra debugging for missing package files
        nfs-utils: Don't start nfs-statsd.service without exports
        nfs-utils: Add StateDirectory for systemd services
        bitbake: utils: Add path_is_descendant()
        bitbake: fetch2: git: Use path_is_descendant() instead of path for repo check
        classes/create-spdx-2.2: Show error if document is not found

  Julien Stephan (1):
        bitbake: bitbake: cooker: add a new function to retrieve task signatures

  Kai Kang (2):
        goarch.bbclass: not compatible with riscv32
        adwaita-icon-theme: 43 -> 45.0

  Khem Raj (25):
        perl: Add packageconfig for setlocale functionality differences
        libc-test: Run as non-root user
        coreutils: Upgrade to 9.4
        coreutils: Add config.h to ptest package
        gettext: Add missing dependency on gawk autoconf
        util-linux: Disable failing tests on musl
        Revert "util-linux: scanf_cv_alloc_modifier changed from 'as' -> 'ms'"
        util-linux: Fix lscpu on musl
        qemu: Add PACKAGECONFIG for dax
        llvm: Upgrade to 17.0.1
        oeqa: Use 2.14 release of cpio instead of 2.13
        musl: Update to latest
        bsd-headers: Define __CONCAT and __STRING
        mesa: Update clang-17 patch to upstream v2
        musl-legacy-error: Add recipe
        elfutils: Depend on musl-legacy-error for musl targets
        debugedit: Use musl-legacy-error
        systemd: Drop two upstreamed musl patches
        systemd: Refresh patches to avoid patch-fuzz
        glib-2.0: Enable possible locales with musl for ptests
        glib-2.0: Remove failing ptests on musl
        llvm: Upgrade to 17.0.2
        createrepo-c: Fix function declaration bug found with clang
        mesa: Simplify llvm-17 patch
        mesa: Fix native build on hosts with llvm-dev installed

  Lee Chee Yang (2):
        bind: update to 9.18.19
        cups: fix CVE-2023-4504

  Markus Volk (8):
        mesa: upgrade 23.1.3 -> 23.1.7
        libportal: upgrade 0.6 -> 0.7.1
        appstream: import recipe from meta-oe
        libadwaita: upgrade 1.3.4 -> 1.4.0
        maintainers.inc: add missing entries for appstream and libxmlb
        libxmlb: import recipe from meta-oe
        pulseaudio: dont include consolekit for systemd
        mesa: Upgrade 23.1.7 -> 23.1.8

  Marta Rybczynska (3):
        python3-ply: add to nativesdk
        python3-isodate: add homepage
        python3-rdflib: add homepage

  Martin Jansa (3):
        gcc: backport a fix for ICE caused by CVE-2023-4039.patch
        fontcache.bbclass: avoid native recipes depending on target fontconfig
        multilib_script.bbclass: expand script name as well

  Matthias Schnelte (1):
        bitbake: fetch2: Adds vscode devcontainer support

  Michael Opdenacker (18):
        base: add newline before LICENSE_FLAGS_DETAILS
        dev-manual: new-recipe.rst fix inconsistency with contributor guide
        contributor-guide: recipe-style-guide: add Upstream-Status
        dev-manual: licenses: update license manifest location
        dev-manual: licenses: mention SPDX for license compliance
        dev-manual: disk-space: improve wording for obsolete sstate cache files
        sdk-manual: extensible.rst: fix multiple formatting issues
        alsa-lib: upgrade 1.2.9 -> 1.2.10
        alsa-utils: upgrade 1.2.9 -> 1.2.10
        shadow: fix patch Upstream-Status
        libevent: fix patch Upstream-Status
        alsa-utils: update patch Upstream-Status
        alsa-lib: fix patch Upstream-Status
        lib/oe/qa: remove obsolete "Accepted" string for Upstream-Status
        lib/oe/qa: update guidelines link for Upstream-Status
        bsp-guide: bsp.rst: replace reference to wiki
        dev-manual: new-recipe.rst: replace reference to wiki
        maintainers.inc: add self for flac recipe

  Mikko Rapeli (9):
        openssh: update Upstream-Status to Denied in test logging patch
        openssh: improve banner ptest failure logging
        testimage.bbclass: detect slirp from TEST_RUNQEMUPARAMS
        oeqa dnf_runtime.py: fix HTTP server IP address and port
        oeqa selftest runtime_test.py: append to TEST_RUNQEMUPARAMS
        selftest runtime_test.py: add testimage.bbclass slirp test
        openssh: capture logs in run-ptest
        testimage.bbclass: remove QEMU_USE_SLIRP variable
        oeqa/selftest/context.py: check git command return values

  Ninad Palsule (1):
        kernel-fitImage: Strip path component from dtb

  Peter Kjellerstedt (7):
        libsoup-2.4: Only specify --cross-file when building for target
        libsoup: Only specify --cross-file when building for target
        bitbake: tinfoil: Do not fail when logging is disabled and full config is used
        bitbake: bitbake-getvar: Make --quiet work with --recipe
        bitbake: bitbake-getvar: Make --value imply --quiet
        bitbake: bitbake-getvar: Add a (suppressable) error for undefined variables
        bitbake: bitbake-getvar: Treat undefined variables as empty with --value

  Peter Marko (2):
        openssl: Upgrade 3.1.2 -> 3.1.3
        json-c: define CVE_VERSION

  Qiu Tingting (1):
        tar: add ptest support

  Richard Purdie (34):
        bitbake.conf: Add IMAGE_BASENAME to SDK_NAME
        vim: Upgrade 9.0.1664 -> 9.0.1894
        defaultsetup: Inherit create-spdx by default
        oeqa/selftest/runtime_test: No need to use append with TEST_RUNQEMUPARAMS
        devtool/build_sdk: Drop unused imports
        bitbake: lib: Drop inotify support and replace with mtime checks
        bitbake: server/process: Disable the flush() call in server logging
        recipetool/devtool: Ensure server knows about changed files
        lttng-tools: Upgrade 2.13.10 -> 2.13.11
        oeqa/selftest/wic: Improve assertTrue calls
        elfutils: Fix reproducibility issue with bunzip2
        bitbake: cooker: Drop unneeded flush calls
        sstate: Fix nativesdk entry in SSTATE_ARCHS
        multilib: fix SSTATE_ARCHS for multilib usage
        license/license_image: Fix license file layout to avoid overlapping files
        oeqa/selftest/bbtests: Improve and update test_non_gplv3
        create-spdx/sbom: Ensure files don't overlap between machines
        sstate: Stop allowing overlapping symlinks from sstate
        recipes: Drop remaining PR values from recipes
        bitbake.conf: No longer support PR from filename
        oeqa/selftest: Fix broken symlink removal handling
        oeqa/selftest/reproducible: Avoid oe-selftest startup delays
        oeqa: Streamline oe-selftest startup time
        oeqa/selftest/oescripts: Avoid variable access at module load
        bitbake: codeparser: Update debug variable reference
        contributor-guide/style-guide: Refer to recipes, not packages
        contributor-guide/style-guide: Add a note about task idempotence
        lib: Import packagedata oe module by default
        oeqa/runner: Ensure class setup errors are shown to bitbake logging
        create-spdx: Ensure it is clear where the message comes from
        oeqa/utils/gitarchive: Handle broken commit counts in results repo
        python3-numpy: Fix reproducibility issue
        scritps/runqemu: Ensure we only have two serial ports
        glibc: Pull in stable branch fixes

  Robert Joslyn (2):
        curl: Update from 8.2.1 to 8.3.0
        curl: Skip tests marked flaky

  Robert Yang (1):
        libxcrypt-compat: Remove libcrypt.so to fix conflict with libcrypt

  Roland Hieber (7):
        template: fix typo in section header
        ref-manual: point outdated link to the new location
        contributor-guide: recipe-style-guide: add more patch tagging examples
        contributor-guide: recipe-style-guide: add section about CVE patches
        contributor-guide: discourage marking patches as Inappropriate
        contributor-guide: deprecate "Accepted" patch status
        contributor-guide: style-guide: discourage using Pending patch status

  Ross Burton (19):
        packagegroup-core-x11-xserver: add modesetting driver to default XSERVER
        machine/qemu*: add modesetting drivers to XSERVER
        beaglebone-yocto: remove redundant XSERVER assignment
        gcc: Fix -fstack-protector issue on aarch64
        testimage: respect target/server IPs when using slirp
        manuals: document LICENSE_FLAGS_DETAILS
        linux-yocto: update CVE ignores
        libwebp: upgrade to 1.3.2
        oeqa/runtime/parselogs: remove unused imports
        oeqa/runtime/parselogs: don't bother to show target hardware information
        oeqa/runtime/parselogs: remove obsolete LSB testing support
        oeqa/runtime/parselogs: inline single-caller functions
        oeqa/runtime/parselogs: improve find call
        oeqa/runtime/parselogs: don't pass around members
        oeqa/runtime/parselogs: move some variables out of global scope
        oeqa/runtime/parselogs: select the correct machine-specific ignores early
        oeqa/runtime/parselogs: parse the logs with Python, not grep
        webkitgtk: reduce size of -dbg package
        bitbake: bitbake/lib: spawn server/worker using the current Python interpreter

  Samantha Jalabert (14):
        python3-isodate: Copy recipe from meta-python
        python3-booleanpy: Copy recipe from meta-python
        python3-beartype: add recipe
        python3-click: Copy recipe from meta-python
        ptest-packagelists.inc: add python test click
        python3-license-expression: Copy recipe from meta-python
        ptest-packagelists.inc: add python test license-expression
        python3-rdflib: Copy recipe from meta-python
        python3-uritools: add recipe
        python3-xmltodict: Copy recipe from meta-python
        ptest-packagelists.inc: add python test xmltodict
        python3-spdx-tools: add recipe
        qa: Add selftest for python3-spdx-tools
        maintainers.inc: add python3-spdx-tools and dependencies

  Sean Nyekjaer (1):
        gcc: depend on zstd

  Stefan Tauner (1):
        gdb: fix RDEPENDS for PACKAGECONFIG[tui]

  Stephan Wurm (1):
        python3-jsonschema: Update homepage URL

  Tim Orling (1):
        python3-cryptography{-vectors}: upgrade to 41.0.4

  Trevor Gamblin (6):
        patchtest: Add tests from patchtest oe repo
        patchtest/selftest: remove configurable target
        patchtest: add requirements.txt
        patchtest: Add README.md for selftests
        python3-ptest: skip test_input_no_stdout_fileno
        patchtest/selftest: only split resultlines once

  Ulrich Ölmann (1):
        packagegroup-base: clean up setting packagegroup-machine-base's SUMMARY

  Wang Mingyu (36):
        alsa-ucm-conf: upgrade 1.2.9 -> 1.2.10
        at-spi2-core: upgrade 2.48.3 -> 2.48.4
        dbus: upgrade 1.14.8 -> 1.14.10
        debianutils: upgrade 5.8 -> 5.12
        dnf: upgrade 4.16.1 -> 4.17.0
        harfbuzz: upgrade 8.1.1 -> 8.2.0
        kexec-tools: upgrade 2.0.26 -> 2.0.27
        libinput: upgrade 1.23.0 -> 1.24.0
        libnl: upgrade 3.7.0 -> 3.8.0
        nghttp2: upgrade 1.55.1 -> 1.56.0
        ccache: upgrade 4.8.2 -> 4.8.3
        pkgconf: upgrade 2.0.2 -> 2.0.3
        python3-git: upgrade 3.1.34 -> 3.1.35
        python3-hypothesis: upgrade 6.84.0 -> 6.84.3
        python3-pyelftools: upgrade 0.29 -> 0.30
        python3-pytest: upgrade 7.4.1 -> 7.4.2
        python3-setuptools: upgrade 68.1.2 -> 68.2.1
        strace: upgrade 6.4 -> 6.5
        stress-ng: upgrade 0.16.04 -> 0.16.05
        wayland-utils: upgrade 1.1.0 -> 1.2.0
        wireless-regdb: upgrade 2023.05.03 -> 2023.09.01
        at-spi2-core: upgrade 2.48.4 -> 2.50.0
        enchant2: upgrade 2.5.0 -> 2.6.1
        harfbuzz: upgrade 8.2.0 -> 8.2.1
        kbd: upgrade 2.6.2 -> 2.6.3
        libsecret: upgrade 0.21.0 -> 0.21.1
        gobject-introspection: upgrade 1.78.0 -> 1.78.1
        python3-numpy: upgrade 1.25.2 -> 1.26.0
        python3-hypothesis: upgrade 6.84.3 -> 6.86.2
        python3-pycryptodome: upgrade 3.18.0 -> 3.19.0
        python3-pycryptodomex: upgrade 3.18.0 -> 3.19.0
        python3-smmap: upgrade 5.0.0 -> 6.0.0
        python3-trove-classifiers: upgrade 2023.8.7 -> 2023.9.19
        python3-typing-extensions: upgrade 4.7.1 -> 4.8.0
        python3-urllib3: upgrade 2.0.4 -> 2.0.5
        python3-zipp: upgrade 3.16.2 -> 3.17.0

  Yash Shinde (1):
        glibc: fix CVE-2023-4527

  Yogita Urade (2):
        tiff: fix CVE-2023-40745
        tiff: fix CVE-2023-41175

meta-openembedded: eff1b182c1..ea42cec2ec:
  Alex Kiernan (2):
        mdns: Upgrade 1790.80.10 -> 2200.0.8
        jq: Upgrade 1.6+git -> 1.7

  Archana Polampalli (2):
        python3-appdirs: print ptest results in unified format
        nodejs: upgrade 18.17.1 -> 20.5.1

  Armin Kuster (1):
        openldap: update to 2.5.16.

  Bruce Ashfield (2):
        zfs: update to v2.2.0-rc4
        vboxguestdrivers: fix kernel v6.5 build

  Chi Xu (1):
        mariadb: Add ptest support

  Clément Péron (6):
        etcd-cpp-apiv3: upgrade 0.14.3 -> 0.15.3
        devtools: grpc: bump to 1.56.2
        protobuf: upgrade 4.22.2 -> 4.23.4
        protobuf-c: bump to next release to support protobuf 4.23.x
        mariadb: add missing <cstdint> in rocksdb string_util.h
        etcd-cpp-apiv3: fix build when gRPC is cross compiled

  Daniel Semkowicz (2):
        cockpit: Move packagekit to a separate package
        cockpit: Move apps to a separate package

  Derek Straka (54):
        python3-absl: Update version 1.4.0 -> 2.0.0
        python3-brotli: Update version 1.0.9 -> 1.1.0
        python3-cachecontrol: Update version 0.13.0 -> 0.13.1
        python3-cantools: Update version 38.0.2 -> 39.2.0
        python3-cerberus: Update version 1.3.4 -> 1.3.5
        python3-configshell-fb: Update version 1.1.29 -> 1.1.30
        python3-custom-inherit: Update version 2.3.1 -> 2.4.1
        python3-distlib: Update version 0.3.6 -> 0.3.7
        python3-fasteners: Update version 0.18 -> 0.19
        python3-filelock: Update version 3.12.0 -> 3.12.4
        python3-bleak: Update version 0.20.2 -> 0.21.1
        python3-dynamic-dispatch: Correct the upstream regex check for version upgrades
        python3-google-api-python-client: Update version 2.99.0 -> 2.100.0
        python3-sqlalchemy: Upgrade 2.0.20 -> 2.0.21
        python3-netaddr: Update version 0.8.0 -> 0.9.0
        python3-msgpack: Update version 1.0.5 -> 1.0.6
        python3-protobuf: Update version 4.24.2 -> 4.24.3
        python3-gevent: Update version 23.7.0 -> 23.9.1
        python3-langtable: Update version 0.0.63 -> 0.0.64
        python3-posix-ipc: Update version 1.0.5 -> 1.1.1
        python3-websocket-client: Update version 1.5.3 -> 1.6.3
        python3-web3: Update version 6.9.0 -> 6.10.0
        python3-apiflask: Update version 2.0.1 -> 2.0.2
        python3-argh: Update version 0.29.3 -> 0.29.4
        python3-async-timeout: remove old version of the library
        python3-pydantic: Update version 1.10.7 -> 2.4.1
        python3-pyhamcrest: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-pyasn1-modules: Update version 0.2.8 -> 0.3.0
        python-pyiface: Update version from git -> 0.0.11
        python3-pymysql: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-pymysql: update verion 1.0.2 -> 1.1.0
        python3-pyproj: update version 3.6.0 -> 3.6.1
        python3-pyproject-api: update version 1.5.1 -> 1.6.1
        python3-redis: update version 5.0.0 -> 5.0.1
        python3-traitlets: update version 5.9.0 -> 5.10.1
        python3-xxhash: update version 3.2.0 -> 3.3.0
        python3-pyzmq: update version 25.0.0 -> 25.1.1
        python3-cachecontrol: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-flask-babel: update version 2.0.0 -> 3.1.0
        python3-idna-ssl: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-ninja-syntax: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-prettytable: update version 3.6.0 -> 3.9.0
        python3-pytz-deprecation-shim: Remove outdated recipe meant to be a short lived shim
        python3-tzlocal: Remove dependency on pytz_deprecation_shim removed in release 5.0
        python3-astroid: update version 2.16.6 -> 3.0.0
        python3-flask: update version 2.3.2 -> 2.3.3
        python3-google-api-core: update version 2.12.0
        python3-google-api-python-client: update version 2.100.0 -> 2.101.0
        python3-google-auth: update version 2.23.0 -> 2.23.1
        python3-parse-type: update version 0.5.2 -> 0.6.2
        python3-nacl: Add recipe for the latest release of PyNaCl
        python3-botocore: add recipe for latest version of botocore
        python3-boto3: add recipe for latest version of boto3
        python3-flask-cors: add initial version of the recipe for 4.0.0

  Etienne Cordonnier (1):
        uutils-coreutils: upgrade 0.0.20 -> 0.0.21

  Gianfranco Costamagna (3):
        mosquitto: do not automatically depend on dlt-daemon, it's a non-mandatory logging system
        mosquitto: upgrade 2.0.15 -> 2.0.17
        mosquitto: upgrade 2.0.17 -> 2.0.18

  Jeffrey Pautler (1):
        bolt: disable CVE checking for this recipe

  Jonas Gorski (1):
        frr: upgrade 8.4.4 -> 9.0.1

  Julian Haller (1):
        openct: Fix typo in SUMMARY variable

  Kai Kang (1):
        ostree: not compatible with riscv32 when ptest enabled

  Khem Raj (25):
        vlc: Fix build with gettext 0.22+
        usbguard: Enable seccomp if distro features have it
        sharutils: Check for intmax_t using configure
        poco: Add pass/fail ststus into logs
        mongodb: Add rdep on tzdata-core
        mongodb: Upgrade to 4.4.24
        meta-oe-ptest-image-poco: Increase size tp 1G
        poco: Fix ptest runtime errors
        poco: Do not enable MongoDB packageconfig by default
        plocate: Upgrade to 1.1.19 release
        xscreensaver: Add osuosl backup MIRROR
        mozjs-115: Apply autoconf tuple mismatch fix
        cpp-netlib: Fix build with boost 1.80+
        cpp-netlib: Fix buildpaths in generated cmake files
        python3-pybluez: Fix patch upstream-status
        python3-pynetlinux: Fix patch upstream-status
        libnet-idn-encode: Add recipe
        libio-socket-ssl-perl: Change libnet-libidn-perl->libnet-idn-encode rdep for ptests
        libnfs: Drop -Wno-implicit-function-declaration
        webkitgtk3: Do not use musttail with clang on arm
        fftw: Fix ptest result reporting
        nodejs: Fix ptest result reporting
        relayd: Update to latest tip of trunk
        relayd: Fix build with clang
        kernel-selftest: Build headers before compiling tests

  Lee Chee Yang (8):
        libsdl: fix CVE-2022-34568
        keepalived: 2.2.2 -> 2.2.8
        irssi: 1.4.2 -> 1.4.4
        iniparser: Fix CVE-2023-33461
        opensc: fix CVE-2023-2977
        x11vnc: Fix CVE-2020-29074
        libvncserver: update to 0.9.14
        ntpsec: 1.2.2 -> 1.2.2a

  Markus Volk (48):
        libei: add recipe
        libxmlb: update 0.3.10 -> 0.3.14
        appstream: update 0.16.2 -> 0.16.3
        webrtc-audio-processing: add recipe for 1.x
        pipewire: upgrade 0.3.79 -> 0.3.80
        evolution-data-server: upgrade 3.48.3 -> 3.50.0
        appstream: remove workaround for cross-compile
        libxmlb: fix a reproducibility and runtime issue with ptest
        tracker-miners: upgrade 3.5.0 -> 3.6.0
        mozjs: upgrade 102.9.0 -> 102.15.0
        tecla: add recipe
        polkit: upgrade 122 -> 123
        tracker: upgrade 3.5.1 -> 3.6.0
        libxmlb: remove recipe
        appstream: remove recipe
        gvfs: upgrade 1.51.90 -> 1.52.0
        mutter: upgrade 44.3 -> 45.0
        xdg-desktop-portal: upgrade 1.16.0 -> 1.18.0
        gnome-boxes: upgrade 44.2 -> 45.0
        gnome-session: upgrade 44.0 -> 45.0
        gnome-text-editor: upgrade 44.0 -> 45.0
        gnome-shell: upgrade 44.3 -> 45.0
        eog: upgrade 44.3 -> 45.0
        gnome-calculator: upgrade 44.0 -> 45.0
        xdg-desktop-portal-gnome: upgrade 44.1 -> 45.0
        gnome-calendar: upgrade 44.0 -> 45.0
        gnome-software: upgrade 44.4 -> 45.0
        zenity: upgrade 3.44.0 -> 3.44.2
        gnome-system-monitor: upgrade 44.0 -> 45.0
        webkitgtk: upgrade 2.40.5 -> 2.42.0
        gnome-control-center: upgrade 44.3 -> 45.0
        gnome-settings-daemon: upgrade 44.1 -> 45.0
        tracker: add missing Upstream-Status
        gdm: upgrade 44.1 -> 45.0.1
        gnome-calendar: fix reproducibility issue
        exiv2: Upgrade 0.27.6 -> 0.28.0
        gexiv: Upgrade 0.14.0 -> 0.14.2
        gjs: Upgrade 1.76.1 -> 1.78.0
        mozjs: add recipe for v115
        evince: Upgrade 44.2 -> 45.0
        Nautilus: Upgrade 44.2.1 -> 45.0
        gedit: Upgrade 44.2 -> 46.1
        tepl: Upgrade 6.4.0 -> 6.8.0
        libblockdev: Upgrade 2.28 -> 3.03
        udisks2: Upgrade 2.9.4 -> 2.10.1
        mozjs: Upgrade 102.15.0 -> 102.15.1
        libnfs: dont install libnfs-config.cmake
        gnome-remote-desktop: Upgrade 44.2 -> 45.0

  Martin Jansa (20):
        webrtc-audio-processing: Fix build with -Werror=return-type
        freeglut: return x11 to REQUIRED_DISTRO_FEATURES
        packagegroup-meta-multimedia: restore x11 restriction for projucer
        btrfsmaintenance: move btrfs-tools dependency from build-time to run-time
        btrfsmaintenance: drop allarch
        ttf-google-fira: exclude siggen dependency on fontconfig
        cukinia: drop allarch
        mdio-tools: exclude siggen dependency on mdio-netlink
        ot-br-posix: exclude siggen dependency on ipset
        mongodb: add and fix Upstream-Status
        mongodb: Fix build on 32bit
        gupnp: fix build with meson-1.2.0
        minifi-cpp, mozjs-115, redis-7.2.1, pv: add missing Upstream-Status
        mozjs: fix filename in MULTILIB_SCRIPTS
        gupnp-tools: fix build with meson-1.2.0
        gnome-tweaks, networkmanager-fortisslvpn, libesmtp, json-schema-validator, python3-pybluez, python3-pynetlinux, apache2: Fix Malformed Upstream-Status
        mozjs: use PV in MULTILIB_SCRIPTS
        mosquitto, etcd-cpp-apiv3: add missing Upstream-Status
        meta-oe/dynamic-layers: add Upstream-Status where missing
        meta-oe/dynamic-layers: add one more missing Upstream-Status and fix one malformed

  Michał Iwanicki (1):
        python3-pyu2f: add recipe

  Mingli Yu (4):
        minifi-cpp: Remove the buildpath issue
        hdf5: Upgrade to 1.14.2
        vlock: Use EXTRA_CFLAGS
        mozjs-102: Remove the buildpath

  Richard Leitner (2):
        python3-shellingham: add recipe for v1.5.3
        python3-autoflake: add recipe for v2.2.1

  Ross Burton (1):
        webkitgtk3: reduce size of -dbg package

  Sam Van Den Berge (6):
        python3-flask-jwt-extended: add recipe
        python3-flask-marshmallow: add recipe
        python3-apispec: add recipe
        python3-flask-httpauth: add recipe
        python3-webargs: add recipe
        python3-apiflask: add recipe

  Samantha Jalabert (6):
        Remove python3-rdflib
        Remove python3-license-expression
        Remove python3-xmltodict
        Remove python3-booleanpy
        Remove python3-click
        Remove python3-isodate

  Samuli Piippo (1):
        protobuf: stage protoc binary to sysroot

  Sanjay Chitroda (1):
        netkit-telnet: Fix CVE-2022-39028

  Trevor Gamblin (1):
        python3-aiofiles: upgrade 23.1.0 -> 23.2.1

  Vyacheslav Yurkov (3):
        overlayfs-tools: Drop unneeded dependency
        overlayfs-tools: Bump up the version
        overlayfs-tools: Install fsck binary

  Wang Mingyu (42):
        freerdp: upgrade 2.10.0 -> 2.11.0
        boost-sml: upgrade 1.1.8 -> 1.1.9
        ctags: upgrade 6.0.20230827.0 -> 6.0.20230917.0
        dovecot: upgrade 2.3.20 -> 2.3.21
        freerdp: upgrade 2.11.0 -> 2.11.1
        gensio: upgrade 2.7.5 -> 2.7.6
        geoclue: upgrade 2.7.0 -> 2.7.1
        hwloc: upgrade 2.9.2 -> 2.9.3
        iperf3: upgrade 3.14 -> 3.15
        libcloudproviders: upgrade 0.3.2 -> 0.3.4
        libdeflate: upgrade 1.18 -> 1.19
        libglvnd: upgrade 1.6.0 -> 1.7.0
        libtommath: upgrade 1.2.0 -> 1.2.1
        libcoap: upgrade 4.3.1 -> 4.3.3
        python3-antlr4-runtime: upgrade 4.13.0 -> 4.13.1
        python3-lazy: upgrade 1.5 -> 1.6
        python3-pyfanotify: upgrade 0.2.0 -> 0.2.1
        psqlodbc: upgrade 15.00.0000 -> 16.00.0000
        python3-argcomplete: upgrade 3.1.1 -> 3.1.2
        python3-bitstring: upgrade 4.1.1 -> 4.1.2
        python3-cmake: upgrade 3.27.4.1 -> 3.27.5
        python3-coverage: upgrade 7.3.0 -> 7.3.1
        python3-engineio: upgrade 4.7.0 -> 4.7.1
        python3-eth-utils: upgrade 2.2.0 -> 2.2.1
        python3-flask-migrate: upgrade 4.0.4 -> 4.0.5
        python3-flask-socketio: upgrade 5.3.5 -> 5.3.6
        python3-google-api-python-client: upgrade 2.97.0 -> 2.99.0
        python3-google-auth: upgrade 2.22.0 -> 2.23.0
        python3-pillow: upgrade 10.0.0 -> 10.0.1
        python3-pymisp: upgrade 2.4.175 -> 2.4.176
        python3-pymodbus: upgrade 3.5.0 -> 3.5.2
        python3-rapidjson: upgrade 1.10 -> 1.11
        python3-rich: upgrade 13.5.2 -> 13.5.3
        python3-term: upgrade 2.4 -> 2.5
        python3-tox: upgrade 4.11.1 -> 4.11.3
        python3-typeguard: upgrade 4.1.3 -> 4.1.5
        python3-types-setuptools: upgrade 68.1.0.1 -> 68.2.0.0
        python3-virtualenv: upgrade 20.24.4 -> 20.24.5
        python3-xlsxwriter: upgrade 3.1.2 -> 3.1.3
        python3-zeroconf: upgrade 0.97.0 -> 0.112.0
        redis: upgrade 7.2.0 -> 7.2.1
        remmina: upgrade 1.4.31 -> 1.4.32

  Xiangyu Chen (3):
        mosh: add support of protobuf 4.22.x
        protobuf: upgrade 3.21.12 -> 4.22.2
        protobuf-c: add support of protobuf 4.22.x

  Yi Zhao (1):
        audit: upgrade 3.1.1 -> 3.1.2

meta-arm: bd0953cc60..95789365f7:
  Abdellatif El Khlifi (2):
        arm-bsp/trusted-firmware-a: corstone1000: enable ERRATA_A35_855472
        arm-bsp/u-boot: corstone1000: purge U-Boot specific DT nodes before Linux

  Adam Johnston (1):
        arm-bsp/trusted-firmware-a: Fix BL32 path if usrmerge enabled

  Divin Raj (1):
        ci,doc,kas,arm-bsp,arm: Remove support for fvp-baser-aemv8r64 machine

  Emekcan Aras (6):
        arm-bsp/optee-os: corstone1000: Handling logging syscall correctly
        CI: Add meta-secure-core
        CI: Include meta-secure-core in corstone1000
        kas: corstone1000: add meta-secure-core
        arm-bsp/u-boot: corstone1000: introduce authenticated capsule update
        arm-bsp/trusted-firmware-m: Enable authenticated capsule update

  Javier Tia (2):
        optee-client: start tee-supplicant.service when teeprivX dev is detected
        libts: tee-udev.rules: Change ownership to tee group

  Jon Mason (5):
        arm/edk2: update to edk2-stable202308
        arm/trusted-firmware-m: update to 1.8.1
        arm/opencsd: update to v1.4.1
        arm/scp-firmware: update to v2.13.0
        README: remove reference to meta-arm-autonomy

  Khem Raj (1):
        layer.conf: update LAYERSERIES_COMPAT for nanbield

  Mariam Elshakfy (2):
        arm-bsp/optee-os: N1SDP upgrade optee-os to 3.22
        arm-bsp/optee-os: N1SDP upgrade tadevkit and optee-test to 3.22

  Peter Hoyes (2):
        CI: Allow a GitHub container registry mirror to be specified
        CI: Make update-repos more resilient to network issues

  Ross Burton (15):
        arm/generic-arm64: move SERIAL_CONSOLES to generic-arm64
        arm/qemu-generic-arm64: force off KVM in qemu
        arm/generic-arm64: set XSERVER to install the modesetting driver
        CI: remove redundant variables in testimage.yml
        arm-bsp: change port mapping for SSH to port 2222
        arm/apply_local_src_patches: allow use in multiple directories
        arm/trusted-services: pass through CMake generator
        arm/trusted-services: add missing pkgconfig inherit
        arm/trusted-services/ts-remote-test: move binary to $bindir
        arm/trusted-services/ts-sp-env-test: add missing DEPENDS
        arm/trusted-services/ts-sp-env-test: remove
        arm/trusted-services: use apply_local_src_patches
        arm/trusted-services: upgrade nanopb and fix build races
        CI: use a venv for sphinx
        CI: upgrade to Kas 4 container

  Xueliang Zhong (2):
        arm-bsp/n1sdp: update to linux yocto kernel 6.4
        arm-bsp/corstone1000: bump kernel version to v6.4

meta-security: 1856a7cf43..aca6d4a9e7:
  Armin Kuster (10):
        suricata: fix build issue.
        suricata: Update to 7.0.0
        sssd: Update to 2.9.2
        openscap: update to 1.3.9
        python3-privacyidea: update to 3.8.1
        lkrg-module: update to 0.9.7
        libhtp: update to 0.5.45
        swtpm: update 0.8.1
        lynis: Update to 3.0.9
        scap-security-guide: Drop Poky patch and update to tip

  John Broadbent (1):
        libhoth: Update

meta-raspberrypi: 6501ec892c..482d864b8f:
  Joshua Watt (1):
        rpi-base: Fix wic image kernel dependency

  Khem Raj (5):
        userland: Update to trunk from 20230419
        linux-raspberrypi: Upgrade 6.1 release to latest point release 6.1.54
        linux-firmware-rpidistro: Update to 20230210-5_bpo11+1
        bluez-firmware-rpidistro: Update to 1.2-4+rpt10
        raspberrypi-firmware: Update to 20230509~buster

  Martin Jansa (1):
        layer.conf: update LAYERSERIES_COMPAT for nanbield

Change-Id: Id75112a3b0be4bd150dc5d9a28c01982ed48200e
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/meta-arm/.gitlab-ci.yml b/meta-arm/.gitlab-ci.yml
index a2af871..0466c09 100644
--- a/meta-arm/.gitlab-ci.yml
+++ b/meta-arm/.gitlab-ci.yml
@@ -1,9 +1,10 @@
-image: ghcr.io/siemens/kas/kas:3.3
+image: ${MIRROR_GHCR}/siemens/kas/kas:4.0
 
 variables:
   CPU_REQUEST: ""
   DEFAULT_TAG: ""
   CACHE_DIR: $CI_BUILDS_DIR/persist
+  MIRROR_GHCR: ghcr.io
   # These are needed as the k8s executor doesn't respect the container entrypoint
   # by default
   FF_KUBERNETES_HONOR_ENTRYPOINT: 1
@@ -76,6 +77,8 @@
 update-repos:
   extends: .setup
   stage: prep
+  allow_failure:
+    exit_codes: 128
   script:
     - |
       flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos
@@ -122,14 +125,6 @@
       - TESTING: testimage
       - FIRMWARE: edk2
 
-fvp-baser-aemv8r64:
-  extends: .build
-  parallel:
-    matrix:
-      - TESTING: testimage
-  tags:
-    - x86_64
-
 fvps:
   extends: .build
 
@@ -285,7 +280,14 @@
   extends: .setup
   script:
     - |
-      sudo pip3 install -r meta-arm-bsp/documentation/requirements.txt
+      # This can be removed when the kas container has python3-venv installed
+      sudo apt-get update && sudo apt-get install --yes python3-venv
+
+      python3 -m venv venv
+      . ./venv/bin/activate
+
+      pip3 install -r meta-arm-bsp/documentation/requirements.txt
+
       for CONF in meta-*/documentation/*/conf.py ; do
         echo Building $CONF...
         SOURCE_DIR=$(dirname $CONF)
diff --git a/meta-arm/README.md b/meta-arm/README.md
index 7779258..82c326d 100644
--- a/meta-arm/README.md
+++ b/meta-arm/README.md
@@ -6,10 +6,6 @@
 
   This layer contains general recipes for the Arm architecture, such as firmware, FVPs, and Arm-specific integration.
 
-* meta-arm-autonomy
-
-  This layer is the distribution for a reference stack for autonomous systems.
-
 * meta-arm-bsp
 
   This layer contains machines for Arm reference platforms, for example FVP Base, N1SDP, and Juno.
diff --git a/meta-arm/ci/corstone1000-common.yml b/meta-arm/ci/corstone1000-common.yml
index a4c9ca3..0947228 100644
--- a/meta-arm/ci/corstone1000-common.yml
+++ b/meta-arm/ci/corstone1000-common.yml
@@ -4,6 +4,7 @@
     - ci/base.yml
     - ci/meta-openembedded.yml
     - ci/poky-tiny.yml
+    - ci/meta-secure-core.yml
 
 local_conf_header:
     extrapackages: |
diff --git a/meta-arm/ci/fvp-baser-aemv8r64.yml b/meta-arm/ci/fvp-baser-aemv8r64.yml
deleted file mode 100644
index fd90625..0000000
--- a/meta-arm/ci/fvp-baser-aemv8r64.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-header:
-  version: 14
-  includes:
-    - ci/base.yml
-    - ci/fvp.yml
-
-machine: fvp-baser-aemv8r64
diff --git a/meta-arm/ci/meta-openembedded.yml b/meta-arm/ci/meta-openembedded.yml
index e1e16c8..743fdde 100644
--- a/meta-arm/ci/meta-openembedded.yml
+++ b/meta-arm/ci/meta-openembedded.yml
@@ -9,3 +9,4 @@
       meta-networking:
       meta-oe:
       meta-python:
+      meta-perl:
diff --git a/meta-arm/ci/meta-secure-core.yml b/meta-arm/ci/meta-secure-core.yml
new file mode 100644
index 0000000..94b11a7
--- /dev/null
+++ b/meta-arm/ci/meta-secure-core.yml
@@ -0,0 +1,11 @@
+header:
+  version: 14
+
+repos:
+  meta-secure-core:
+    url: https://github.com/Wind-River/meta-secure-core.git
+    layers:
+      meta:
+      meta-signing-key:
+      meta-efi-secure-boot:
+      
diff --git a/meta-arm/ci/testimage.yml b/meta-arm/ci/testimage.yml
index f496ec1..a0e9025 100644
--- a/meta-arm/ci/testimage.yml
+++ b/meta-arm/ci/testimage.yml
@@ -11,8 +11,6 @@
     QEMU_USE_KVM = ""
   slirp: |
     TEST_RUNQEMUPARAMS = "slirp"
-    TEST_SERVER_IP = "127.0.0.1"
-    QEMU_USE_SLIRP = "1"
   sshd: |
     IMAGE_FEATURES:append = " ssh-server-dropbear"
   sshkeys: |
diff --git a/meta-arm/ci/update-repos b/meta-arm/ci/update-repos
index 9487102..069a94e 100755
--- a/meta-arm/ci/update-repos
+++ b/meta-arm/ci/update-repos
@@ -32,6 +32,7 @@
         sys.exit(1)
 
     base_repodir = pathlib.Path(os.environ["KAS_REPO_REF_DIR"])
+    failed = False
 
     for repo in repositories:
         repodir = base_repodir / repo_shortname(repo)
@@ -41,8 +42,15 @@
             shutil.rmtree(repodir, ignore_errors=True)
 
         if repodir.exists():
-            print("Updating %s..." % repo)
-            subprocess.run(["git", "-C", repodir, "-c", "gc.autoDetach=false", "fetch"], check=True)
+            try:
+                print("Updating %s..." % repo)
+                subprocess.run(["git", "-C", repodir, "-c", "gc.autoDetach=false", "fetch"], check=True)
+            except subprocess.CalledProcessError as e:
+                print(e)
+                failed = True
         else:
             print("Cloning %s..." % repo)
             subprocess.run(["git", "clone", "--bare", repo, repodir], check=True)
+
+    if failed:
+        sys.exit(128)
diff --git a/meta-arm/documentation/oeqa-fvp.md b/meta-arm/documentation/oeqa-fvp.md
index b39e096..c66a942 100644
--- a/meta-arm/documentation/oeqa-fvp.md
+++ b/meta-arm/documentation/oeqa-fvp.md
@@ -8,9 +8,9 @@
 ```
 TEST_TARGET = "OEFVPTarget"
 TEST_SERVER_IP = "127.0.0.1"
-TEST_TARGET_IP = "127.0.0.1:8022"
+TEST_TARGET_IP = "127.0.0.1:2222"
 IMAGE_FEATURES:append = " ssh-server-dropbear"
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "8022=22"
+FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "2222=22"
 FVP_CONSOLES[default] = "terminal_0"
 FVP_CONSOLES[tf-a] = "s_terminal_0"
 ```
diff --git a/meta-arm/documentation/runfvp.md b/meta-arm/documentation/runfvp.md
index b3c6467..ed14d44 100644
--- a/meta-arm/documentation/runfvp.md
+++ b/meta-arm/documentation/runfvp.md
@@ -55,7 +55,7 @@
 
 The name of the recipe that provides the FVP executable set in `FVP_EXE`, for example `fvp-base` uses `fvp-base-a-aem-native`.  This *must* be a `-native` recipe as the binary will be executed on the build host.
 
-There are recipes for common FVPs in meta-arm already, and writing new recipes is trivial.  For FVPs which are free to download `fvp-base-a-aem.bb` is a good example. Some FVPs must be downloaded separately as they need an account on Arm's website, `fvp-base-r-aem.bb` is a good example of those.
+There are recipes for common FVPs in meta-arm already, and writing new recipes is trivial.  For FVPs which are free to download `fvp-base-a-aem.bb` is a good example. Some FVPs must be downloaded separately as they need an account on Arm's website.
 
 If `FVP_PROVIDER` is not set then it is assumed that `FVP_EXE` is installed on the host already.
 
diff --git a/meta-arm/kas/corstone1000-base.yml b/meta-arm/kas/corstone1000-base.yml
index 161312f..5e4ae7e 100644
--- a/meta-arm/kas/corstone1000-base.yml
+++ b/meta-arm/kas/corstone1000-base.yml
@@ -32,6 +32,13 @@
       meta-oe:
       meta-python:
 
+  meta-secure-core:
+    url: https://github.com/wind-river/meta-secure-core.git
+    layers:
+      meta:
+      meta-signing-key:
+      meta-efi-secure-boot:
+
 local_conf_header:
   base: |
     CONF_VERSION = "2"
diff --git a/meta-arm/kas/fvp-baser-aemv8r64-bsp.yml b/meta-arm/kas/fvp-baser-aemv8r64-bsp.yml
deleted file mode 100644
index 366ab87..0000000
--- a/meta-arm/kas/fvp-baser-aemv8r64-bsp.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-header:
-  version: 9
-  includes:
-    - kas/fvp-eula.yml
-
-env:
-  DISPLAY: ""
-
-distro: poky
-machine: fvp-baser-aemv8r64
-
-defaults:
-  repos:
-    refspec: master
-
-repos:
-  meta-arm:
-    url: https://git.yoctoproject.org/git/meta-arm
-    path: layers/meta-arm
-    layers:
-      meta-arm:
-      meta-arm-bsp:
-      meta-arm-toolchain:
-
-  poky:
-    url: https://git.yoctoproject.org/git/poky
-    path: layers/poky
-    layers:
-      meta:
-      meta-poky:
-
-local_conf_header:
-  base: |
-    CONF_VERSION = "2"
-    PACKAGE_CLASSES = "package_ipk"
-    PACKAGECONFIG:remove:pn-qemu-system-native = "gtk+ sdl"
-    EXTRA_IMAGE_FEATURES:append = " debug-tweaks ssh-server-openssh"
-    CORE_IMAGE_EXTRA_INSTALL:append = " ssh-pregen-hostkeys"
-    IMAGE_CLASSES:append = " testimage"
-
-target:
-  - core-image-minimal
diff --git a/meta-arm/kas/fvp-baser-aemv8r64-rt-bsp.yml b/meta-arm/kas/fvp-baser-aemv8r64-rt-bsp.yml
deleted file mode 100644
index 19ee747..0000000
--- a/meta-arm/kas/fvp-baser-aemv8r64-rt-bsp.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-header:
-  version: 9
-  includes:
-    - kas/fvp-baser-aemv8r64-bsp.yml
-
-local_conf_header:
-  base-rt: |
-    PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt"
diff --git a/meta-arm/meta-arm-bsp/conf/layer.conf b/meta-arm/meta-arm-bsp/conf/layer.conf
index e192a83..97d9728 100644
--- a/meta-arm/meta-arm-bsp/conf/layer.conf
+++ b/meta-arm/meta-arm-bsp/conf/layer.conf
@@ -9,7 +9,7 @@
 BBFILE_PATTERN_meta-arm-bsp = "^${LAYERDIR}/"
 BBFILE_PRIORITY_meta-arm-bsp = "5"
 
-LAYERSERIES_COMPAT_meta-arm-bsp = "mickledore"
+LAYERSERIES_COMPAT_meta-arm-bsp = "nanbield"
 
 LAYERDEPENDS_meta-arm-bsp = "core meta-arm"
 # This won't be used by layerindex-fetch, but works everywhere else
diff --git a/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf b/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
index ebfba5b..5b3e150 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
@@ -24,7 +24,7 @@
 FVP_CONFIG[board.hostbridge.interfaceName] ?= "tap0"
 FVP_CONFIG[board.smsc_91c111.enabled] ?= "1"
 FVP_CONFIG[board.hostbridge.userNetworking] ?= "true"
-FVP_CONFIG[board.hostbridge.userNetPorts] ?= "5555=5555,8080=80,8022=22"
+FVP_CONFIG[board.hostbridge.userNetPorts] ?= "5555=5555,8080=80,2222=22"
 FVP_CONFIG[board.se_flash_size] ?= "8192"
 FVP_CONFIG[diagnostics] ?= "4"
 FVP_CONFIG[disable_visualisation] ?= "true"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf b/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf
deleted file mode 100644
index 7d2eaf9..0000000
--- a/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf
+++ /dev/null
@@ -1,66 +0,0 @@
-# Configuration for Fixed Virtual Platform BaseR AEMv8r64 Machine
-
-#@TYPE: Machine
-#@NAME: FVP BaseR AEMv8r64 Machine
-#@DESCRIPTION: Machine configuration for FVP BaseR AEMv8r64
-
-require conf/machine/include/arm/armv8r/arch-armv8r64.inc
-
-EXTRA_IMAGEDEPENDS += "boot-wrapper-aarch64"
-
-PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
-PREFERRED_VERSION_u-boot ?= "2023.01"
-
-KERNEL_IMAGETYPE = "Image"
-KERNEL_DEVICETREE = "arm/fvp-baser-aemv8r64.dtb"
-
-UBOOT_MACHINE ?= "vexpress_aemv8r_defconfig"
-
-SERIAL_CONSOLES = "115200;ttyAMA0"
-
-IMAGE_CLASSES:append = " fvpboot"
-IMAGE_FSTYPES += "wic"
-WKS_FILE ?= "efi-disk.wks.in"
-EFI_PROVIDER ?= "grub-efi"
-MACHINE_FEATURES:append = " efi"
-
-IMAGE_NAME_SUFFIX = ""
-
-# As this is a virtual target that will not be used in the real world there is
-# no need for real SSH keys.
-MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
-
-# testimage configuration
-TEST_TARGET = "OEFVPTarget"
-TEST_SUITES:append = " fvp_boot fvp_devices"
-TEST_TARGET_IP ?= "127.0.0.1:8022"
-TEST_SERVER_IP ?= "127.0.1.1"
-TEST_FVP_DEVICES ?= "rtc watchdog networking virtiorng cpu_hotplug"
-
-FVP_EXTRA_ARGS = "-a cluster0*=linux-system.axf"
-FVP_PROVIDER ?= "fvp-base-r-aem-native"
-FVP_EXE ?= "FVP_BaseR_AEMv8R"
-FVP_CONSOLE ?= "terminal_0"
-
-# FVP parameters
-FVP_CONFIG[bp.exclusive_monitor.monitor_access_level] ?= "2"
-FVP_CONFIG[bp.refcounter.non_arch_start_at_default] ?= "1"
-FVP_CONFIG[bp.refcounter.use_real_time] ?= "1"
-FVP_CONFIG[bp.ve_sysregs.exit_on_shutdown] ?= "1"
-FVP_CONFIG[bp.virtio_net.enabled] ?= "1"
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "8022=22"
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetworking] ?= "1"
-FVP_CONFIG[bp.virtio_net.secure_accesses] = "1"
-FVP_CONFIG[bp.virtio_rng.enabled] ?= "1"
-FVP_CONFIG[bp.virtio_rng.secure_accesses] = "1"
-FVP_CONFIG[bp.virtioblockdevice.image_path] ?= "${IMAGE_NAME}.wic"
-FVP_CONFIG[bp.virtioblockdevice.secure_accesses] = "1"
-FVP_CONFIG[cache_state_modelled] ?= "0"
-FVP_CONFIG[cci400.force_on_from_start] = "1"
-FVP_CONFIG[cluster0.gicv3.cpuintf-mmap-access-level] ?= "2"
-FVP_CONFIG[cluster0.gicv3.extended-interrupt-range-support] ?= "1"
-FVP_CONFIG[cluster0.gicv3.SRE-EL2-enable-RAO] ?= "1"
-FVP_CONFIG[cluster0.gicv3.SRE-enable-action-on-mmap] ?= "2"
-FVP_CONFIG[cluster0.has_aarch64] ?= "1"
-FVP_CONFIG[gic_distributor.GICD_CTLR-DS-1-means-secure-only] ?= "1"
-FVP_CONFIG[gic_distributor.has-two-security-states] ?= "0"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/arm/armv8r/arch-armv8r64.inc b/meta-arm/meta-arm-bsp/conf/machine/include/arm/armv8r/arch-armv8r64.inc
deleted file mode 100644
index 5db12e2..0000000
--- a/meta-arm/meta-arm-bsp/conf/machine/include/arm/armv8r/arch-armv8r64.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-require conf/machine/include/arm/arch-armv8r.inc
-
-TUNE_FEATURES:tune-armv8r            =+ "aarch64"
-PACKAGE_EXTRA_ARCHS:tune-armv8r      =+ "aarch64"
-BASE_LIB:tune-armv8r                 = "lib64"
-BASE_LIB:tune-armv8r-crc             = "lib64"
-BASE_LIB:tune-armv8r-crypto          = "lib64"
-BASE_LIB:tune-armv8r-simd            = "lib64"
-BASE_LIB:tune-armv8r-crc-simd        = "lib64"
-BASE_LIB:tune-armv8r-crc-crypto-simd = "lib64"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
index 72c0af5..5a66f54 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
@@ -52,7 +52,7 @@
 
 # Linux kernel
 PREFERRED_PROVIDER_virtual/kernel:forcevariable = "linux-yocto"
-PREFERRED_VERSION_linux-yocto = "6.1%"
+PREFERRED_VERSION_linux-yocto = "6.4%"
 KERNEL_IMAGETYPE = "Image.gz"
 
 INITRAMFS_IMAGE_BUNDLE ?= "1"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc b/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
index 36bf955..e6e4443 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
+++ b/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
@@ -23,7 +23,7 @@
 MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
 
 TEST_TARGET = "OEFVPTarget"
-TEST_TARGET_IP = "127.0.0.1:8022"
+TEST_TARGET_IP = "127.0.0.1:2222"
 TEST_SUITES:append = " fvp_boot fvp_devices"
 TEST_FVP_DEVICES ?= "rtc watchdog networking virtiorng cpu_hotplug"
 
@@ -32,8 +32,8 @@
 FVP_CONFIG[bp.ve_sysregs.exit_on_shutdown] ?= "1"
 FVP_CONFIG[bp.virtio_net.enabled] ?= "1"
 FVP_CONFIG[bp.virtio_net.hostbridge.userNetworking] ?= "1"
-# Tell testimage to connect to localhost:8022, and forward that to SSH in the FVP.
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] = "8022=22"
+# Tell testimage to connect to localhost:2222, and forward that to SSH in the FVP.
+FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] = "2222=22"
 FVP_CONFIG[cache_state_modelled] ?= "0"
 FVP_CONFIG[bp.secureflashloader.fname] ?= "bl1-fvp.bin"
 FVP_CONFIG[bp.flashloader0.fname] ?= "fip-fvp.bin"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf b/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
index c25a32d..b93e053 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
@@ -19,7 +19,7 @@
 
 # Use kernel provided by yocto
 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
-PREFERRED_VERSION_linux-yocto ?= "6.1%"
+PREFERRED_VERSION_linux-yocto ?= "6.4%"
 
 # RTL8168E Gigabit Ethernet Controller is attached to the PCIe interface
 MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "linux-firmware-rtl8168"
@@ -32,7 +32,7 @@
 PREFERRED_VERSION_edk2-firmware ?= "202305"
 
 #optee
-PREFERRED_VERSION_optee-os ?= "3.20.%"
+PREFERRED_VERSION_optee-os ?= "3.22.%"
 
 #grub-efi
 EFI_PROVIDER ?= "grub-efi"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/tc1.conf b/meta-arm/meta-arm-bsp/conf/machine/tc1.conf
index 31bcc2f..a0f2967 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/tc1.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/tc1.conf
@@ -19,7 +19,7 @@
 FVP_CONFIG[board.flashloader0.fname] ?= "fip_gpt-tc.bin"
 
 #FVP_CONFIG[board.hostbridge.userNetworking] ?= "true"
-#FVP_CONFIG[board.hostbridge.userNetPorts] ?= "8022=22"
+#FVP_CONFIG[board.hostbridge.userNetPorts] ?= "2222=22"
 #smsc ethernet takes a very long time to come up.  disable now to prevent testimage timeout
 #FVP_CONFIG[board.smsc_91c111.enabled] ?= "1"
 
diff --git a/meta-arm/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md b/meta-arm/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md
deleted file mode 100644
index 2635e75..0000000
--- a/meta-arm/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md
+++ /dev/null
@@ -1,264 +0,0 @@
-Armv8-R AArch64 AEM FVP Support in meta-arm-bsp
-===============================================
-
-Overview
---------
-
-Fixed Virtual Platforms (FVP) are complete simulations of an Arm system,
-including processor, memory and peripherals. These are set out in a
-"programmer's view", which gives you a comprehensive model on which to build
-and test your software.
-
-The Armv8-R AEM FVP is a free of charge Armv8-R Fixed Virtual Platform. It
-supports the latest Armv8-R feature set.
-
-This BSP implements a reference stack for the AArch64 support in the R-class
-first announced with the Cortex-R82 processor:
-https://developer.arm.com/ip-products/processors/cortex-r/cortex-r82
-
-Fast Models Fixed Virtual Platforms (FVP) Reference Guide:
-https://developer.arm.com/docs/100966/latest
-
-
-BSP Support
------------
-
-The fvp-baser-aemv8r64 Yocto MACHINE supports the following BSP components,
-where either a standard or Real-Time Linux kernel (PREEMPT\_RT) can be built
-and run:
-
- - FVP_Base_AEMv8R: v11.22.14
- - boot-wrapper-aarch64: provides PSCI support
- - U-Boot: v2022.07 - provides UEFI services
- - Linux kernel: linux-yocto-5.15
- - Linux kernel with PREEMPT\_RT support: linux-yocto-rt-5.15
-
-Note that the Real-Time Linux kernel (PREEMPT\_RT) does not use the real-time
-architectural extensions of the Armv8-R feature set.
-
-High-Level Architecture
------------------------
-
-The diagram below shows the current boot flow:
-
-    +---------------------------------------------------------------+
-    |                         Linux kernel                          |
-    +---------------------------------------------------------------+
-               /|\                                     /|\
-                |                                       |
-                | UEFI services                         |
-                |                         PSCI services |
-               \|/                                      |
-        +----------------+                              |     S-EL1
-    ----|     U-Boot     |------------------------------|-----------
-        +----------------+                              |     S-EL2
-               /|\                                      |
-                |                                       |
-                |                                       |
-                |                                       |
-    +--------------------------------------------------\|/----------+
-    |                        +----------------+ +----------------+  |
-    |  boot-wrapper-aarch64  |  Device tree   | |  PSCI handler  |  |
-    |                        +----------------+ +----------------+  |
-    +---------------------------------------------------------------+
-
-
-The firmware binary (generated as `linux-system.axf`) includes
-boot-wrapper-aarch64, the flattened device tree and U-Boot. U-Boot is configured
-to automatically detect a virtio block device and boot the UEFI payload at the
-path `/efi/boot/bootaa64.efi`. Using the standard build, the first partition
-contains a Grub image at this path, which boots the Linux kernel at `/Image` on
-the same partition. The second partition of the image contains the Linux root
-file system.
-
-There is no EL3 or non-secure world in the Armv8-R AArch64 architecture, so the
-reset vector starts boot-wrapper-aarch64 at S-EL2. Boot-wrapper-aarch64 is
-compiled with the `--enable-keep-el` flag, which causes it to boot U-Boot at
-S-EL2 too. U-Boot is compiled with the `CONFIG_ARMV8_SWITCH_TO_EL1` flag, which
-causes it to switch to S-EL1 before booting Linux.
-
-The bundled device tree is passed to U-Boot via register x0. U-Boot passes the
-same device tree to Linux via the UEFI system table.
-
-Power state management is provided by PSCI services in boot-wrapper-aarch64.
-Linux accesses the PSCI handler via HVC calls to S-EL2. U-Boot has been patched
-to prevent it from overriding the exception vector at S-EL2. The PSCI handler
-memory region is added to a `/memreserve/` node in the device tree.
-
-Please note that the final firmware architecture for the fvp-baser-aemv8r64 is
-not yet stabilized. The patches in this layer are provided for development and
-evaluation purposes only, and should not be used in production firmware.
-
-Quick start: Howto Build and Run
---------------------------------
-
-### Host environment setup
-The following instructions have been tested on hosts running Ubuntu 18.04 and
-Ubuntu 20.04.
-Install the required packages for the build host:
-https://docs.yoctoproject.org/singleindex.html#required-packages-for-the-build-host
-
-Kas is a setup tool for bitbake based projects. The minimal supported version
-is 3.0, install it like so:
-
-    pip3 install --user --upgrade kas
-
-For more details on kas, see https://kas.readthedocs.io/.
-
-To build the images for the fvp-baser-aemv8r64 machine, you also need to accept
-the EULA at
-https://developer.arm.com/downloads/-/arm-ecosystem-fvps/eula
-by setting the following environment variable:
-
-    ARM_FVP_EULA_ACCEPT="True"
-
-**Note:** The host machine should have at least 50 GBytes of free disk space
-for the next steps to work correctly.
-
-### Fetch sources
-To fetch and build the ongoing development of the software stack follow the
-instructions on this document.
-
-To fetch and build the version 1 (single core) find instructions at https://community.arm.com/developer/tools-software/oss-platforms/w/docs/633/release-1-single-core
-
-To fetch and build the version 2 (linux smp) find instructions at https://community.arm.com/developer/tools-software/oss-platforms/w/docs/634/release-2---smp
-
-Fetch the meta-arm repository into a build directory:
-
-    mkdir -p ~/fvp-baser-aemv8r64-build
-    cd ~/fvp-baser-aemv8r64-build
-    git clone https://git.yoctoproject.org/git/meta-arm
-
-
-### Build
-Building with the standard Linux kernel:
-
-    cd ~/fvp-baser-aemv8r64-build
-    export ARM_FVP_EULA_ACCEPT="True"
-    kas build meta-arm/kas/fvp-baser-aemv8r64-bsp.yml
-
-Building with the Real-Time Linux kernel (PREEMPT\_RT):
-
-    cd ~/fvp-baser-aemv8r64-build
-    export ARM_FVP_EULA_ACCEPT="True"
-    kas build meta-arm/kas/fvp-baser-aemv8r64-rt-bsp.yml
-
-### Run
-To run an image after the build is done with the standard Linux kernel:
-
-    kas shell --keep-config-unchanged \
-       meta-arm/kas/fvp-baser-aemv8r64-bsp.yml \
-           --command "../layers/meta-arm/scripts/runfvp \
-           --console "
-
-To run an image after the build is done with the Real-Time Linux kernel
-(PREEMPT\_RT):
-
-    kas shell --keep-config-unchanged \
-       meta-arm/kas/fvp-baser-aemv8r64-rt-bsp.yml \
-           --command "../layers/meta-arm/scripts/runfvp \
-           --console "
-
-**Note:** The terminal console login is `root` without password.
-
-To finish the fvp emulation, you need to close the telnet session:
-
- - Escape to telnet console with ``ctrl+]``.
- - Run ``quit`` to close the session.
-
-### Networking
-The FVP is configured by default to use "user-mode networking", which simulates
-an IP router and DHCP server to avoid additional host dependencies and
-networking configuration. Outbound connections work automatically, e.g. by
-running:
-
-    wget www.arm.com
-
-Inbound connections require an explicit port mapping from the host. By default,
-port 8022 on the host is mapped to port 22 on the FVP, so that the following
-command will connect to an ssh server running on the FVP:
-
-    ssh root@localhost -p 8022
-
-Note that user-mode networking does not support ICMP, so `ping` will not work.
-For more information about user-mode networking, please see
-https://developer.arm.com/documentation/100964/1117/Introduction-to-Fast-Models/User-mode-networking?lang=en
-
-### File sharing between host and fvp
-It is possible to share a directory between the host machine and the fvp using
-the virtio P9 device component included in the kernel. To do so, create a
-directory to be mounted from the host machine:
-
-    mkdir /path/to/host-mount-dir
-
-Then, add the following parameter containing the path to the directory when
-launching the model:
-
-    --parameter 'bp.virtiop9device.root_path=/path/to/host-mount-dir'
-
-e.g. for the standard Linux kernel:
-
-    kas shell --keep-config-unchanged \
-       meta-arm/kas/fvp-baser-aemv8r64-bsp.yml \
-           --command "../layers/meta-arm/scripts/runfvp \
-           --console -- --parameter \
-           'bp.virtiop9device.root_path=/path/to/host-mount-dir'"
-
-Once you are logged into the fvp, the host directory can be mounted in a
-directory on the model using the following command:
-
-    mount -t 9p -o trans=virtio,version=9p2000.L FM /path/to/fvp-mount-dir
-
-Devices supported in the kernel
--------------------------------
-
-- serial
-- virtio 9p
-- virtio disk
-- virtio network
-- virtio rng
-- watchdog
-- rtc
-
-Known Issues and Limitations
-----------------------------
-
-- Only PSCI CPU\_ON and CPU\_OFF functions are supported
-- Linux kernel does not support booting from secure EL2 on Armv8-R AArch64
-- Linux KVM does not support Armv8-R AArch64
-- Device DMA memory cache-coherence issue: the FVP `cache_state_modelled`
-  parameter will affect the cache coherence behavior of peripherals’ DMA. When
-  users set `cache_state_modelled=1`, they also have to set
-  `cci400.force_on_from_start=1` to force the FVP to enable snooping on upstream
-  ports.
-
-Change Log
-----------
-- Enabled the ability for U-Boot to apply device tree overlays
-- Fixed bug in U-Boot that caused changes to the `memory` node in the device
-  tree to be ignored.
-- Added boot-wrapper-aarch64 support for booting SMP payloads at S-EL2.
-- Enabled testimage support by default.
-- Added virtio\_rng to improve random number generation.
-- Added U-Boot v2022.01 for UEFI support.
-- Updated Linux kernel version from 5.14 to 5.15 for both standard and
-  Real-Time (PREEMPT\_RT) builds.
-- Updated boot-wrapper-aarch64 revision and added support for booting U-Boot.
-- Included boot-wrapper-aarch64 PSCI services in `/memreserve/` region.
-- Fixed the counter frequency initialization in boot-wrapper-aarch64.
-- Configured the FVP to use the default RAM size of 4 Gb
-- Fixed PL011 and SP805 register sizes in the device tree.
-- Added virtio\_net User Networking mode by default and removed instructions
-  about tap networking setup.
-- Updated Linux kernel version from 5.10 to 5.14 for both standard and
-  Real-Time (PREEMPT\_RT) builds.
-- Enabled SMP support via boot-wrapper-aarch64 providing the PSCI CPU\_ON and
-  CPU\_OFF functions.
-- Introduced Armv8-R64 compiler flags.
-- Added Linux PREEMPT\_RT support via linux-yocto-rt-5.10.
-- Added support for file sharing with the host machine using Virtio P9.
-- Added support for runfvp.
-- Added performance event support (PMU) in the Linux device tree.
-- Introduced the fvp-baser-aemv8r64 machine and its BSP composed of
-  boot-wrapper-aarch64 and linux-yocto-5.10 supporting serial, virtio disk,
-  virtio network, watchdog and rtc.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc
deleted file mode 100644
index 8ffa0aa..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPATIBLE_MACHINE = "fvp-baser-aemv8r64"
-
-FILESEXTRAPATHS:prepend := "${THISDIR}/files/${MACHINE}:"
-SRC_URI:append = " \
-    file://0001-aarch64-Rename-labels-and-prepare-for-lower-EL-booti.patch \
-    file://0002-aarch64-Prepare-for-EL1-booting.patch \
-    file://0003-aarch64-Prepare-for-lower-EL-booting.patch \
-    file://0004-gic-v3-Prepare-for-gicv3-with-EL2.patch \
-    file://0005-aarch64-Prepare-for-booting-with-EL2.patch \
-    file://0006-aarch64-Introduce-EL2-boot-code-for-Armv8-R-AArch64.patch \
-    file://0007-Allow-enable-psci-to-choose-between-smc-and-hvc.patch \
-    file://0008-aarch64-Disable-CNTPCT_EL0-trap-for-v8-R64.patch \
-    file://0009-lds-Mark-the-mem-range.patch \
-    file://0010-common-Introduce-the-libfdt.patch \
-    file://0011-common-Add-essential-libc-functions.patch \
-    file://0012-Makefile-Add-the-libfdt-to-the-Makefile-system.patch \
-    file://0013-platform-Add-print_hex-func.patch \
-    file://0014-common-Add-mem-usage-to-memreserve.patch \
-    file://0015-boot-Add-the-enable-keep-el-compile-option.patch \
-    file://0016-Makefile-Change-COUNTER_FREQ-to-100-MHz.patch \
-    file://0017-PSCI-Apply-flush-cache-after-setting-branch_data.patch \
-    file://0018-PSCI-Add-function-call-entry-point.patch \
-    file://0019-lds-Rearrange-and-mark-the-sections.patch \
-    file://0020-common-Provide-firmware-info-using-libfdt.patch \
-    file://0021-boot-Enable-firmware-node-initialization.patch \
-    "
-
-BOOT_WRAPPER_AARCH64_CMDLINE = "\
-earlycon console=ttyAMA0 loglevel=8 rootfstype=ext4 root=/dev/vda1 rw"
-
-EXTRA_OECONF += "--enable-psci=hvc --enable-keep-el"
-
-TUNE_CCARGS = ""
-
-BOOT_WRAPPER_AARCH64_KERNEL = "u-boot.bin"
-do_deploy[depends] += "u-boot:do_deploy"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64_%.bbappend
deleted file mode 100644
index c2e7e6e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64_%.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-MACHINE_BOOT_WRAPPER_AARCH64_REQUIRE ?= ""
-MACHINE_BOOT_WRAPPER_AARCH64_REQUIRE:fvp-baser-aemv8r64 ?= "boot-wrapper-aarch64-fvp-baser-aemv8r64.inc"
-
-require ${MACHINE_BOOT_WRAPPER_AARCH64_REQUIRE}
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0001-aarch64-Rename-labels-and-prepare-for-lower-EL-booti.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0001-aarch64-Rename-labels-and-prepare-for-lower-EL-booti.patch
deleted file mode 100644
index 31fd515..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0001-aarch64-Rename-labels-and-prepare-for-lower-EL-booti.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From 545f6950ae4dc55b4974986aa9629adb16eaf4e1 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] aarch64: Rename labels and prepare for lower EL booting
-
-Prepare for booting from lower EL. Rename *_el3 relavant labels with
-*_el_max and *_no_el3 with *_keep_el. Since the original _no_el3 means
-"We neither do init sequence at this highest EL nor drop to lower EL
-when entering to kernel", we rename it with _keep_el to make it more
-clear for lower EL initialisation.
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
----
- arch/aarch64/boot.S | 28 ++++++++++++++++++++--------
- arch/aarch64/psci.S |  9 +++++----
- arch/aarch64/spin.S |  4 ++--
- 3 files changed, 27 insertions(+), 14 deletions(-)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index d682ba5..fab694e 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -34,18 +34,30 @@ ASM_FUNC(_start)
- 
- 	/*
- 	 * EL3 initialisation
-+	 * Boot sequence
-+	 * If CurrentEL == EL3, then goto EL3 initialisation and drop to
-+	 *   lower EL before entering the kernel.
-+	 * Else, no initialisation and keep the current EL before
-+	 *   entering the kernel.
- 	 */
- 	mrs	x0, CurrentEL
- 	cmp	x0, #CURRENTEL_EL3
--	b.eq	1f
-+	b.eq	el3_init
- 
-+	/*
-+	 * We stay in the current EL for entering the kernel
-+	 */
- 	mov	w0, #1
--	ldr	x1, =flag_no_el3
-+	ldr	x1, =flag_keep_el
- 	str	w0, [x1]
- 
--	b	start_no_el3
-+	b	start_keep_el
- 
--1:	mov	x0, #0x30			// RES1
-+	/*
-+	 * EL3 initialisation
-+	 */
-+el3_init:
-+	mov	x0, #0x30			// RES1
- 	orr	x0, x0, #(1 << 0)		// Non-secure EL1
- 	orr	x0, x0, #(1 << 8)		// HVC enable
- 
-@@ -145,7 +157,7 @@ ASM_FUNC(_start)
- 
- 	bl	gic_secure_init
- 
--	b	start_el3
-+	b	start_el_max
- 
- err_invalid_id:
- 	b	.
-@@ -172,7 +184,7 @@ ASM_FUNC(jump_kernel)
- 	bl	find_logical_id
- 	bl	setup_stack		// Reset stack pointer
- 
--	ldr	w0, flag_no_el3
-+	ldr	w0, flag_keep_el
- 	cmp	w0, #0			// Prepare Z flag
- 
- 	mov	x0, x20
-@@ -181,7 +193,7 @@ ASM_FUNC(jump_kernel)
- 	mov	x3, x23
- 
- 	b.eq	1f
--	br	x19			// No EL3
-+	br	x19			// Keep current EL
- 
- 1:	mov	x4, #SPSR_KERNEL
- 
-@@ -199,5 +211,5 @@ ASM_FUNC(jump_kernel)
- 
- 	.data
- 	.align 3
--flag_no_el3:
-+flag_keep_el:
- 	.long 0
-diff --git a/arch/aarch64/psci.S b/arch/aarch64/psci.S
-index 8bd224b..7b8919a 100644
---- a/arch/aarch64/psci.S
-+++ b/arch/aarch64/psci.S
-@@ -79,7 +79,7 @@ smc_exit:
- 	ldp	x18, x19, [sp], #16
- 	eret
- 
--ASM_FUNC(start_el3)
-+ASM_FUNC(start_el_max)
- 	ldr	x0, =vector
- 	bl	setup_vector
- 
-@@ -89,10 +89,11 @@ ASM_FUNC(start_el3)
- 	b	psci_first_spin
- 
- /*
-- * This PSCI implementation requires EL3. Without EL3 we'll only boot the
-- * primary cpu, all others will be trapped in an infinite loop.
-+ * This PSCI implementation requires the highest EL(EL3 or Armv8-R EL2).
-+ * Without the highest EL, we'll only boot the primary cpu, all othersr
-+ * will be trapped in an infinite loop.
-  */
--ASM_FUNC(start_no_el3)
-+ASM_FUNC(start_keep_el)
- 	cpuid	x0, x1
- 	bl	find_logical_id
- 	cbz	x0, psci_first_spin
-diff --git a/arch/aarch64/spin.S b/arch/aarch64/spin.S
-index 1ea1c0b..bfb1d47 100644
---- a/arch/aarch64/spin.S
-+++ b/arch/aarch64/spin.S
-@@ -12,8 +12,8 @@
- 
- 	.text
- 
--ASM_FUNC(start_el3)
--ASM_FUNC(start_no_el3)
-+ASM_FUNC(start_el_max)
-+ASM_FUNC(start_keep_el)
- 	cpuid	x0, x1
- 	bl	find_logical_id
- 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0002-aarch64-Prepare-for-EL1-booting.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0002-aarch64-Prepare-for-EL1-booting.patch
deleted file mode 100644
index 4ef4507..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0002-aarch64-Prepare-for-EL1-booting.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From bad32d3fc127a421be416b17e4f7d6d514f06abb Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] aarch64: Prepare for EL1 booting
-
-When booting from EL1, add a check and skip the init of
-sctlr_el2 in jump_kernel
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Reviewed-by: Andre Przywara <andre.przywara@arm.com>
----
- arch/aarch64/boot.S            | 6 +++++-
- arch/aarch64/include/asm/cpu.h | 1 +
- 2 files changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index fab694e..5105b41 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -177,10 +177,14 @@ ASM_FUNC(jump_kernel)
- 	ldr	x0, =SCTLR_EL1_KERNEL
- 	msr	sctlr_el1, x0
- 
-+	mrs	x0, CurrentEL
-+	cmp	x0, #CURRENTEL_EL2
-+	b.lt	1f
-+
- 	ldr	x0, =SCTLR_EL2_KERNEL
- 	msr	sctlr_el2, x0
- 
--	cpuid	x0, x1
-+1:	cpuid	x0, x1
- 	bl	find_logical_id
- 	bl	setup_stack		// Reset stack pointer
- 
-diff --git a/arch/aarch64/include/asm/cpu.h b/arch/aarch64/include/asm/cpu.h
-index 49d3f86..3767da3 100644
---- a/arch/aarch64/include/asm/cpu.h
-+++ b/arch/aarch64/include/asm/cpu.h
-@@ -11,6 +11,7 @@
- 
- #define MPIDR_ID_BITS		0xff00ffffff
- 
-+#define CURRENTEL_EL2		(2 << 2)
- #define CURRENTEL_EL3		(3 << 2)
- 
- /*
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-aarch64-Prepare-for-lower-EL-booting.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-aarch64-Prepare-for-lower-EL-booting.patch
deleted file mode 100644
index c621187..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-aarch64-Prepare-for-lower-EL-booting.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 252cbd36e51414b60ab68306f9c38e358709494d Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] aarch64: Prepare for lower EL booting
-
-Save SPSR_KERNEL into spsr_to_elx during el3_init.
-The jump_kernel will load spsr_to_elx into spsr_el3.
-
-This change will make it easier to control whether drop to lower EL
-before jumping to the kernel.
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Reviewed-by: Andre Przywara <andre.przywara@arm.com>
----
- arch/aarch64/boot.S | 15 +++++++++++++--
- 1 file changed, 13 insertions(+), 2 deletions(-)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index 5105b41..243198d 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -151,7 +151,16 @@ el3_init:
- 	mov	x0, #ZCR_EL3_LEN_MAX		// SVE: Enable full vector len
- 	msr	ZCR_EL3, x0			// for EL2.
- 
--1:
-+	/*
-+	 * Save SPSR_KERNEL into spsr_to_elx.
-+	 * The jump_kernel will load spsr_to_elx into spsr_el3
-+	 */
-+1:	mov	w0, #SPSR_KERNEL
-+	ldr	x1, =spsr_to_elx
-+	str	w0, [x1]
-+	b	el_max_init
-+
-+el_max_init:
- 	ldr	x0, =COUNTER_FREQ
- 	msr	cntfrq_el0, x0
- 
-@@ -199,7 +208,7 @@ ASM_FUNC(jump_kernel)
- 	b.eq	1f
- 	br	x19			// Keep current EL
- 
--1:	mov	x4, #SPSR_KERNEL
-+1:	ldr	w4, spsr_to_elx
- 
- 	/*
- 	 * If bit 0 of the kernel address is set, we're entering in AArch32
-@@ -217,3 +226,5 @@ ASM_FUNC(jump_kernel)
- 	.align 3
- flag_keep_el:
- 	.long 0
-+spsr_to_elx:
-+	.long 0
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0004-gic-v3-Prepare-for-gicv3-with-EL2.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0004-gic-v3-Prepare-for-gicv3-with-EL2.patch
deleted file mode 100644
index 43885b9..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0004-gic-v3-Prepare-for-gicv3-with-EL2.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From bff110a95a5e4c9db2d61e629b4aa4b84530201e Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] gic-v3: Prepare for gicv3 with EL2
-
-This is a preparation for allowing boot-wrapper configuring the gicv3
-with EL2.
-
-When confiuring with EL2, since there is no ICC_CTLR_EL2, the
-ICC_CTLR_EL3 cannot be replaced with ICC_CTLR_EL2 simply.
-See [https://developer.arm.com/documentation/ihi0069/latest/].
-
-As the caller, gic_secure_init expects the ICC_CTLR to be written,
-we change the function into gic_init_icc_ctlr(). In the GIC spec,
-the r/w bits in this register ([6:0]) either affect EL3 IRQ routing
-(not applicable since no EL3), non-secure IRQ handling (not applicable
-since only secure state in Armv8-R aarch64), or are aliased to
-ICC_CTLR_EL1 bits.
-So, based on this, the new gic_init_icc_ctlr() would be:
-When currentEL is EL3, init ICC_CTLR_EL3 as before.
-When currentEL is not EL3, init ICC_CTLR_EL1 with ICC_CTLR_EL1_RESET.
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Reviewed-by: Andre Przywara <andre.przywara@arm.com>
----
- arch/aarch32/include/asm/gic-v3.h |  7 +++++++
- arch/aarch64/include/asm/gic-v3.h | 23 ++++++++++++++++++++---
- common/gic-v3.c                   |  2 +-
- 3 files changed, 28 insertions(+), 4 deletions(-)
-
-diff --git a/arch/aarch32/include/asm/gic-v3.h b/arch/aarch32/include/asm/gic-v3.h
-index 65f38de..11e7bc7 100644
---- a/arch/aarch32/include/asm/gic-v3.h
-+++ b/arch/aarch32/include/asm/gic-v3.h
-@@ -9,6 +9,8 @@
- #ifndef __ASM_AARCH32_GICV3_H
- #define __ASM_AARCH32_GICV3_H
- 
-+#define ICC_CTLR_RESET (0UL)
-+
- static inline void gic_write_icc_sre(uint32_t val)
- {
- 	asm volatile ("mcr p15, 6, %0, c12, c12, 5" : : "r" (val));
-@@ -19,4 +21,9 @@ static inline void gic_write_icc_ctlr(uint32_t val)
- 	asm volatile ("mcr p15, 6, %0, c12, c12, 4" : : "r" (val));
- }
- 
-+static inline void gic_init_icc_ctlr()
-+{
-+	gic_write_icc_ctlr(ICC_CTLR_RESET);
-+}
-+
- #endif
-diff --git a/arch/aarch64/include/asm/gic-v3.h b/arch/aarch64/include/asm/gic-v3.h
-index 5b32380..090ab0b 100644
---- a/arch/aarch64/include/asm/gic-v3.h
-+++ b/arch/aarch64/include/asm/gic-v3.h
-@@ -15,14 +15,31 @@
- #define ICC_CTLR_EL3	"S3_6_C12_C12_4"
- #define ICC_PMR_EL1	"S3_0_C4_C6_0"
- 
-+#define ICC_CTLR_EL3_RESET     (0UL)
-+#define ICC_CTLR_EL1_RESET     (0UL)
-+
-+static inline uint32_t current_el(void)
-+{
-+	uint32_t val;
-+
-+	asm volatile ("mrs %0, CurrentEL" : "=r" (val));
-+	return val;
-+}
-+
- static inline void gic_write_icc_sre(uint32_t val)
- {
--	asm volatile ("msr " ICC_SRE_EL3 ", %0" : : "r" (val));
-+	if (current_el() == CURRENTEL_EL3)
-+		asm volatile ("msr " ICC_SRE_EL3 ", %0" : : "r" (val));
-+	else
-+		asm volatile ("msr " ICC_SRE_EL2 ", %0" : : "r" (val));
- }
- 
--static inline void gic_write_icc_ctlr(uint32_t val)
-+static inline void gic_init_icc_ctlr()
- {
--	asm volatile ("msr " ICC_CTLR_EL3 ", %0" : : "r" (val));
-+	if (current_el() == CURRENTEL_EL3)
-+		asm volatile ("msr " ICC_CTLR_EL3 ", %0" : : "r" (ICC_CTLR_EL3_RESET));
-+	else
-+		asm volatile ("msr " ICC_CTLR_EL1 ", %0" : : "r" (ICC_CTLR_EL1_RESET));
- }
- 
- #endif
-diff --git a/common/gic-v3.c b/common/gic-v3.c
-index 6207007..a0fe564 100644
---- a/common/gic-v3.c
-+++ b/common/gic-v3.c
-@@ -117,6 +117,6 @@ void gic_secure_init(void)
- 	gic_write_icc_sre(ICC_SRE_Enable | ICC_SRE_DIB | ICC_SRE_DFB | ICC_SRE_SRE);
- 	isb();
- 
--	gic_write_icc_ctlr(0);
-+	gic_init_icc_ctlr();
- 	isb();
- }
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0005-aarch64-Prepare-for-booting-with-EL2.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0005-aarch64-Prepare-for-booting-with-EL2.patch
deleted file mode 100644
index c634345..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0005-aarch64-Prepare-for-booting-with-EL2.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From ba955efb35ce1d41b562190d7c2fbcbcf8ef97ff Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] aarch64: Prepare for booting with EL2
-
-Prepare for allowing boot-wrapper to be entered in EL2.
-Detect current EL and set the corresponding EL registers.
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Reviewed-by: Andre Przywara <andre.przywara@arm.com>
----
- arch/aarch64/boot.S  |  8 ++++++++
- arch/aarch64/utils.S | 10 +++++++++-
- 2 files changed, 17 insertions(+), 1 deletion(-)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index 243198d..3593ca5 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -216,10 +216,18 @@ ASM_FUNC(jump_kernel)
- 	 */
- 	bfi	x4, x19, #5, #1
- 
-+	mrs	x5, CurrentEL
-+	cmp	x5, #CURRENTEL_EL2
-+	b.eq	1f
-+
- 	msr	elr_el3, x19
- 	msr	spsr_el3, x4
- 	eret
- 
-+1:	msr	elr_el2, x19
-+	msr	spsr_el2, x4
-+	eret
-+
- 	.ltorg
- 
- 	.data
-diff --git a/arch/aarch64/utils.S b/arch/aarch64/utils.S
-index 85c7f8a..f02a249 100644
---- a/arch/aarch64/utils.S
-+++ b/arch/aarch64/utils.S
-@@ -34,10 +34,18 @@ ASM_FUNC(find_logical_id)
- 	ret
- 
- /*
-- * Setup EL3 vectors
-+ * Setup EL3/EL2 vectors
-  * x0: vector address
-  */
- ASM_FUNC(setup_vector)
-+	mrs	x1, CurrentEL
-+	cmp	x1, #CURRENTEL_EL2
-+	b.eq    1f
-+
- 	msr	VBAR_EL3, x0
- 	isb
- 	ret
-+
-+1:	msr	VBAR_EL2, x0
-+	isb
-+	ret
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0006-aarch64-Introduce-EL2-boot-code-for-Armv8-R-AArch64.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0006-aarch64-Introduce-EL2-boot-code-for-Armv8-R-AArch64.patch
deleted file mode 100644
index 18dc7ed..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0006-aarch64-Introduce-EL2-boot-code-for-Armv8-R-AArch64.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 8e44fac113d935affed1550480631f3fe7f30584 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 May 2021 07:25:00 +0100
-Subject: [PATCH] aarch64: Introduce EL2 boot code for Armv8-R AArch64
-
-The Armv8-R AArch64 profile does not support the EL3 exception level.
-The Armv8-R AArch64 profile allows for an (optional) VMSAv8-64 MMU
-at EL1, which allows to run off-the-shelf Linux. However EL2 only
-supports a PMSA, which is not supported by Linux, so we need to drop
-into EL1 before entering the kernel.
-
-We add a new err_invalid_arch symbol as a dead loop. If we detect the
-current Armv8-R aarch64 only supports with PMSA, meaning we cannot boot
-Linux anymore, then we jump to err_invalid_arch.
-
-During Armv8-R aarch64 init, to make sure nothing unexpected traps into
-EL2, we auto-detect and config FIEN and EnSCXT in HCR_EL2.
-
-The boot sequence is:
-If CurrentEL == EL3, then goto EL3 initialisation and drop to lower EL
-  before entering the kernel.
-If CurrentEL == EL2 && id_aa64mmfr0_el1.MSA == 0xf (Armv8-R aarch64),
-  if id_aa64mmfr0_el1.MSA_frac == 0x2,
-    then goto Armv8-R AArch64 initialisation and drop to EL1 before
-    entering the kernel.
-  else, which means VMSA unsupported and cannot boot Linux,
-    goto err_invalid_arch (dead loop).
-Else, no initialisation and keep the current EL before entering the
-  kernel.
-
-Upstream-Status: Pending
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
----
- arch/aarch64/boot.S            | 92 +++++++++++++++++++++++++++++++++-
- arch/aarch64/include/asm/cpu.h |  2 +
- 2 files changed, 92 insertions(+), 2 deletions(-)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index 3593ca5..a219ea7 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -37,16 +37,24 @@ ASM_FUNC(_start)
- 	 * Boot sequence
- 	 * If CurrentEL == EL3, then goto EL3 initialisation and drop to
- 	 *   lower EL before entering the kernel.
-+	 * If CurrentEL == EL2 && id_aa64mmfr0_el1.MSA == 0xf, then
-+	 *   If id_aa64mmfr0_el1.MSA_frac == 0x2, then goto
-+	 *     Armv8-R AArch64 initialisation and drop to EL1 before
-+	 *     entering the kernel.
-+	 *   Else, which means VMSA unsupported and cannot boot Linux,
-+	 *     goto err_invalid_arch (dead loop).
- 	 * Else, no initialisation and keep the current EL before
- 	 *   entering the kernel.
- 	 */
- 	mrs	x0, CurrentEL
--	cmp	x0, #CURRENTEL_EL3
--	b.eq	el3_init
-+	cmp	x0, #CURRENTEL_EL2
-+	bgt	el3_init
-+	beq	el2_init
- 
- 	/*
- 	 * We stay in the current EL for entering the kernel
- 	 */
-+keep_el:
- 	mov	w0, #1
- 	ldr	x1, =flag_keep_el
- 	str	w0, [x1]
-@@ -160,6 +168,85 @@ el3_init:
- 	str	w0, [x1]
- 	b	el_max_init
- 
-+	/*
-+	 * EL2 Armv8-R AArch64 initialisation
-+	 */
-+el2_init:
-+	/* Detect Armv8-R AArch64 */
-+	mrs	x1, id_aa64mmfr0_el1
-+	/*
-+	 * Check MSA, bits [51:48]:
-+	 * 0xf means Armv8-R AArch64.
-+	 * If not 0xf, proceed in Armv8-A EL2.
-+	 */
-+	ubfx	x0, x1, #48, #4			// MSA
-+	cmp	x0, 0xf
-+	bne	keep_el
-+	/*
-+	 * Check MSA_frac, bits [55:52]:
-+	 * 0x2 means EL1&0 translation regime also supports VMSAv8-64.
-+	 */
-+	ubfx	x0, x1, #52, #4			// MSA_frac
-+	cmp	x0, 0x2
-+	/*
-+	 * If not 0x2, no VMSA, so cannot boot Linux and dead loop.
-+	 * Also, since the architecture guarantees that those CPUID
-+	 * fields never lose features when the value in a field
-+	 * increases, we use blt to cover it.
-+	*/
-+	blt	err_invalid_arch
-+
-+	mrs	x0, midr_el1
-+	msr	vpidr_el2, x0
-+
-+	mrs	x0, mpidr_el1
-+	msr	vmpidr_el2, x0
-+
-+	mov	x0, #(1 << 31)			// VTCR_MSA: VMSAv8-64 support
-+	msr	vtcr_el2, x0
-+
-+	/* Init HCR_EL2 */
-+	mov	x0, #(1 << 31)			// RES1: Armv8-R aarch64 only
-+
-+	mrs	x1, id_aa64pfr0_el1
-+	ubfx	x2, x1, #56, 4			// ID_AA64PFR0_EL1.CSV2
-+	cmp	x2, 0x2
-+	b.lt	1f
-+	/*
-+	 * Disable trap when accessing SCTXNUM_EL0 or SCTXNUM_EL1
-+	 * if FEAT_CSV2.
-+	 */
-+	orr	x0, x0, #(1 << 53)		// HCR_EL2.EnSCXT
-+
-+1:	ubfx	x2, x1, #28, 4			// ID_AA64PFR0_EL1.RAS
-+	cmp	x2, 0x2
-+	b.lt	1f
-+	/* Disable trap when accessing ERXPFGCDN_EL1 if FEAT_RASv1p1. */
-+	orr	x0, x0, #(1 << 47)		// HCR_EL2.FIEN
-+
-+	/* Enable pointer authentication if present */
-+1:	mrs	x1, id_aa64isar1_el1
-+	/*
-+	 * If ID_AA64ISAR1_EL1.{GPI, GPA, API, APA} == {0000, 0000, 0000, 0000}
-+	 *   then HCR_EL2.APK and HCR_EL2.API are RES 0.
-+	 * Else
-+	 *   set HCR_EL2.APK and HCR_EL2.API.
-+	 */
-+	ldr	x2, =(((0xff) << 24) | (0xff << 4))
-+	and	x1, x1, x2
-+	cbz	x1, 1f
-+
-+	orr	x0, x0, #(1 << 40)		// HCR_EL2.APK
-+	orr	x0, x0, #(1 << 41)		// HCR_EL2.API
-+
-+1:	msr	hcr_el2, x0
-+	isb
-+
-+	mov	w0, #SPSR_KERNEL_EL1
-+	ldr	x1, =spsr_to_elx
-+	str	w0, [x1]
-+	// fall through
-+
- el_max_init:
- 	ldr	x0, =COUNTER_FREQ
- 	msr	cntfrq_el0, x0
-@@ -169,6 +256,7 @@ el_max_init:
- 	b	start_el_max
- 
- err_invalid_id:
-+err_invalid_arch:
- 	b	.
- 
- 	/*
-diff --git a/arch/aarch64/include/asm/cpu.h b/arch/aarch64/include/asm/cpu.h
-index 3767da3..3c0e00d 100644
---- a/arch/aarch64/include/asm/cpu.h
-+++ b/arch/aarch64/include/asm/cpu.h
-@@ -25,6 +25,7 @@
- #define SPSR_I			(1 << 7)	/* IRQ masked */
- #define SPSR_F			(1 << 6)	/* FIQ masked */
- #define SPSR_T			(1 << 5)	/* Thumb */
-+#define SPSR_EL1H		(5 << 0)	/* EL1 Handler mode */
- #define SPSR_EL2H		(9 << 0)	/* EL2 Handler mode */
- #define SPSR_HYP		(0x1a << 0)	/* M[3:0] = hyp, M[4] = AArch32 */
- 
-@@ -50,6 +51,7 @@
- #else
- #define SCTLR_EL1_KERNEL	SCTLR_EL1_RES1
- #define SPSR_KERNEL		(SPSR_A | SPSR_D | SPSR_I | SPSR_F | SPSR_EL2H)
-+#define SPSR_KERNEL_EL1		(SPSR_A | SPSR_D | SPSR_I | SPSR_F | SPSR_EL1H)
- #endif
- 
- #ifndef __ASSEMBLY__
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0007-Allow-enable-psci-to-choose-between-smc-and-hvc.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0007-Allow-enable-psci-to-choose-between-smc-and-hvc.patch
deleted file mode 100644
index 131e271..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0007-Allow-enable-psci-to-choose-between-smc-and-hvc.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 0b9a966b8a28961b078215ee7169e32a976d5e7d Mon Sep 17 00:00:00 2001
-From: Qi Feng <qi.feng@arm.com>
-Date: Wed, 26 May 2021 17:52:01 +0800
-Subject: [PATCH] Allow --enable-psci to choose between smc and hvc
-
-According to Armv8-R AArch64 manual [1], Armv8-R AArch64 does not
-support smc:
-
-- Pseudocode for AArch64.CheckForSMCUndefOrTrap has this snippet:
-
-      if !HaveEL(EL3) || PSTATE.EL == EL0 then
-          UNDEFINED;
-
-  And Armv8-R AArch64 does not have EL3.
-
-- In the document of HCR_EL2 TSC bit:
-  If EL3 is not implemented and HCR_EL2.NV is 0, it is IMPLEMENTATION
-  DEFINED whether this bit is:
-  - RES0.
-  - Implemented with the functionality as described in HCR_EL2.TSC.
-
-So hvc is needed in this situation. And due to the lack of libfdt, the
-psci method cannot be modified at runtime.
-
-To use smc, use --enable-psci or --enable-psci=smc.
-To use hvc, use --enable-psci=hvc.
-
-[1]: https://developer.arm.com/documentation/ddi0600/latest/
-
-Issue-Id: SCM-2654
-Upstream-Status: Pending
-Signed-off-by: Qi Feng <qi.feng@arm.com>
-Change-Id: Ib8afabdad2d98bc37371d165bbb6f1f9b88bfc87
-
-Upstream-Status: Pending
-Signed-off-by: Huifeng Zhang <Huifeng.Zhang@arm.com>
----
- Makefile.am  | 10 +++++-----
- configure.ac | 14 +++++++++-----
- 2 files changed, 14 insertions(+), 10 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 5731a19..fc66662 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -50,11 +50,11 @@ endif
- if PSCI
- ARCH_OBJ	+= psci.o
- COMMON_OBJ	+= psci.o
--PSCI_NODE	:= psci {				\
--			compatible = \"arm,psci\";	\
--			method = \"smc\";		\
--			cpu_on = <$(PSCI_CPU_ON)>;	\
--			cpu_off = <$(PSCI_CPU_OFF)>;	\
-+PSCI_NODE	:= psci {						\
-+			compatible = \"arm,psci\";			\
-+			method = \"$(PSCI_METHOD)\";			\
-+			cpu_on = <$(PSCI_CPU_ON)>;			\
-+			cpu_off = <$(PSCI_CPU_OFF)>;			\
- 		   };
- CPU_NODES	:= $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/addpsci.pl $(KERNEL_DTB))
- else
-diff --git a/configure.ac b/configure.ac
-index 9e3b722..53e51be 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -83,13 +83,17 @@ AS_IF([test "x$X_IMAGE" != "x"],
- # Allow a user to pass --enable-psci
- AC_ARG_ENABLE([psci],
- 	AS_HELP_STRING([--disable-psci], [disable the psci boot method]),
--	[USE_PSCI=$enableval], [USE_PSCI="yes"])
--AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes"])
--AS_IF([test "x$USE_PSCI" = "xyes"], [], [USE_PSCI=no])
--
--AS_IF([test "x$USE_PSCI" != "xyes" -a "x$KERNEL_ES" = "x32"],
-+	[case "${enableval}" in
-+		yes|smc) USE_PSCI=smc ;;
-+		hvc) USE_PSCI=hvc ;;
-+		*) AC_MSG_ERROR([Bad value "${enableval}" for --enable-psci. Use "smc" or "hvc"]) ;;
-+	esac], [USE_PSCI="yes"])
-+AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes" -o "x$USE_PSCI" = "xsmc" -o "x$USE_PSCI" = "xhvc"])
-+
-+AS_IF([test "x$USE_PSCI" = "xno" -a "x$KERNEL_ES" = "x32"],
- 	[AC_MSG_ERROR([With an AArch32 kernel, boot method must be PSCI.])]
- )
-+AC_SUBST([PSCI_METHOD], [$USE_PSCI])
- 
- # Allow a user to pass --with-initrd
- AC_ARG_WITH([initrd],
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0008-aarch64-Disable-CNTPCT_EL0-trap-for-v8-R64.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0008-aarch64-Disable-CNTPCT_EL0-trap-for-v8-R64.patch
deleted file mode 100644
index d3ccb2e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0008-aarch64-Disable-CNTPCT_EL0-trap-for-v8-R64.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 521c121eccb386aca7c75d92528e495546adccec Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Mon, 25 Oct 2021 17:09:13 +0800
-Subject: [PATCH] aarch64: Disable CNTPCT_EL0 trap for v8-R64
-
-To allow EL1 to access CNTPCT_EL0 without traping into EL2, we need to
-set CNTHCTL_EL2.EL1PCTEN to 1.
-
-For v8-R64, the CNTHCTL_EL2 register follows the v8-A architecture.
-However, as described in the v8-A architecture profile, the
-CNTHCTL_EL2's bit assignments are different according to whether the
-FEAT_VHE is implemented.
-
-Since v8-R64 does not support FEAT_VHE, we do not need to detect
-FEAT_VHE. We can simply set CNTHCTL_EL2.EL1PCTEN to 1.
-
-Issue-ID: SCM-3508
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I4147e66341c8153312021e6f2ab67d0037246da1
----
- arch/aarch64/boot.S | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index a219ea7..27b1139 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -240,6 +240,18 @@ el2_init:
- 	orr	x0, x0, #(1 << 41)		// HCR_EL2.API
- 
- 1:	msr	hcr_el2, x0
-+
-+	/*
-+	 * To disable trap when accessing CNTPCT_EL0, we need to set
-+	 * CNTHCTL_EL2.EL1PCTEN to 1. However, the CNTHCTL_EL2 bit assignments
-+	 * are different according to whether the FEAT_VHE is implemented.
-+	 *
-+	 * For Armv8-R AArch64, FEAT_VHE is not supported, so we do not need to
-+	 * detect FEAT_VHE(ID_AA64MMFR1_EL1.VH) and simply set
-+	 * CNTHCTL_EL2.EL1PCTEN to 1.
-+	 */
-+	mov	x0, #1				// CNTHCTL_EL2.EL1PCTEN
-+	msr	cnthctl_el2, x0
- 	isb
- 
- 	mov	w0, #SPSR_KERNEL_EL1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0009-lds-Mark-the-mem-range.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0009-lds-Mark-the-mem-range.patch
deleted file mode 100644
index c34d01c..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0009-lds-Mark-the-mem-range.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 780df234d98db81485b1f351f902a68def35c9d4 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 2 Nov 2021 15:10:28 +0800
-Subject: [PATCH] lds: Mark the mem range
-
-Add firmware_start and firmware_end, so that we can use them to
-calculate the mem range of boot-wrapper and then set the range to
-/memreserve/ of dtb.
-
-Issue-ID: SCM-3815
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: Idc5a2894e193c75381049a0f359b4b2a51c567ee
----
- model.lds.S | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/model.lds.S b/model.lds.S
-index d4e7e13..ab98ddf 100644
---- a/model.lds.S
-+++ b/model.lds.S
-@@ -64,6 +64,7 @@ SECTIONS
- #endif
- 
- 	.boot PHYS_OFFSET: {
-+		PROVIDE(firmware_start = .);
- 		*(.init)
- 		*(.text*)
- 		*(.data* .rodata* .bss* COMMON)
-@@ -76,6 +77,7 @@ SECTIONS
- 		mbox = .;
- 		QUAD(0x0)
- 	}
-+	PROVIDE(firmware_end = .);
- 
- 	ASSERT(etext <= (PHYS_OFFSET + TEXT_LIMIT), ".text overflow!")
- }
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0010-common-Introduce-the-libfdt.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0010-common-Introduce-the-libfdt.patch
deleted file mode 100644
index 2d12db5..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0010-common-Introduce-the-libfdt.patch
+++ /dev/null
@@ -1,6044 +0,0 @@
-From b3762b6c5a56bf594bc5cb63d145e8efd86e106e Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 28 Dec 2021 17:02:17 +0800
-Subject: [PATCH] common: Introduce the libfdt
-
-We introduce libfdt (v1.6.1) [1] to boot-wrapper, so we can dynamically
-add the firmware node.
-
-According to [2]: The libfdt is GPL/BSD dual-licensed which means it can
-be used either under the terms of GPL, or under the terms of BSD.
-We choose BSD because the boot-wrapper is under BSD.
-
-[1]: https://github.com/dgibson/dtc/tree/v1.6.1/libfdt
-[2]: https://github.com/dgibson/dtc/blob/v1.6.1/README.license
-
-Issue-Id: SCM-3814
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: Iec2f469053c8ac0ed38838c597b21a42bdf67b38
----
- common/libfdt/README.license    |   56 +
- common/libfdt/fdt.c             |  335 +++++
- common/libfdt/fdt_addresses.c   |  101 ++
- common/libfdt/fdt_check.c       |   93 ++
- common/libfdt/fdt_empty_tree.c  |   38 +
- common/libfdt/fdt_overlay.c     |  882 +++++++++++++
- common/libfdt/fdt_ro.c          |  859 +++++++++++++
- common/libfdt/fdt_rw.c          |  500 +++++++
- common/libfdt/fdt_strerror.c    |   59 +
- common/libfdt/fdt_sw.c          |  384 ++++++
- common/libfdt/fdt_wip.c         |   94 ++
- common/libfdt/libfdt_internal.h |  192 +++
- include/fdt.h                   |   66 +
- include/libfdt.h                | 2147 +++++++++++++++++++++++++++++++
- include/libfdt_env.h            |   95 ++
- 15 files changed, 5901 insertions(+)
- create mode 100644 common/libfdt/README.license
- create mode 100644 common/libfdt/fdt.c
- create mode 100644 common/libfdt/fdt_addresses.c
- create mode 100644 common/libfdt/fdt_check.c
- create mode 100644 common/libfdt/fdt_empty_tree.c
- create mode 100644 common/libfdt/fdt_overlay.c
- create mode 100644 common/libfdt/fdt_ro.c
- create mode 100644 common/libfdt/fdt_rw.c
- create mode 100644 common/libfdt/fdt_strerror.c
- create mode 100644 common/libfdt/fdt_sw.c
- create mode 100644 common/libfdt/fdt_wip.c
- create mode 100644 common/libfdt/libfdt_internal.h
- create mode 100644 include/fdt.h
- create mode 100644 include/libfdt.h
- create mode 100644 include/libfdt_env.h
-
-diff --git a/common/libfdt/README.license b/common/libfdt/README.license
-new file mode 100644
-index 0000000..102b004
---- /dev/null
-+++ b/common/libfdt/README.license
-@@ -0,0 +1,56 @@
-+Licensing and contribution policy of dtc and libfdt
-+===================================================
-+
-+This dtc package contains two pieces of software: dtc itself, and
-+libfdt which comprises the files in the libfdt/ subdirectory.  These
-+two pieces of software, although closely related, are quite distinct.
-+dtc does not incorporate or rely on libfdt for its operation, nor vice
-+versa.  It is important that these two pieces of software have
-+different license conditions.
-+
-+As SPDX license tags in each source file attest, dtc is licensed
-+under the GNU GPL.  The full text of the GPL can be found in the file
-+entitled 'GPL' which should be included in this package.  dtc code,
-+therefore, may not be incorporated into works which do not have a GPL
-+compatible license.
-+
-+libfdt, however, is GPL/BSD dual-licensed.  That is, it may be used
-+either under the terms of the GPL, or under the terms of the 2-clause
-+BSD license (aka the ISC license).  The full terms of that license can
-+be found are in the file entitled 'BSD-2-Clause'. This is, in
-+practice, equivalent to being BSD licensed, since the terms of the BSD
-+license are strictly more permissive than the GPL.
-+
-+I made the decision to license libfdt in this way because I want to
-+encourage widespread and correct usage of flattened device trees,
-+including by proprietary or otherwise GPL-incompatible firmware or
-+tools.  Allowing libfdt to be used under the terms of the BSD license
-+makes that it easier for vendors or authors of such software to do so.
-+
-+This does mean that libfdt code could be "stolen" - say, included in a
-+proprietary fimware and extended without contributing those extensions
-+back to the libfdt mainline.  While I hope that doesn't happen, I
-+believe the goal of allowing libfdt to be widely used is more
-+important than avoiding that.  libfdt is quite small, and hardly
-+rocket science; so the incentive for such impolite behaviour is small,
-+and the inconvenience caused thereby is not dire.
-+
-+Licenses such as the LGPL which would allow code to be used in non-GPL
-+software, but also require contributions to be returned were
-+considered.  However, libfdt is designed to be used in firmwares and
-+other environments with unusual technical constraints.  It's difficult
-+to anticipate all possible changes which might be needed to meld
-+libfdt into such environments and so difficult to suitably word a
-+license that puts the boundary between what is and isn't permitted in
-+the intended place.  Again, I judged encouraging widespread use of
-+libfdt by keeping the license terms simple and familiar to be the more
-+important goal.
-+
-+**IMPORTANT** It's intended that all of libfdt as released remain
-+permissively licensed this way.  Therefore only contributions which
-+are released under these terms can be merged into the libfdt mainline.
-+
-+
-+David Gibson <david@gibson.dropbear.id.au>
-+(principal original author of dtc and libfdt)
-+2 November 2007
-diff --git a/common/libfdt/fdt.c b/common/libfdt/fdt.c
-new file mode 100644
-index 0000000..9fe7cf4
---- /dev/null
-+++ b/common/libfdt/fdt.c
-@@ -0,0 +1,335 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+/*
-+ * Minimal sanity check for a read-only tree. fdt_ro_probe_() checks
-+ * that the given buffer contains what appears to be a flattened
-+ * device tree with sane information in its header.
-+ */
-+int32_t fdt_ro_probe_(const void *fdt)
-+{
-+	uint32_t totalsize = fdt_totalsize(fdt);
-+
-+	if (can_assume(VALID_DTB))
-+		return totalsize;
-+
-+	/* The device tree must be at an 8-byte aligned address */
-+	if ((uintptr_t)fdt & 7)
-+		return -FDT_ERR_ALIGNMENT;
-+
-+	if (fdt_magic(fdt) == FDT_MAGIC) {
-+		/* Complete tree */
-+		if (!can_assume(LATEST)) {
-+			if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
-+				return -FDT_ERR_BADVERSION;
-+			if (fdt_last_comp_version(fdt) >
-+					FDT_LAST_SUPPORTED_VERSION)
-+				return -FDT_ERR_BADVERSION;
-+		}
-+	} else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
-+		/* Unfinished sequential-write blob */
-+		if (!can_assume(VALID_INPUT) && fdt_size_dt_struct(fdt) == 0)
-+			return -FDT_ERR_BADSTATE;
-+	} else {
-+		return -FDT_ERR_BADMAGIC;
-+	}
-+
-+	if (totalsize < INT32_MAX)
-+		return totalsize;
-+	else
-+		return -FDT_ERR_TRUNCATED;
-+}
-+
-+static int check_off_(uint32_t hdrsize, uint32_t totalsize, uint32_t off)
-+{
-+	return (off >= hdrsize) && (off <= totalsize);
-+}
-+
-+static int check_block_(uint32_t hdrsize, uint32_t totalsize,
-+			uint32_t base, uint32_t size)
-+{
-+	if (!check_off_(hdrsize, totalsize, base))
-+		return 0; /* block start out of bounds */
-+	if ((base + size) < base)
-+		return 0; /* overflow */
-+	if (!check_off_(hdrsize, totalsize, base + size))
-+		return 0; /* block end out of bounds */
-+	return 1;
-+}
-+
-+size_t fdt_header_size_(uint32_t version)
-+{
-+	if (version <= 1)
-+		return FDT_V1_SIZE;
-+	else if (version <= 2)
-+		return FDT_V2_SIZE;
-+	else if (version <= 3)
-+		return FDT_V3_SIZE;
-+	else if (version <= 16)
-+		return FDT_V16_SIZE;
-+	else
-+		return FDT_V17_SIZE;
-+}
-+
-+size_t fdt_header_size(const void *fdt)
-+{
-+	return can_assume(LATEST) ? FDT_V17_SIZE :
-+		fdt_header_size_(fdt_version(fdt));
-+}
-+
-+int fdt_check_header(const void *fdt)
-+{
-+	size_t hdrsize;
-+
-+	/* The device tree must be at an 8-byte aligned address */
-+	if ((uintptr_t)fdt & 7)
-+		return -FDT_ERR_ALIGNMENT;
-+
-+	if (fdt_magic(fdt) != FDT_MAGIC)
-+		return -FDT_ERR_BADMAGIC;
-+	if (!can_assume(LATEST)) {
-+		if ((fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
-+		    || (fdt_last_comp_version(fdt) >
-+			FDT_LAST_SUPPORTED_VERSION))
-+			return -FDT_ERR_BADVERSION;
-+		if (fdt_version(fdt) < fdt_last_comp_version(fdt))
-+			return -FDT_ERR_BADVERSION;
-+	}
-+	hdrsize = fdt_header_size(fdt);
-+	if (!can_assume(VALID_DTB)) {
-+
-+		if ((fdt_totalsize(fdt) < hdrsize)
-+		    || (fdt_totalsize(fdt) > INT_MAX))
-+			return -FDT_ERR_TRUNCATED;
-+
-+		/* Bounds check memrsv block */
-+		if (!check_off_(hdrsize, fdt_totalsize(fdt),
-+				fdt_off_mem_rsvmap(fdt)))
-+			return -FDT_ERR_TRUNCATED;
-+	}
-+
-+	if (!can_assume(VALID_DTB)) {
-+		/* Bounds check structure block */
-+		if (!can_assume(LATEST) && fdt_version(fdt) < 17) {
-+			if (!check_off_(hdrsize, fdt_totalsize(fdt),
-+					fdt_off_dt_struct(fdt)))
-+				return -FDT_ERR_TRUNCATED;
-+		} else {
-+			if (!check_block_(hdrsize, fdt_totalsize(fdt),
-+					  fdt_off_dt_struct(fdt),
-+					  fdt_size_dt_struct(fdt)))
-+				return -FDT_ERR_TRUNCATED;
-+		}
-+
-+		/* Bounds check strings block */
-+		if (!check_block_(hdrsize, fdt_totalsize(fdt),
-+				  fdt_off_dt_strings(fdt),
-+				  fdt_size_dt_strings(fdt)))
-+			return -FDT_ERR_TRUNCATED;
-+	}
-+
-+	return 0;
-+}
-+
-+const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)
-+{
-+	unsigned int uoffset = offset;
-+	unsigned int absoffset = offset + fdt_off_dt_struct(fdt);
-+
-+	if (offset < 0)
-+		return NULL;
-+
-+	if (!can_assume(VALID_INPUT))
-+		if ((absoffset < uoffset)
-+		    || ((absoffset + len) < absoffset)
-+		    || (absoffset + len) > fdt_totalsize(fdt))
-+			return NULL;
-+
-+	if (can_assume(LATEST) || fdt_version(fdt) >= 0x11)
-+		if (((uoffset + len) < uoffset)
-+		    || ((offset + len) > fdt_size_dt_struct(fdt)))
-+			return NULL;
-+
-+	return fdt_offset_ptr_(fdt, offset);
-+}
-+
-+uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)
-+{
-+	const fdt32_t *tagp, *lenp;
-+	uint32_t tag;
-+	int offset = startoffset;
-+	const char *p;
-+
-+	*nextoffset = -FDT_ERR_TRUNCATED;
-+	tagp = fdt_offset_ptr(fdt, offset, FDT_TAGSIZE);
-+	if (!can_assume(VALID_DTB) && !tagp)
-+		return FDT_END; /* premature end */
-+	tag = fdt32_to_cpu(*tagp);
-+	offset += FDT_TAGSIZE;
-+
-+	*nextoffset = -FDT_ERR_BADSTRUCTURE;
-+	switch (tag) {
-+	case FDT_BEGIN_NODE:
-+		/* skip name */
-+		do {
-+			p = fdt_offset_ptr(fdt, offset++, 1);
-+		} while (p && (*p != '\0'));
-+		if (!can_assume(VALID_DTB) && !p)
-+			return FDT_END; /* premature end */
-+		break;
-+
-+	case FDT_PROP:
-+		lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));
-+		if (!can_assume(VALID_DTB) && !lenp)
-+			return FDT_END; /* premature end */
-+		/* skip-name offset, length and value */
-+		offset += sizeof(struct fdt_property) - FDT_TAGSIZE
-+			+ fdt32_to_cpu(*lenp);
-+		if (!can_assume(LATEST) &&
-+		    fdt_version(fdt) < 0x10 && fdt32_to_cpu(*lenp) >= 8 &&
-+		    ((offset - fdt32_to_cpu(*lenp)) % 8) != 0)
-+			offset += 4;
-+		break;
-+
-+	case FDT_END:
-+	case FDT_END_NODE:
-+	case FDT_NOP:
-+		break;
-+
-+	default:
-+		return FDT_END;
-+	}
-+
-+	if (!fdt_offset_ptr(fdt, startoffset, offset - startoffset))
-+		return FDT_END; /* premature end */
-+
-+	*nextoffset = FDT_TAGALIGN(offset);
-+	return tag;
-+}
-+
-+int fdt_check_node_offset_(const void *fdt, int offset)
-+{
-+	if (!can_assume(VALID_INPUT)
-+	    && ((offset < 0) || (offset % FDT_TAGSIZE)))
-+		return -FDT_ERR_BADOFFSET;
-+
-+	if (fdt_next_tag(fdt, offset, &offset) != FDT_BEGIN_NODE)
-+		return -FDT_ERR_BADOFFSET;
-+
-+	return offset;
-+}
-+
-+int fdt_check_prop_offset_(const void *fdt, int offset)
-+{
-+	if (!can_assume(VALID_INPUT)
-+	    && ((offset < 0) || (offset % FDT_TAGSIZE)))
-+		return -FDT_ERR_BADOFFSET;
-+
-+	if (fdt_next_tag(fdt, offset, &offset) != FDT_PROP)
-+		return -FDT_ERR_BADOFFSET;
-+
-+	return offset;
-+}
-+
-+int fdt_next_node(const void *fdt, int offset, int *depth)
-+{
-+	int nextoffset = 0;
-+	uint32_t tag;
-+
-+	if (offset >= 0)
-+		if ((nextoffset = fdt_check_node_offset_(fdt, offset)) < 0)
-+			return nextoffset;
-+
-+	do {
-+		offset = nextoffset;
-+		tag = fdt_next_tag(fdt, offset, &nextoffset);
-+
-+		switch (tag) {
-+		case FDT_PROP:
-+		case FDT_NOP:
-+			break;
-+
-+		case FDT_BEGIN_NODE:
-+			if (depth)
-+				(*depth)++;
-+			break;
-+
-+		case FDT_END_NODE:
-+			if (depth && ((--(*depth)) < 0))
-+				return nextoffset;
-+			break;
-+
-+		case FDT_END:
-+			if ((nextoffset >= 0)
-+			    || ((nextoffset == -FDT_ERR_TRUNCATED) && !depth))
-+				return -FDT_ERR_NOTFOUND;
-+			else
-+				return nextoffset;
-+		}
-+	} while (tag != FDT_BEGIN_NODE);
-+
-+	return offset;
-+}
-+
-+int fdt_first_subnode(const void *fdt, int offset)
-+{
-+	int depth = 0;
-+
-+	offset = fdt_next_node(fdt, offset, &depth);
-+	if (offset < 0 || depth != 1)
-+		return -FDT_ERR_NOTFOUND;
-+
-+	return offset;
-+}
-+
-+int fdt_next_subnode(const void *fdt, int offset)
-+{
-+	int depth = 1;
-+
-+	/*
-+	 * With respect to the parent, the depth of the next subnode will be
-+	 * the same as the last.
-+	 */
-+	do {
-+		offset = fdt_next_node(fdt, offset, &depth);
-+		if (offset < 0 || depth < 1)
-+			return -FDT_ERR_NOTFOUND;
-+	} while (depth > 1);
-+
-+	return offset;
-+}
-+
-+const char *fdt_find_string_(const char *strtab, int tabsize, const char *s)
-+{
-+	int len = strlen(s) + 1;
-+	const char *last = strtab + tabsize - len;
-+	const char *p;
-+
-+	for (p = strtab; p <= last; p++)
-+		if (memcmp(p, s, len) == 0)
-+			return p;
-+	return NULL;
-+}
-+
-+int fdt_move(const void *fdt, void *buf, int bufsize)
-+{
-+	if (!can_assume(VALID_INPUT) && bufsize < 0)
-+		return -FDT_ERR_NOSPACE;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	if (fdt_totalsize(fdt) > (unsigned int)bufsize)
-+		return -FDT_ERR_NOSPACE;
-+
-+	memmove(buf, fdt, fdt_totalsize(fdt));
-+	return 0;
-+}
-diff --git a/common/libfdt/fdt_addresses.c b/common/libfdt/fdt_addresses.c
-new file mode 100644
-index 0000000..9a82cd0
---- /dev/null
-+++ b/common/libfdt/fdt_addresses.c
-@@ -0,0 +1,101 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
-+ * Copyright (C) 2018 embedded brains GmbH
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+static int fdt_cells(const void *fdt, int nodeoffset, const char *name)
-+{
-+	const fdt32_t *c;
-+	uint32_t val;
-+	int len;
-+
-+	c = fdt_getprop(fdt, nodeoffset, name, &len);
-+	if (!c)
-+		return len;
-+
-+	if (len != sizeof(*c))
-+		return -FDT_ERR_BADNCELLS;
-+
-+	val = fdt32_to_cpu(*c);
-+	if (val > FDT_MAX_NCELLS)
-+		return -FDT_ERR_BADNCELLS;
-+
-+	return (int)val;
-+}
-+
-+int fdt_address_cells(const void *fdt, int nodeoffset)
-+{
-+	int val;
-+
-+	val = fdt_cells(fdt, nodeoffset, "#address-cells");
-+	if (val == 0)
-+		return -FDT_ERR_BADNCELLS;
-+	if (val == -FDT_ERR_NOTFOUND)
-+		return 2;
-+	return val;
-+}
-+
-+int fdt_size_cells(const void *fdt, int nodeoffset)
-+{
-+	int val;
-+
-+	val = fdt_cells(fdt, nodeoffset, "#size-cells");
-+	if (val == -FDT_ERR_NOTFOUND)
-+		return 1;
-+	return val;
-+}
-+
-+/* This function assumes that [address|size]_cells is 1 or 2 */
-+int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,
-+			     const char *name, uint64_t addr, uint64_t size)
-+{
-+	int addr_cells, size_cells, ret;
-+	uint8_t data[sizeof(fdt64_t) * 2], *prop;
-+
-+	ret = fdt_address_cells(fdt, parent);
-+	if (ret < 0)
-+		return ret;
-+	addr_cells = ret;
-+
-+	ret = fdt_size_cells(fdt, parent);
-+	if (ret < 0)
-+		return ret;
-+	size_cells = ret;
-+
-+	/* check validity of address */
-+	prop = data;
-+	if (addr_cells == 1) {
-+		if ((addr > UINT32_MAX) || ((UINT32_MAX + 1 - addr) < size))
-+			return -FDT_ERR_BADVALUE;
-+
-+		fdt32_st(prop, (uint32_t)addr);
-+	} else if (addr_cells == 2) {
-+		fdt64_st(prop, addr);
-+	} else {
-+		return -FDT_ERR_BADNCELLS;
-+	}
-+
-+	/* check validity of size */
-+	prop += addr_cells * sizeof(fdt32_t);
-+	if (size_cells == 1) {
-+		if (size > UINT32_MAX)
-+			return -FDT_ERR_BADVALUE;
-+
-+		fdt32_st(prop, (uint32_t)size);
-+	} else if (size_cells == 2) {
-+		fdt64_st(prop, size);
-+	} else {
-+		return -FDT_ERR_BADNCELLS;
-+	}
-+
-+	return fdt_appendprop(fdt, nodeoffset, name, data,
-+			      (addr_cells + size_cells) * sizeof(fdt32_t));
-+}
-diff --git a/common/libfdt/fdt_check.c b/common/libfdt/fdt_check.c
-new file mode 100644
-index 0000000..fa410a8
---- /dev/null
-+++ b/common/libfdt/fdt_check.c
-@@ -0,0 +1,93 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+int fdt_check_full(const void *fdt, size_t bufsize)
-+{
-+	int err;
-+	int num_memrsv;
-+	int offset, nextoffset = 0;
-+	uint32_t tag;
-+	unsigned int depth = 0;
-+	const void *prop;
-+	const char *propname;
-+	bool expect_end = false;
-+
-+	if (bufsize < FDT_V1_SIZE)
-+		return -FDT_ERR_TRUNCATED;
-+	if (bufsize < fdt_header_size(fdt))
-+		return -FDT_ERR_TRUNCATED;
-+	err = fdt_check_header(fdt);
-+	if (err != 0)
-+		return err;
-+	if (bufsize < fdt_totalsize(fdt))
-+		return -FDT_ERR_TRUNCATED;
-+
-+	num_memrsv = fdt_num_mem_rsv(fdt);
-+	if (num_memrsv < 0)
-+		return num_memrsv;
-+
-+	while (1) {
-+		offset = nextoffset;
-+		tag = fdt_next_tag(fdt, offset, &nextoffset);
-+
-+		if (nextoffset < 0)
-+			return nextoffset;
-+
-+		/* If we see two root nodes, something is wrong */
-+		if (expect_end && tag != FDT_END)
-+			return -FDT_ERR_BADSTRUCTURE;
-+
-+		switch (tag) {
-+		case FDT_NOP:
-+			break;
-+
-+		case FDT_END:
-+			if (depth != 0)
-+				return -FDT_ERR_BADSTRUCTURE;
-+			return 0;
-+
-+		case FDT_BEGIN_NODE:
-+			depth++;
-+			if (depth > INT_MAX)
-+				return -FDT_ERR_BADSTRUCTURE;
-+
-+			/* The root node must have an empty name */
-+			if (depth == 1) {
-+				const char *name;
-+				int len;
-+
-+				name = fdt_get_name(fdt, offset, &len);
-+				if (*name || len)
-+					return -FDT_ERR_BADSTRUCTURE;
-+			}
-+			break;
-+
-+		case FDT_END_NODE:
-+			if (depth == 0)
-+				return -FDT_ERR_BADSTRUCTURE;
-+			depth--;
-+			if (depth == 0)
-+				expect_end = true;
-+			break;
-+
-+		case FDT_PROP:
-+			prop = fdt_getprop_by_offset(fdt, offset, &propname,
-+						     &err);
-+			if (!prop)
-+				return err;
-+			break;
-+
-+		default:
-+			return -FDT_ERR_INTERNAL;
-+		}
-+	}
-+}
-diff --git a/common/libfdt/fdt_empty_tree.c b/common/libfdt/fdt_empty_tree.c
-new file mode 100644
-index 0000000..49d54d4
---- /dev/null
-+++ b/common/libfdt/fdt_empty_tree.c
-@@ -0,0 +1,38 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2012 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+int fdt_create_empty_tree(void *buf, int bufsize)
-+{
-+	int err;
-+
-+	err = fdt_create(buf, bufsize);
-+	if (err)
-+		return err;
-+
-+	err = fdt_finish_reservemap(buf);
-+	if (err)
-+		return err;
-+
-+	err = fdt_begin_node(buf, "");
-+	if (err)
-+		return err;
-+
-+	err =  fdt_end_node(buf);
-+	if (err)
-+		return err;
-+
-+	err = fdt_finish(buf);
-+	if (err)
-+		return err;
-+
-+	return fdt_open_into(buf, buf, bufsize);
-+}
-diff --git a/common/libfdt/fdt_overlay.c b/common/libfdt/fdt_overlay.c
-new file mode 100644
-index 0000000..d217e79
---- /dev/null
-+++ b/common/libfdt/fdt_overlay.c
-@@ -0,0 +1,882 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2016 Free Electrons
-+ * Copyright (C) 2016 NextThing Co.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+/**
-+ * overlay_get_target_phandle - retrieves the target phandle of a fragment
-+ * @fdto: pointer to the device tree overlay blob
-+ * @fragment: node offset of the fragment in the overlay
-+ *
-+ * overlay_get_target_phandle() retrieves the target phandle of an
-+ * overlay fragment when that fragment uses a phandle (target
-+ * property) instead of a path (target-path property).
-+ *
-+ * returns:
-+ *      the phandle pointed by the target property
-+ *      0, if the phandle was not found
-+ *	-1, if the phandle was malformed
-+ */
-+static uint32_t overlay_get_target_phandle(const void *fdto, int fragment)
-+{
-+	const fdt32_t *val;
-+	int len;
-+
-+	val = fdt_getprop(fdto, fragment, "target", &len);
-+	if (!val)
-+		return 0;
-+
-+	if ((len != sizeof(*val)) || (fdt32_to_cpu(*val) == (uint32_t)-1))
-+		return (uint32_t)-1;
-+
-+	return fdt32_to_cpu(*val);
-+}
-+
-+/**
-+ * overlay_get_target - retrieves the offset of a fragment's target
-+ * @fdt: Base device tree blob
-+ * @fdto: Device tree overlay blob
-+ * @fragment: node offset of the fragment in the overlay
-+ * @pathp: pointer which receives the path of the target (or NULL)
-+ *
-+ * overlay_get_target() retrieves the target offset in the base
-+ * device tree of a fragment, no matter how the actual targeting is
-+ * done (through a phandle or a path)
-+ *
-+ * returns:
-+ *      the targeted node offset in the base device tree
-+ *      Negative error code on error
-+ */
-+static int overlay_get_target(const void *fdt, const void *fdto,
-+			      int fragment, char const **pathp)
-+{
-+	uint32_t phandle;
-+	const char *path = NULL;
-+	int path_len = 0, ret;
-+
-+	/* Try first to do a phandle based lookup */
-+	phandle = overlay_get_target_phandle(fdto, fragment);
-+	if (phandle == (uint32_t)-1)
-+		return -FDT_ERR_BADPHANDLE;
-+
-+	/* no phandle, try path */
-+	if (!phandle) {
-+		/* And then a path based lookup */
-+		path = fdt_getprop(fdto, fragment, "target-path", &path_len);
-+		if (path)
-+			ret = fdt_path_offset(fdt, path);
-+		else
-+			ret = path_len;
-+	} else
-+		ret = fdt_node_offset_by_phandle(fdt, phandle);
-+
-+	/*
-+	* If we haven't found either a target or a
-+	* target-path property in a node that contains a
-+	* __overlay__ subnode (we wouldn't be called
-+	* otherwise), consider it a improperly written
-+	* overlay
-+	*/
-+	if (ret < 0 && path_len == -FDT_ERR_NOTFOUND)
-+		ret = -FDT_ERR_BADOVERLAY;
-+
-+	/* return on error */
-+	if (ret < 0)
-+		return ret;
-+
-+	/* return pointer to path (if available) */
-+	if (pathp)
-+		*pathp = path ? path : NULL;
-+
-+	return ret;
-+}
-+
-+/**
-+ * overlay_phandle_add_offset - Increases a phandle by an offset
-+ * @fdt: Base device tree blob
-+ * @node: Device tree overlay blob
-+ * @name: Name of the property to modify (phandle or linux,phandle)
-+ * @delta: offset to apply
-+ *
-+ * overlay_phandle_add_offset() increments a node phandle by a given
-+ * offset.
-+ *
-+ * returns:
-+ *      0 on success.
-+ *      Negative error code on error
-+ */
-+static int overlay_phandle_add_offset(void *fdt, int node,
-+				      const char *name, uint32_t delta)
-+{
-+	const fdt32_t *val;
-+	uint32_t adj_val;
-+	int len;
-+
-+	val = fdt_getprop(fdt, node, name, &len);
-+	if (!val)
-+		return len;
-+
-+	if (len != sizeof(*val))
-+		return -FDT_ERR_BADPHANDLE;
-+
-+	adj_val = fdt32_to_cpu(*val);
-+	if ((adj_val + delta) < adj_val)
-+		return -FDT_ERR_NOPHANDLES;
-+
-+	adj_val += delta;
-+	if (adj_val == (uint32_t)-1)
-+		return -FDT_ERR_NOPHANDLES;
-+
-+	return fdt_setprop_inplace_u32(fdt, node, name, adj_val);
-+}
-+
-+/**
-+ * overlay_adjust_node_phandles - Offsets the phandles of a node
-+ * @fdto: Device tree overlay blob
-+ * @node: Offset of the node we want to adjust
-+ * @delta: Offset to shift the phandles of
-+ *
-+ * overlay_adjust_node_phandles() adds a constant to all the phandles
-+ * of a given node. This is mainly use as part of the overlay
-+ * application process, when we want to update all the overlay
-+ * phandles to not conflict with the overlays of the base device tree.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_adjust_node_phandles(void *fdto, int node,
-+					uint32_t delta)
-+{
-+	int child;
-+	int ret;
-+
-+	ret = overlay_phandle_add_offset(fdto, node, "phandle", delta);
-+	if (ret && ret != -FDT_ERR_NOTFOUND)
-+		return ret;
-+
-+	ret = overlay_phandle_add_offset(fdto, node, "linux,phandle", delta);
-+	if (ret && ret != -FDT_ERR_NOTFOUND)
-+		return ret;
-+
-+	fdt_for_each_subnode(child, fdto, node) {
-+		ret = overlay_adjust_node_phandles(fdto, child, delta);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/**
-+ * overlay_adjust_local_phandles - Adjust the phandles of a whole overlay
-+ * @fdto: Device tree overlay blob
-+ * @delta: Offset to shift the phandles of
-+ *
-+ * overlay_adjust_local_phandles() adds a constant to all the
-+ * phandles of an overlay. This is mainly use as part of the overlay
-+ * application process, when we want to update all the overlay
-+ * phandles to not conflict with the overlays of the base device tree.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_adjust_local_phandles(void *fdto, uint32_t delta)
-+{
-+	/*
-+	 * Start adjusting the phandles from the overlay root
-+	 */
-+	return overlay_adjust_node_phandles(fdto, 0, delta);
-+}
-+
-+/**
-+ * overlay_update_local_node_references - Adjust the overlay references
-+ * @fdto: Device tree overlay blob
-+ * @tree_node: Node offset of the node to operate on
-+ * @fixup_node: Node offset of the matching local fixups node
-+ * @delta: Offset to shift the phandles of
-+ *
-+ * overlay_update_local_nodes_references() update the phandles
-+ * pointing to a node within the device tree overlay by adding a
-+ * constant delta.
-+ *
-+ * This is mainly used as part of a device tree application process,
-+ * where you want the device tree overlays phandles to not conflict
-+ * with the ones from the base device tree before merging them.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_update_local_node_references(void *fdto,
-+						int tree_node,
-+						int fixup_node,
-+						uint32_t delta)
-+{
-+	int fixup_prop;
-+	int fixup_child;
-+	int ret;
-+
-+	fdt_for_each_property_offset(fixup_prop, fdto, fixup_node) {
-+		const fdt32_t *fixup_val;
-+		const char *tree_val;
-+		const char *name;
-+		int fixup_len;
-+		int tree_len;
-+		int i;
-+
-+		fixup_val = fdt_getprop_by_offset(fdto, fixup_prop,
-+						  &name, &fixup_len);
-+		if (!fixup_val)
-+			return fixup_len;
-+
-+		if (fixup_len % sizeof(uint32_t))
-+			return -FDT_ERR_BADOVERLAY;
-+		fixup_len /= sizeof(uint32_t);
-+
-+		tree_val = fdt_getprop(fdto, tree_node, name, &tree_len);
-+		if (!tree_val) {
-+			if (tree_len == -FDT_ERR_NOTFOUND)
-+				return -FDT_ERR_BADOVERLAY;
-+
-+			return tree_len;
-+		}
-+
-+		for (i = 0; i < fixup_len; i++) {
-+			fdt32_t adj_val;
-+			uint32_t poffset;
-+
-+			poffset = fdt32_to_cpu(fixup_val[i]);
-+
-+			/*
-+			 * phandles to fixup can be unaligned.
-+			 *
-+			 * Use a memcpy for the architectures that do
-+			 * not support unaligned accesses.
-+			 */
-+			memcpy(&adj_val, tree_val + poffset, sizeof(adj_val));
-+
-+			adj_val = cpu_to_fdt32(fdt32_to_cpu(adj_val) + delta);
-+
-+			ret = fdt_setprop_inplace_namelen_partial(fdto,
-+								  tree_node,
-+								  name,
-+								  strlen(name),
-+								  poffset,
-+								  &adj_val,
-+								  sizeof(adj_val));
-+			if (ret == -FDT_ERR_NOSPACE)
-+				return -FDT_ERR_BADOVERLAY;
-+
-+			if (ret)
-+				return ret;
-+		}
-+	}
-+
-+	fdt_for_each_subnode(fixup_child, fdto, fixup_node) {
-+		const char *fixup_child_name = fdt_get_name(fdto, fixup_child,
-+							    NULL);
-+		int tree_child;
-+
-+		tree_child = fdt_subnode_offset(fdto, tree_node,
-+						fixup_child_name);
-+		if (tree_child == -FDT_ERR_NOTFOUND)
-+			return -FDT_ERR_BADOVERLAY;
-+		if (tree_child < 0)
-+			return tree_child;
-+
-+		ret = overlay_update_local_node_references(fdto,
-+							   tree_child,
-+							   fixup_child,
-+							   delta);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/**
-+ * overlay_update_local_references - Adjust the overlay references
-+ * @fdto: Device tree overlay blob
-+ * @delta: Offset to shift the phandles of
-+ *
-+ * overlay_update_local_references() update all the phandles pointing
-+ * to a node within the device tree overlay by adding a constant
-+ * delta to not conflict with the base overlay.
-+ *
-+ * This is mainly used as part of a device tree application process,
-+ * where you want the device tree overlays phandles to not conflict
-+ * with the ones from the base device tree before merging them.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_update_local_references(void *fdto, uint32_t delta)
-+{
-+	int fixups;
-+
-+	fixups = fdt_path_offset(fdto, "/__local_fixups__");
-+	if (fixups < 0) {
-+		/* There's no local phandles to adjust, bail out */
-+		if (fixups == -FDT_ERR_NOTFOUND)
-+			return 0;
-+
-+		return fixups;
-+	}
-+
-+	/*
-+	 * Update our local references from the root of the tree
-+	 */
-+	return overlay_update_local_node_references(fdto, 0, fixups,
-+						    delta);
-+}
-+
-+/**
-+ * overlay_fixup_one_phandle - Set an overlay phandle to the base one
-+ * @fdt: Base Device Tree blob
-+ * @fdto: Device tree overlay blob
-+ * @symbols_off: Node offset of the symbols node in the base device tree
-+ * @path: Path to a node holding a phandle in the overlay
-+ * @path_len: number of path characters to consider
-+ * @name: Name of the property holding the phandle reference in the overlay
-+ * @name_len: number of name characters to consider
-+ * @poffset: Offset within the overlay property where the phandle is stored
-+ * @label: Label of the node referenced by the phandle
-+ *
-+ * overlay_fixup_one_phandle() resolves an overlay phandle pointing to
-+ * a node in the base device tree.
-+ *
-+ * This is part of the device tree overlay application process, when
-+ * you want all the phandles in the overlay to point to the actual
-+ * base dt nodes.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_fixup_one_phandle(void *fdt, void *fdto,
-+				     int symbols_off,
-+				     const char *path, uint32_t path_len,
-+				     const char *name, uint32_t name_len,
-+				     int poffset, const char *label)
-+{
-+	const char *symbol_path;
-+	uint32_t phandle;
-+	fdt32_t phandle_prop;
-+	int symbol_off, fixup_off;
-+	int prop_len;
-+
-+	if (symbols_off < 0)
-+		return symbols_off;
-+
-+	symbol_path = fdt_getprop(fdt, symbols_off, label,
-+				  &prop_len);
-+	if (!symbol_path)
-+		return prop_len;
-+
-+	symbol_off = fdt_path_offset(fdt, symbol_path);
-+	if (symbol_off < 0)
-+		return symbol_off;
-+
-+	phandle = fdt_get_phandle(fdt, symbol_off);
-+	if (!phandle)
-+		return -FDT_ERR_NOTFOUND;
-+
-+	fixup_off = fdt_path_offset_namelen(fdto, path, path_len);
-+	if (fixup_off == -FDT_ERR_NOTFOUND)
-+		return -FDT_ERR_BADOVERLAY;
-+	if (fixup_off < 0)
-+		return fixup_off;
-+
-+	phandle_prop = cpu_to_fdt32(phandle);
-+	return fdt_setprop_inplace_namelen_partial(fdto, fixup_off,
-+						   name, name_len, poffset,
-+						   &phandle_prop,
-+						   sizeof(phandle_prop));
-+};
-+
-+/**
-+ * overlay_fixup_phandle - Set an overlay phandle to the base one
-+ * @fdt: Base Device Tree blob
-+ * @fdto: Device tree overlay blob
-+ * @symbols_off: Node offset of the symbols node in the base device tree
-+ * @property: Property offset in the overlay holding the list of fixups
-+ *
-+ * overlay_fixup_phandle() resolves all the overlay phandles pointed
-+ * to in a __fixups__ property, and updates them to match the phandles
-+ * in use in the base device tree.
-+ *
-+ * This is part of the device tree overlay application process, when
-+ * you want all the phandles in the overlay to point to the actual
-+ * base dt nodes.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_fixup_phandle(void *fdt, void *fdto, int symbols_off,
-+				 int property)
-+{
-+	const char *value;
-+	const char *label;
-+	int len;
-+
-+	value = fdt_getprop_by_offset(fdto, property,
-+				      &label, &len);
-+	if (!value) {
-+		if (len == -FDT_ERR_NOTFOUND)
-+			return -FDT_ERR_INTERNAL;
-+
-+		return len;
-+	}
-+
-+	do {
-+		const char *path, *name, *fixup_end;
-+		const char *fixup_str = value;
-+		uint32_t path_len, name_len;
-+		uint32_t fixup_len;
-+		char *sep, *endptr;
-+		int poffset, ret;
-+
-+		fixup_end = memchr(value, '\0', len);
-+		if (!fixup_end)
-+			return -FDT_ERR_BADOVERLAY;
-+		fixup_len = fixup_end - fixup_str;
-+
-+		len -= fixup_len + 1;
-+		value += fixup_len + 1;
-+
-+		path = fixup_str;
-+		sep = memchr(fixup_str, ':', fixup_len);
-+		if (!sep || *sep != ':')
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		path_len = sep - path;
-+		if (path_len == (fixup_len - 1))
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		fixup_len -= path_len + 1;
-+		name = sep + 1;
-+		sep = memchr(name, ':', fixup_len);
-+		if (!sep || *sep != ':')
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		name_len = sep - name;
-+		if (!name_len)
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		poffset = strtoul(sep + 1, &endptr, 10);
-+		if ((*endptr != '\0') || (endptr <= (sep + 1)))
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		ret = overlay_fixup_one_phandle(fdt, fdto, symbols_off,
-+						path, path_len, name, name_len,
-+						poffset, label);
-+		if (ret)
-+			return ret;
-+	} while (len > 0);
-+
-+	return 0;
-+}
-+
-+/**
-+ * overlay_fixup_phandles - Resolve the overlay phandles to the base
-+ *                          device tree
-+ * @fdt: Base Device Tree blob
-+ * @fdto: Device tree overlay blob
-+ *
-+ * overlay_fixup_phandles() resolves all the overlay phandles pointing
-+ * to nodes in the base device tree.
-+ *
-+ * This is one of the steps of the device tree overlay application
-+ * process, when you want all the phandles in the overlay to point to
-+ * the actual base dt nodes.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_fixup_phandles(void *fdt, void *fdto)
-+{
-+	int fixups_off, symbols_off;
-+	int property;
-+
-+	/* We can have overlays without any fixups */
-+	fixups_off = fdt_path_offset(fdto, "/__fixups__");
-+	if (fixups_off == -FDT_ERR_NOTFOUND)
-+		return 0; /* nothing to do */
-+	if (fixups_off < 0)
-+		return fixups_off;
-+
-+	/* And base DTs without symbols */
-+	symbols_off = fdt_path_offset(fdt, "/__symbols__");
-+	if ((symbols_off < 0 && (symbols_off != -FDT_ERR_NOTFOUND)))
-+		return symbols_off;
-+
-+	fdt_for_each_property_offset(property, fdto, fixups_off) {
-+		int ret;
-+
-+		ret = overlay_fixup_phandle(fdt, fdto, symbols_off, property);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/**
-+ * overlay_apply_node - Merges a node into the base device tree
-+ * @fdt: Base Device Tree blob
-+ * @target: Node offset in the base device tree to apply the fragment to
-+ * @fdto: Device tree overlay blob
-+ * @node: Node offset in the overlay holding the changes to merge
-+ *
-+ * overlay_apply_node() merges a node into a target base device tree
-+ * node pointed.
-+ *
-+ * This is part of the final step in the device tree overlay
-+ * application process, when all the phandles have been adjusted and
-+ * resolved and you just have to merge overlay into the base device
-+ * tree.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_apply_node(void *fdt, int target,
-+			      void *fdto, int node)
-+{
-+	int property;
-+	int subnode;
-+
-+	fdt_for_each_property_offset(property, fdto, node) {
-+		const char *name;
-+		const void *prop;
-+		int prop_len;
-+		int ret;
-+
-+		prop = fdt_getprop_by_offset(fdto, property, &name,
-+					     &prop_len);
-+		if (prop_len == -FDT_ERR_NOTFOUND)
-+			return -FDT_ERR_INTERNAL;
-+		if (prop_len < 0)
-+			return prop_len;
-+
-+		ret = fdt_setprop(fdt, target, name, prop, prop_len);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	fdt_for_each_subnode(subnode, fdto, node) {
-+		const char *name = fdt_get_name(fdto, subnode, NULL);
-+		int nnode;
-+		int ret;
-+
-+		nnode = fdt_add_subnode(fdt, target, name);
-+		if (nnode == -FDT_ERR_EXISTS) {
-+			nnode = fdt_subnode_offset(fdt, target, name);
-+			if (nnode == -FDT_ERR_NOTFOUND)
-+				return -FDT_ERR_INTERNAL;
-+		}
-+
-+		if (nnode < 0)
-+			return nnode;
-+
-+		ret = overlay_apply_node(fdt, nnode, fdto, subnode);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/**
-+ * overlay_merge - Merge an overlay into its base device tree
-+ * @fdt: Base Device Tree blob
-+ * @fdto: Device tree overlay blob
-+ *
-+ * overlay_merge() merges an overlay into its base device tree.
-+ *
-+ * This is the next to last step in the device tree overlay application
-+ * process, when all the phandles have been adjusted and resolved and
-+ * you just have to merge overlay into the base device tree.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_merge(void *fdt, void *fdto)
-+{
-+	int fragment;
-+
-+	fdt_for_each_subnode(fragment, fdto, 0) {
-+		int overlay;
-+		int target;
-+		int ret;
-+
-+		/*
-+		 * Each fragments will have an __overlay__ node. If
-+		 * they don't, it's not supposed to be merged
-+		 */
-+		overlay = fdt_subnode_offset(fdto, fragment, "__overlay__");
-+		if (overlay == -FDT_ERR_NOTFOUND)
-+			continue;
-+
-+		if (overlay < 0)
-+			return overlay;
-+
-+		target = overlay_get_target(fdt, fdto, fragment, NULL);
-+		if (target < 0)
-+			return target;
-+
-+		ret = overlay_apply_node(fdt, target, fdto, overlay);
-+		if (ret)
-+			return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+static int get_path_len(const void *fdt, int nodeoffset)
-+{
-+	int len = 0, namelen;
-+	const char *name;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	for (;;) {
-+		name = fdt_get_name(fdt, nodeoffset, &namelen);
-+		if (!name)
-+			return namelen;
-+
-+		/* root? we're done */
-+		if (namelen == 0)
-+			break;
-+
-+		nodeoffset = fdt_parent_offset(fdt, nodeoffset);
-+		if (nodeoffset < 0)
-+			return nodeoffset;
-+		len += namelen + 1;
-+	}
-+
-+	/* in case of root pretend it's "/" */
-+	if (len == 0)
-+		len++;
-+	return len;
-+}
-+
-+/**
-+ * overlay_symbol_update - Update the symbols of base tree after a merge
-+ * @fdt: Base Device Tree blob
-+ * @fdto: Device tree overlay blob
-+ *
-+ * overlay_symbol_update() updates the symbols of the base tree with the
-+ * symbols of the applied overlay
-+ *
-+ * This is the last step in the device tree overlay application
-+ * process, allowing the reference of overlay symbols by subsequent
-+ * overlay operations.
-+ *
-+ * returns:
-+ *      0 on success
-+ *      Negative error code on failure
-+ */
-+static int overlay_symbol_update(void *fdt, void *fdto)
-+{
-+	int root_sym, ov_sym, prop, path_len, fragment, target;
-+	int len, frag_name_len, ret, rel_path_len;
-+	const char *s, *e;
-+	const char *path;
-+	const char *name;
-+	const char *frag_name;
-+	const char *rel_path;
-+	const char *target_path;
-+	char *buf;
-+	void *p;
-+
-+	ov_sym = fdt_subnode_offset(fdto, 0, "__symbols__");
-+
-+	/* if no overlay symbols exist no problem */
-+	if (ov_sym < 0)
-+		return 0;
-+
-+	root_sym = fdt_subnode_offset(fdt, 0, "__symbols__");
-+
-+	/* it no root symbols exist we should create them */
-+	if (root_sym == -FDT_ERR_NOTFOUND)
-+		root_sym = fdt_add_subnode(fdt, 0, "__symbols__");
-+
-+	/* any error is fatal now */
-+	if (root_sym < 0)
-+		return root_sym;
-+
-+	/* iterate over each overlay symbol */
-+	fdt_for_each_property_offset(prop, fdto, ov_sym) {
-+		path = fdt_getprop_by_offset(fdto, prop, &name, &path_len);
-+		if (!path)
-+			return path_len;
-+
-+		/* verify it's a string property (terminated by a single \0) */
-+		if (path_len < 1 || memchr(path, '\0', path_len) != &path[path_len - 1])
-+			return -FDT_ERR_BADVALUE;
-+
-+		/* keep end marker to avoid strlen() */
-+		e = path + path_len;
-+
-+		if (*path != '/')
-+			return -FDT_ERR_BADVALUE;
-+
-+		/* get fragment name first */
-+		s = strchr(path + 1, '/');
-+		if (!s) {
-+			/* Symbol refers to something that won't end
-+			 * up in the target tree */
-+			continue;
-+		}
-+
-+		frag_name = path + 1;
-+		frag_name_len = s - path - 1;
-+
-+		/* verify format; safe since "s" lies in \0 terminated prop */
-+		len = sizeof("/__overlay__/") - 1;
-+		if ((e - s) > len && (memcmp(s, "/__overlay__/", len) == 0)) {
-+			/* /<fragment-name>/__overlay__/<relative-subnode-path> */
-+			rel_path = s + len;
-+			rel_path_len = e - rel_path - 1;
-+		} else if ((e - s) == len
-+			   && (memcmp(s, "/__overlay__", len - 1) == 0)) {
-+			/* /<fragment-name>/__overlay__ */
-+			rel_path = "";
-+			rel_path_len = 0;
-+		} else {
-+			/* Symbol refers to something that won't end
-+			 * up in the target tree */
-+			continue;
-+		}
-+
-+		/* find the fragment index in which the symbol lies */
-+		ret = fdt_subnode_offset_namelen(fdto, 0, frag_name,
-+					       frag_name_len);
-+		/* not found? */
-+		if (ret < 0)
-+			return -FDT_ERR_BADOVERLAY;
-+		fragment = ret;
-+
-+		/* an __overlay__ subnode must exist */
-+		ret = fdt_subnode_offset(fdto, fragment, "__overlay__");
-+		if (ret < 0)
-+			return -FDT_ERR_BADOVERLAY;
-+
-+		/* get the target of the fragment */
-+		ret = overlay_get_target(fdt, fdto, fragment, &target_path);
-+		if (ret < 0)
-+			return ret;
-+		target = ret;
-+
-+		/* if we have a target path use */
-+		if (!target_path) {
-+			ret = get_path_len(fdt, target);
-+			if (ret < 0)
-+				return ret;
-+			len = ret;
-+		} else {
-+			len = strlen(target_path);
-+		}
-+
-+		ret = fdt_setprop_placeholder(fdt, root_sym, name,
-+				len + (len > 1) + rel_path_len + 1, &p);
-+		if (ret < 0)
-+			return ret;
-+
-+		if (!target_path) {
-+			/* again in case setprop_placeholder changed it */
-+			ret = overlay_get_target(fdt, fdto, fragment, &target_path);
-+			if (ret < 0)
-+				return ret;
-+			target = ret;
-+		}
-+
-+		buf = p;
-+		if (len > 1) { /* target is not root */
-+			if (!target_path) {
-+				ret = fdt_get_path(fdt, target, buf, len + 1);
-+				if (ret < 0)
-+					return ret;
-+			} else
-+				memcpy(buf, target_path, len + 1);
-+
-+		} else
-+			len--;
-+
-+		buf[len] = '/';
-+		memcpy(buf + len + 1, rel_path, rel_path_len);
-+		buf[len + 1 + rel_path_len] = '\0';
-+	}
-+
-+	return 0;
-+}
-+
-+int fdt_overlay_apply(void *fdt, void *fdto)
-+{
-+	uint32_t delta;
-+	int ret;
-+
-+	FDT_RO_PROBE(fdt);
-+	FDT_RO_PROBE(fdto);
-+
-+	ret = fdt_find_max_phandle(fdt, &delta);
-+	if (ret)
-+		goto err;
-+
-+	ret = overlay_adjust_local_phandles(fdto, delta);
-+	if (ret)
-+		goto err;
-+
-+	ret = overlay_update_local_references(fdto, delta);
-+	if (ret)
-+		goto err;
-+
-+	ret = overlay_fixup_phandles(fdt, fdto);
-+	if (ret)
-+		goto err;
-+
-+	ret = overlay_merge(fdt, fdto);
-+	if (ret)
-+		goto err;
-+
-+	ret = overlay_symbol_update(fdt, fdto);
-+	if (ret)
-+		goto err;
-+
-+	/*
-+	 * The overlay has been damaged, erase its magic.
-+	 */
-+	fdt_set_magic(fdto, ~0);
-+
-+	return 0;
-+
-+err:
-+	/*
-+	 * The overlay might have been damaged, erase its magic.
-+	 */
-+	fdt_set_magic(fdto, ~0);
-+
-+	/*
-+	 * The base device tree might have been damaged, erase its
-+	 * magic.
-+	 */
-+	fdt_set_magic(fdt, ~0);
-+
-+	return ret;
-+}
-diff --git a/common/libfdt/fdt_ro.c b/common/libfdt/fdt_ro.c
-new file mode 100644
-index 0000000..17584da
---- /dev/null
-+++ b/common/libfdt/fdt_ro.c
-@@ -0,0 +1,859 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+static int fdt_nodename_eq_(const void *fdt, int offset,
-+			    const char *s, int len)
-+{
-+	int olen;
-+	const char *p = fdt_get_name(fdt, offset, &olen);
-+
-+	if (!p || olen < len)
-+		/* short match */
-+		return 0;
-+
-+	if (memcmp(p, s, len) != 0)
-+		return 0;
-+
-+	if (p[len] == '\0')
-+		return 1;
-+	else if (!memchr(s, '@', len) && (p[len] == '@'))
-+		return 1;
-+	else
-+		return 0;
-+}
-+
-+const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
-+{
-+	int32_t totalsize;
-+	uint32_t absoffset;
-+	size_t len;
-+	int err;
-+	const char *s, *n;
-+
-+	if (can_assume(VALID_INPUT)) {
-+		s = (const char *)fdt + fdt_off_dt_strings(fdt) + stroffset;
-+
-+		if (lenp)
-+			*lenp = strlen(s);
-+		return s;
-+	}
-+	totalsize = fdt_ro_probe_(fdt);
-+	err = totalsize;
-+	if (totalsize < 0)
-+		goto fail;
-+
-+	err = -FDT_ERR_BADOFFSET;
-+	absoffset = stroffset + fdt_off_dt_strings(fdt);
-+	if (absoffset >= (unsigned)totalsize)
-+		goto fail;
-+	len = totalsize - absoffset;
-+
-+	if (fdt_magic(fdt) == FDT_MAGIC) {
-+		if (stroffset < 0)
-+			goto fail;
-+		if (can_assume(LATEST) || fdt_version(fdt) >= 17) {
-+			if ((unsigned)stroffset >= fdt_size_dt_strings(fdt))
-+				goto fail;
-+			if ((fdt_size_dt_strings(fdt) - stroffset) < len)
-+				len = fdt_size_dt_strings(fdt) - stroffset;
-+		}
-+	} else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
-+		unsigned int sw_stroffset = -stroffset;
-+
-+		if ((stroffset >= 0) ||
-+		    (sw_stroffset > fdt_size_dt_strings(fdt)))
-+			goto fail;
-+		if (sw_stroffset < len)
-+			len = sw_stroffset;
-+	} else {
-+		err = -FDT_ERR_INTERNAL;
-+		goto fail;
-+	}
-+
-+	s = (const char *)fdt + absoffset;
-+	n = memchr(s, '\0', len);
-+	if (!n) {
-+		/* missing terminating NULL */
-+		err = -FDT_ERR_TRUNCATED;
-+		goto fail;
-+	}
-+
-+	if (lenp)
-+		*lenp = n - s;
-+	return s;
-+
-+fail:
-+	if (lenp)
-+		*lenp = err;
-+	return NULL;
-+}
-+
-+const char *fdt_string(const void *fdt, int stroffset)
-+{
-+	return fdt_get_string(fdt, stroffset, NULL);
-+}
-+
-+static int fdt_string_eq_(const void *fdt, int stroffset,
-+			  const char *s, int len)
-+{
-+	int slen;
-+	const char *p = fdt_get_string(fdt, stroffset, &slen);
-+
-+	return p && (slen == len) && (memcmp(p, s, len) == 0);
-+}
-+
-+int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)
-+{
-+	uint32_t max = 0;
-+	int offset = -1;
-+
-+	while (true) {
-+		uint32_t value;
-+
-+		offset = fdt_next_node(fdt, offset, NULL);
-+		if (offset < 0) {
-+			if (offset == -FDT_ERR_NOTFOUND)
-+				break;
-+
-+			return offset;
-+		}
-+
-+		value = fdt_get_phandle(fdt, offset);
-+
-+		if (value > max)
-+			max = value;
-+	}
-+
-+	if (phandle)
-+		*phandle = max;
-+
-+	return 0;
-+}
-+
-+int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
-+{
-+	uint32_t max;
-+	int err;
-+
-+	err = fdt_find_max_phandle(fdt, &max);
-+	if (err < 0)
-+		return err;
-+
-+	if (max == FDT_MAX_PHANDLE)
-+		return -FDT_ERR_NOPHANDLES;
-+
-+	if (phandle)
-+		*phandle = max + 1;
-+
-+	return 0;
-+}
-+
-+static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)
-+{
-+	unsigned int offset = n * sizeof(struct fdt_reserve_entry);
-+	unsigned int absoffset = fdt_off_mem_rsvmap(fdt) + offset;
-+
-+	if (!can_assume(VALID_INPUT)) {
-+		if (absoffset < fdt_off_mem_rsvmap(fdt))
-+			return NULL;
-+		if (absoffset > fdt_totalsize(fdt) -
-+		    sizeof(struct fdt_reserve_entry))
-+			return NULL;
-+	}
-+	return fdt_mem_rsv_(fdt, n);
-+}
-+
-+int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
-+{
-+	const struct fdt_reserve_entry *re;
-+
-+	FDT_RO_PROBE(fdt);
-+	re = fdt_mem_rsv(fdt, n);
-+	if (!can_assume(VALID_INPUT) && !re)
-+		return -FDT_ERR_BADOFFSET;
-+
-+	*address = fdt64_ld_(&re->address);
-+	*size = fdt64_ld_(&re->size);
-+	return 0;
-+}
-+
-+int fdt_num_mem_rsv(const void *fdt)
-+{
-+	int i;
-+	const struct fdt_reserve_entry *re;
-+
-+	for (i = 0; (re = fdt_mem_rsv(fdt, i)) != NULL; i++) {
-+		if (fdt64_ld_(&re->size) == 0)
-+			return i;
-+	}
-+	return -FDT_ERR_TRUNCATED;
-+}
-+
-+static int nextprop_(const void *fdt, int offset)
-+{
-+	uint32_t tag;
-+	int nextoffset;
-+
-+	do {
-+		tag = fdt_next_tag(fdt, offset, &nextoffset);
-+
-+		switch (tag) {
-+		case FDT_END:
-+			if (nextoffset >= 0)
-+				return -FDT_ERR_BADSTRUCTURE;
-+			else
-+				return nextoffset;
-+
-+		case FDT_PROP:
-+			return offset;
-+		}
-+		offset = nextoffset;
-+	} while (tag == FDT_NOP);
-+
-+	return -FDT_ERR_NOTFOUND;
-+}
-+
-+int fdt_subnode_offset_namelen(const void *fdt, int offset,
-+			       const char *name, int namelen)
-+{
-+	int depth;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	for (depth = 0;
-+	     (offset >= 0) && (depth >= 0);
-+	     offset = fdt_next_node(fdt, offset, &depth))
-+		if ((depth == 1)
-+		    && fdt_nodename_eq_(fdt, offset, name, namelen))
-+			return offset;
-+
-+	if (depth < 0)
-+		return -FDT_ERR_NOTFOUND;
-+	return offset; /* error */
-+}
-+
-+int fdt_subnode_offset(const void *fdt, int parentoffset,
-+		       const char *name)
-+{
-+	return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));
-+}
-+
-+int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen)
-+{
-+	const char *end = path + namelen;
-+	const char *p = path;
-+	int offset = 0;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	/* see if we have an alias */
-+	if (*path != '/') {
-+		const char *q = memchr(path, '/', end - p);
-+
-+		if (!q)
-+			q = end;
-+
-+		p = fdt_get_alias_namelen(fdt, p, q - p);
-+		if (!p)
-+			return -FDT_ERR_BADPATH;
-+		offset = fdt_path_offset(fdt, p);
-+
-+		p = q;
-+	}
-+
-+	while (p < end) {
-+		const char *q;
-+
-+		while (*p == '/') {
-+			p++;
-+			if (p == end)
-+				return offset;
-+		}
-+		q = memchr(p, '/', end - p);
-+		if (! q)
-+			q = end;
-+
-+		offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);
-+		if (offset < 0)
-+			return offset;
-+
-+		p = q;
-+	}
-+
-+	return offset;
-+}
-+
-+int fdt_path_offset(const void *fdt, const char *path)
-+{
-+	return fdt_path_offset_namelen(fdt, path, strlen(path));
-+}
-+
-+const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
-+{
-+	const struct fdt_node_header *nh = fdt_offset_ptr_(fdt, nodeoffset);
-+	const char *nameptr;
-+	int err;
-+
-+	if (((err = fdt_ro_probe_(fdt)) < 0)
-+	    || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0))
-+			goto fail;
-+
-+	nameptr = nh->name;
-+
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
-+		/*
-+		 * For old FDT versions, match the naming conventions of V16:
-+		 * give only the leaf name (after all /). The actual tree
-+		 * contents are loosely checked.
-+		 */
-+		const char *leaf;
-+		leaf = strrchr(nameptr, '/');
-+		if (leaf == NULL) {
-+			err = -FDT_ERR_BADSTRUCTURE;
-+			goto fail;
-+		}
-+		nameptr = leaf+1;
-+	}
-+
-+	if (len)
-+		*len = strlen(nameptr);
-+
-+	return nameptr;
-+
-+ fail:
-+	if (len)
-+		*len = err;
-+	return NULL;
-+}
-+
-+int fdt_first_property_offset(const void *fdt, int nodeoffset)
-+{
-+	int offset;
-+
-+	if ((offset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
-+		return offset;
-+
-+	return nextprop_(fdt, offset);
-+}
-+
-+int fdt_next_property_offset(const void *fdt, int offset)
-+{
-+	if ((offset = fdt_check_prop_offset_(fdt, offset)) < 0)
-+		return offset;
-+
-+	return nextprop_(fdt, offset);
-+}
-+
-+static const struct fdt_property *fdt_get_property_by_offset_(const void *fdt,
-+						              int offset,
-+						              int *lenp)
-+{
-+	int err;
-+	const struct fdt_property *prop;
-+
-+	if (!can_assume(VALID_INPUT) &&
-+	    (err = fdt_check_prop_offset_(fdt, offset)) < 0) {
-+		if (lenp)
-+			*lenp = err;
-+		return NULL;
-+	}
-+
-+	prop = fdt_offset_ptr_(fdt, offset);
-+
-+	if (lenp)
-+		*lenp = fdt32_ld_(&prop->len);
-+
-+	return prop;
-+}
-+
-+const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
-+						      int offset,
-+						      int *lenp)
-+{
-+	/* Prior to version 16, properties may need realignment
-+	 * and this API does not work. fdt_getprop_*() will, however. */
-+
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
-+		if (lenp)
-+			*lenp = -FDT_ERR_BADVERSION;
-+		return NULL;
-+	}
-+
-+	return fdt_get_property_by_offset_(fdt, offset, lenp);
-+}
-+
-+static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,
-+						            int offset,
-+						            const char *name,
-+						            int namelen,
-+							    int *lenp,
-+							    int *poffset)
-+{
-+	for (offset = fdt_first_property_offset(fdt, offset);
-+	     (offset >= 0);
-+	     (offset = fdt_next_property_offset(fdt, offset))) {
-+		const struct fdt_property *prop;
-+
-+		prop = fdt_get_property_by_offset_(fdt, offset, lenp);
-+		if (!can_assume(LIBFDT_FLAWLESS) && !prop) {
-+			offset = -FDT_ERR_INTERNAL;
-+			break;
-+		}
-+		if (fdt_string_eq_(fdt, fdt32_ld_(&prop->nameoff),
-+				   name, namelen)) {
-+			if (poffset)
-+				*poffset = offset;
-+			return prop;
-+		}
-+	}
-+
-+	if (lenp)
-+		*lenp = offset;
-+	return NULL;
-+}
-+
-+
-+const struct fdt_property *fdt_get_property_namelen(const void *fdt,
-+						    int offset,
-+						    const char *name,
-+						    int namelen, int *lenp)
-+{
-+	/* Prior to version 16, properties may need realignment
-+	 * and this API does not work. fdt_getprop_*() will, however. */
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
-+		if (lenp)
-+			*lenp = -FDT_ERR_BADVERSION;
-+		return NULL;
-+	}
-+
-+	return fdt_get_property_namelen_(fdt, offset, name, namelen, lenp,
-+					 NULL);
-+}
-+
-+
-+const struct fdt_property *fdt_get_property(const void *fdt,
-+					    int nodeoffset,
-+					    const char *name, int *lenp)
-+{
-+	return fdt_get_property_namelen(fdt, nodeoffset, name,
-+					strlen(name), lenp);
-+}
-+
-+const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
-+				const char *name, int namelen, int *lenp)
-+{
-+	int poffset;
-+	const struct fdt_property *prop;
-+
-+	prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
-+					 &poffset);
-+	if (!prop)
-+		return NULL;
-+
-+	/* Handle realignment */
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 0x10 &&
-+	    (poffset + sizeof(*prop)) % 8 && fdt32_ld_(&prop->len) >= 8)
-+		return prop->data + 4;
-+	return prop->data;
-+}
-+
-+const void *fdt_getprop_by_offset(const void *fdt, int offset,
-+				  const char **namep, int *lenp)
-+{
-+	const struct fdt_property *prop;
-+
-+	prop = fdt_get_property_by_offset_(fdt, offset, lenp);
-+	if (!prop)
-+		return NULL;
-+	if (namep) {
-+		const char *name;
-+		int namelen;
-+
-+		if (!can_assume(VALID_INPUT)) {
-+			name = fdt_get_string(fdt, fdt32_ld_(&prop->nameoff),
-+					      &namelen);
-+			if (!name) {
-+				if (lenp)
-+					*lenp = namelen;
-+				return NULL;
-+			}
-+			*namep = name;
-+		} else {
-+			*namep = fdt_string(fdt, fdt32_ld_(&prop->nameoff));
-+		}
-+	}
-+
-+	/* Handle realignment */
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 0x10 &&
-+	    (offset + sizeof(*prop)) % 8 && fdt32_ld_(&prop->len) >= 8)
-+		return prop->data + 4;
-+	return prop->data;
-+}
-+
-+const void *fdt_getprop(const void *fdt, int nodeoffset,
-+			const char *name, int *lenp)
-+{
-+	return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);
-+}
-+
-+uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
-+{
-+	const fdt32_t *php;
-+	int len;
-+
-+	/* FIXME: This is a bit sub-optimal, since we potentially scan
-+	 * over all the properties twice. */
-+	php = fdt_getprop(fdt, nodeoffset, "phandle", &len);
-+	if (!php || (len != sizeof(*php))) {
-+		php = fdt_getprop(fdt, nodeoffset, "linux,phandle", &len);
-+		if (!php || (len != sizeof(*php)))
-+			return 0;
-+	}
-+
-+	return fdt32_ld_(php);
-+}
-+
-+const char *fdt_get_alias_namelen(const void *fdt,
-+				  const char *name, int namelen)
-+{
-+	int aliasoffset;
-+
-+	aliasoffset = fdt_path_offset(fdt, "/aliases");
-+	if (aliasoffset < 0)
-+		return NULL;
-+
-+	return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);
-+}
-+
-+const char *fdt_get_alias(const void *fdt, const char *name)
-+{
-+	return fdt_get_alias_namelen(fdt, name, strlen(name));
-+}
-+
-+int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
-+{
-+	int pdepth = 0, p = 0;
-+	int offset, depth, namelen;
-+	const char *name;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	if (buflen < 2)
-+		return -FDT_ERR_NOSPACE;
-+
-+	for (offset = 0, depth = 0;
-+	     (offset >= 0) && (offset <= nodeoffset);
-+	     offset = fdt_next_node(fdt, offset, &depth)) {
-+		while (pdepth > depth) {
-+			do {
-+				p--;
-+			} while (buf[p-1] != '/');
-+			pdepth--;
-+		}
-+
-+		if (pdepth >= depth) {
-+			name = fdt_get_name(fdt, offset, &namelen);
-+			if (!name)
-+				return namelen;
-+			if ((p + namelen + 1) <= buflen) {
-+				memcpy(buf + p, name, namelen);
-+				p += namelen;
-+				buf[p++] = '/';
-+				pdepth++;
-+			}
-+		}
-+
-+		if (offset == nodeoffset) {
-+			if (pdepth < (depth + 1))
-+				return -FDT_ERR_NOSPACE;
-+
-+			if (p > 1) /* special case so that root path is "/", not "" */
-+				p--;
-+			buf[p] = '\0';
-+			return 0;
-+		}
-+	}
-+
-+	if ((offset == -FDT_ERR_NOTFOUND) || (offset >= 0))
-+		return -FDT_ERR_BADOFFSET;
-+	else if (offset == -FDT_ERR_BADOFFSET)
-+		return -FDT_ERR_BADSTRUCTURE;
-+
-+	return offset; /* error from fdt_next_node() */
-+}
-+
-+int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
-+				 int supernodedepth, int *nodedepth)
-+{
-+	int offset, depth;
-+	int supernodeoffset = -FDT_ERR_INTERNAL;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	if (supernodedepth < 0)
-+		return -FDT_ERR_NOTFOUND;
-+
-+	for (offset = 0, depth = 0;
-+	     (offset >= 0) && (offset <= nodeoffset);
-+	     offset = fdt_next_node(fdt, offset, &depth)) {
-+		if (depth == supernodedepth)
-+			supernodeoffset = offset;
-+
-+		if (offset == nodeoffset) {
-+			if (nodedepth)
-+				*nodedepth = depth;
-+
-+			if (supernodedepth > depth)
-+				return -FDT_ERR_NOTFOUND;
-+			else
-+				return supernodeoffset;
-+		}
-+	}
-+
-+	if (!can_assume(VALID_INPUT)) {
-+		if ((offset == -FDT_ERR_NOTFOUND) || (offset >= 0))
-+			return -FDT_ERR_BADOFFSET;
-+		else if (offset == -FDT_ERR_BADOFFSET)
-+			return -FDT_ERR_BADSTRUCTURE;
-+	}
-+
-+	return offset; /* error from fdt_next_node() */
-+}
-+
-+int fdt_node_depth(const void *fdt, int nodeoffset)
-+{
-+	int nodedepth;
-+	int err;
-+
-+	err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
-+	if (err)
-+		return (can_assume(LIBFDT_FLAWLESS) || err < 0) ? err :
-+			-FDT_ERR_INTERNAL;
-+	return nodedepth;
-+}
-+
-+int fdt_parent_offset(const void *fdt, int nodeoffset)
-+{
-+	int nodedepth = fdt_node_depth(fdt, nodeoffset);
-+
-+	if (nodedepth < 0)
-+		return nodedepth;
-+	return fdt_supernode_atdepth_offset(fdt, nodeoffset,
-+					    nodedepth - 1, NULL);
-+}
-+
-+int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
-+				  const char *propname,
-+				  const void *propval, int proplen)
-+{
-+	int offset;
-+	const void *val;
-+	int len;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	/* FIXME: The algorithm here is pretty horrible: we scan each
-+	 * property of a node in fdt_getprop(), then if that didn't
-+	 * find what we want, we scan over them again making our way
-+	 * to the next node.  Still it's the easiest to implement
-+	 * approach; performance can come later. */
-+	for (offset = fdt_next_node(fdt, startoffset, NULL);
-+	     offset >= 0;
-+	     offset = fdt_next_node(fdt, offset, NULL)) {
-+		val = fdt_getprop(fdt, offset, propname, &len);
-+		if (val && (len == proplen)
-+		    && (memcmp(val, propval, len) == 0))
-+			return offset;
-+	}
-+
-+	return offset; /* error from fdt_next_node() */
-+}
-+
-+int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
-+{
-+	int offset;
-+
-+	if ((phandle == 0) || (phandle == ~0U))
-+		return -FDT_ERR_BADPHANDLE;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	/* FIXME: The algorithm here is pretty horrible: we
-+	 * potentially scan each property of a node in
-+	 * fdt_get_phandle(), then if that didn't find what
-+	 * we want, we scan over them again making our way to the next
-+	 * node.  Still it's the easiest to implement approach;
-+	 * performance can come later. */
-+	for (offset = fdt_next_node(fdt, -1, NULL);
-+	     offset >= 0;
-+	     offset = fdt_next_node(fdt, offset, NULL)) {
-+		if (fdt_get_phandle(fdt, offset) == phandle)
-+			return offset;
-+	}
-+
-+	return offset; /* error from fdt_next_node() */
-+}
-+
-+int fdt_stringlist_contains(const char *strlist, int listlen, const char *str)
-+{
-+	int len = strlen(str);
-+	const char *p;
-+
-+	while (listlen >= len) {
-+		if (memcmp(str, strlist, len+1) == 0)
-+			return 1;
-+		p = memchr(strlist, '\0', listlen);
-+		if (!p)
-+			return 0; /* malformed strlist.. */
-+		listlen -= (p-strlist) + 1;
-+		strlist = p + 1;
-+	}
-+	return 0;
-+}
-+
-+int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)
-+{
-+	const char *list, *end;
-+	int length, count = 0;
-+
-+	list = fdt_getprop(fdt, nodeoffset, property, &length);
-+	if (!list)
-+		return length;
-+
-+	end = list + length;
-+
-+	while (list < end) {
-+		length = strnlen(list, end - list) + 1;
-+
-+		/* Abort if the last string isn't properly NUL-terminated. */
-+		if (list + length > end)
-+			return -FDT_ERR_BADVALUE;
-+
-+		list += length;
-+		count++;
-+	}
-+
-+	return count;
-+}
-+
-+int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,
-+			  const char *string)
-+{
-+	int length, len, idx = 0;
-+	const char *list, *end;
-+
-+	list = fdt_getprop(fdt, nodeoffset, property, &length);
-+	if (!list)
-+		return length;
-+
-+	len = strlen(string) + 1;
-+	end = list + length;
-+
-+	while (list < end) {
-+		length = strnlen(list, end - list) + 1;
-+
-+		/* Abort if the last string isn't properly NUL-terminated. */
-+		if (list + length > end)
-+			return -FDT_ERR_BADVALUE;
-+
-+		if (length == len && memcmp(list, string, length) == 0)
-+			return idx;
-+
-+		list += length;
-+		idx++;
-+	}
-+
-+	return -FDT_ERR_NOTFOUND;
-+}
-+
-+const char *fdt_stringlist_get(const void *fdt, int nodeoffset,
-+			       const char *property, int idx,
-+			       int *lenp)
-+{
-+	const char *list, *end;
-+	int length;
-+
-+	list = fdt_getprop(fdt, nodeoffset, property, &length);
-+	if (!list) {
-+		if (lenp)
-+			*lenp = length;
-+
-+		return NULL;
-+	}
-+
-+	end = list + length;
-+
-+	while (list < end) {
-+		length = strnlen(list, end - list) + 1;
-+
-+		/* Abort if the last string isn't properly NUL-terminated. */
-+		if (list + length > end) {
-+			if (lenp)
-+				*lenp = -FDT_ERR_BADVALUE;
-+
-+			return NULL;
-+		}
-+
-+		if (idx == 0) {
-+			if (lenp)
-+				*lenp = length - 1;
-+
-+			return list;
-+		}
-+
-+		list += length;
-+		idx--;
-+	}
-+
-+	if (lenp)
-+		*lenp = -FDT_ERR_NOTFOUND;
-+
-+	return NULL;
-+}
-+
-+int fdt_node_check_compatible(const void *fdt, int nodeoffset,
-+			      const char *compatible)
-+{
-+	const void *prop;
-+	int len;
-+
-+	prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
-+	if (!prop)
-+		return len;
-+
-+	return !fdt_stringlist_contains(prop, len, compatible);
-+}
-+
-+int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
-+				  const char *compatible)
-+{
-+	int offset, err;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	/* FIXME: The algorithm here is pretty horrible: we scan each
-+	 * property of a node in fdt_node_check_compatible(), then if
-+	 * that didn't find what we want, we scan over them again
-+	 * making our way to the next node.  Still it's the easiest to
-+	 * implement approach; performance can come later. */
-+	for (offset = fdt_next_node(fdt, startoffset, NULL);
-+	     offset >= 0;
-+	     offset = fdt_next_node(fdt, offset, NULL)) {
-+		err = fdt_node_check_compatible(fdt, offset, compatible);
-+		if ((err < 0) && (err != -FDT_ERR_NOTFOUND))
-+			return err;
-+		else if (err == 0)
-+			return offset;
-+	}
-+
-+	return offset; /* error from fdt_next_node() */
-+}
-diff --git a/common/libfdt/fdt_rw.c b/common/libfdt/fdt_rw.c
-new file mode 100644
-index 0000000..3621d36
---- /dev/null
-+++ b/common/libfdt/fdt_rw.c
-@@ -0,0 +1,500 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+static int fdt_blocks_misordered_(const void *fdt,
-+				  int mem_rsv_size, int struct_size)
-+{
-+	return (fdt_off_mem_rsvmap(fdt) < FDT_ALIGN(sizeof(struct fdt_header), 8))
-+		|| (fdt_off_dt_struct(fdt) <
-+		    (fdt_off_mem_rsvmap(fdt) + mem_rsv_size))
-+		|| (fdt_off_dt_strings(fdt) <
-+		    (fdt_off_dt_struct(fdt) + struct_size))
-+		|| (fdt_totalsize(fdt) <
-+		    (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)));
-+}
-+
-+static int fdt_rw_probe_(void *fdt)
-+{
-+	if (can_assume(VALID_DTB))
-+		return 0;
-+	FDT_RO_PROBE(fdt);
-+
-+	if (!can_assume(LATEST) && fdt_version(fdt) < 17)
-+		return -FDT_ERR_BADVERSION;
-+	if (fdt_blocks_misordered_(fdt, sizeof(struct fdt_reserve_entry),
-+				   fdt_size_dt_struct(fdt)))
-+		return -FDT_ERR_BADLAYOUT;
-+	if (!can_assume(LATEST) && fdt_version(fdt) > 17)
-+		fdt_set_version(fdt, 17);
-+
-+	return 0;
-+}
-+
-+#define FDT_RW_PROBE(fdt) \
-+	{ \
-+		int err_; \
-+		if ((err_ = fdt_rw_probe_(fdt)) != 0) \
-+			return err_; \
-+	}
-+
-+static inline unsigned int fdt_data_size_(void *fdt)
-+{
-+	return fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
-+}
-+
-+static int fdt_splice_(void *fdt, void *splicepoint, int oldlen, int newlen)
-+{
-+	char *p = splicepoint;
-+	unsigned int dsize = fdt_data_size_(fdt);
-+	size_t soff = p - (char *)fdt;
-+
-+	if ((oldlen < 0) || (soff + oldlen < soff) || (soff + oldlen > dsize))
-+		return -FDT_ERR_BADOFFSET;
-+	if ((p < (char *)fdt) || (dsize + newlen < (unsigned)oldlen))
-+		return -FDT_ERR_BADOFFSET;
-+	if (dsize - oldlen + newlen > fdt_totalsize(fdt))
-+		return -FDT_ERR_NOSPACE;
-+	memmove(p + newlen, p + oldlen, ((char *)fdt + dsize) - (p + oldlen));
-+	return 0;
-+}
-+
-+static int fdt_splice_mem_rsv_(void *fdt, struct fdt_reserve_entry *p,
-+			       int oldn, int newn)
-+{
-+	int delta = (newn - oldn) * sizeof(*p);
-+	int err;
-+	err = fdt_splice_(fdt, p, oldn * sizeof(*p), newn * sizeof(*p));
-+	if (err)
-+		return err;
-+	fdt_set_off_dt_struct(fdt, fdt_off_dt_struct(fdt) + delta);
-+	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
-+	return 0;
-+}
-+
-+static int fdt_splice_struct_(void *fdt, void *p,
-+			      int oldlen, int newlen)
-+{
-+	int delta = newlen - oldlen;
-+	int err;
-+
-+	if ((err = fdt_splice_(fdt, p, oldlen, newlen)))
-+		return err;
-+
-+	fdt_set_size_dt_struct(fdt, fdt_size_dt_struct(fdt) + delta);
-+	fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
-+	return 0;
-+}
-+
-+/* Must only be used to roll back in case of error */
-+static void fdt_del_last_string_(void *fdt, const char *s)
-+{
-+	int newlen = strlen(s) + 1;
-+
-+	fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) - newlen);
-+}
-+
-+static int fdt_splice_string_(void *fdt, int newlen)
-+{
-+	void *p = (char *)fdt
-+		+ fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
-+	int err;
-+
-+	if ((err = fdt_splice_(fdt, p, 0, newlen)))
-+		return err;
-+
-+	fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) + newlen);
-+	return 0;
-+}
-+
-+/**
-+ * fdt_find_add_string_() - Find or allocate a string
-+ *
-+ * @fdt: pointer to the device tree to check/adjust
-+ * @s: string to find/add
-+ * @allocated: Set to 0 if the string was found, 1 if not found and so
-+ *	allocated. Ignored if can_assume(NO_ROLLBACK)
-+ * @return offset of string in the string table (whether found or added)
-+ */
-+static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)
-+{
-+	char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
-+	const char *p;
-+	char *new;
-+	int len = strlen(s) + 1;
-+	int err;
-+
-+	if (!can_assume(NO_ROLLBACK))
-+		*allocated = 0;
-+
-+	p = fdt_find_string_(strtab, fdt_size_dt_strings(fdt), s);
-+	if (p)
-+		/* found it */
-+		return (p - strtab);
-+
-+	new = strtab + fdt_size_dt_strings(fdt);
-+	err = fdt_splice_string_(fdt, len);
-+	if (err)
-+		return err;
-+
-+	if (!can_assume(NO_ROLLBACK))
-+		*allocated = 1;
-+
-+	memcpy(new, s, len);
-+	return (new - strtab);
-+}
-+
-+int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size)
-+{
-+	struct fdt_reserve_entry *re;
-+	int err;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	re = fdt_mem_rsv_w_(fdt, fdt_num_mem_rsv(fdt));
-+	err = fdt_splice_mem_rsv_(fdt, re, 0, 1);
-+	if (err)
-+		return err;
-+
-+	re->address = cpu_to_fdt64(address);
-+	re->size = cpu_to_fdt64(size);
-+	return 0;
-+}
-+
-+int fdt_del_mem_rsv(void *fdt, int n)
-+{
-+	struct fdt_reserve_entry *re = fdt_mem_rsv_w_(fdt, n);
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	if (n >= fdt_num_mem_rsv(fdt))
-+		return -FDT_ERR_NOTFOUND;
-+
-+	return fdt_splice_mem_rsv_(fdt, re, 1, 0);
-+}
-+
-+static int fdt_resize_property_(void *fdt, int nodeoffset, const char *name,
-+				int len, struct fdt_property **prop)
-+{
-+	int oldlen;
-+	int err;
-+
-+	*prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
-+	if (!*prop)
-+		return oldlen;
-+
-+	if ((err = fdt_splice_struct_(fdt, (*prop)->data, FDT_TAGALIGN(oldlen),
-+				      FDT_TAGALIGN(len))))
-+		return err;
-+
-+	(*prop)->len = cpu_to_fdt32(len);
-+	return 0;
-+}
-+
-+static int fdt_add_property_(void *fdt, int nodeoffset, const char *name,
-+			     int len, struct fdt_property **prop)
-+{
-+	int proplen;
-+	int nextoffset;
-+	int namestroff;
-+	int err;
-+	int allocated;
-+
-+	if ((nextoffset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
-+		return nextoffset;
-+
-+	namestroff = fdt_find_add_string_(fdt, name, &allocated);
-+	if (namestroff < 0)
-+		return namestroff;
-+
-+	*prop = fdt_offset_ptr_w_(fdt, nextoffset);
-+	proplen = sizeof(**prop) + FDT_TAGALIGN(len);
-+
-+	err = fdt_splice_struct_(fdt, *prop, 0, proplen);
-+	if (err) {
-+		/* Delete the string if we failed to add it */
-+		if (!can_assume(NO_ROLLBACK) && allocated)
-+			fdt_del_last_string_(fdt, name);
-+		return err;
-+	}
-+
-+	(*prop)->tag = cpu_to_fdt32(FDT_PROP);
-+	(*prop)->nameoff = cpu_to_fdt32(namestroff);
-+	(*prop)->len = cpu_to_fdt32(len);
-+	return 0;
-+}
-+
-+int fdt_set_name(void *fdt, int nodeoffset, const char *name)
-+{
-+	char *namep;
-+	int oldlen, newlen;
-+	int err;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	namep = (char *)(uintptr_t)fdt_get_name(fdt, nodeoffset, &oldlen);
-+	if (!namep)
-+		return oldlen;
-+
-+	newlen = strlen(name);
-+
-+	err = fdt_splice_struct_(fdt, namep, FDT_TAGALIGN(oldlen+1),
-+				 FDT_TAGALIGN(newlen+1));
-+	if (err)
-+		return err;
-+
-+	memcpy(namep, name, newlen+1);
-+	return 0;
-+}
-+
-+int fdt_setprop_placeholder(void *fdt, int nodeoffset, const char *name,
-+			    int len, void **prop_data)
-+{
-+	struct fdt_property *prop;
-+	int err;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	err = fdt_resize_property_(fdt, nodeoffset, name, len, &prop);
-+	if (err == -FDT_ERR_NOTFOUND)
-+		err = fdt_add_property_(fdt, nodeoffset, name, len, &prop);
-+	if (err)
-+		return err;
-+
-+	*prop_data = prop->data;
-+	return 0;
-+}
-+
-+int fdt_setprop(void *fdt, int nodeoffset, const char *name,
-+		const void *val, int len)
-+{
-+	void *prop_data;
-+	int err;
-+
-+	err = fdt_setprop_placeholder(fdt, nodeoffset, name, len, &prop_data);
-+	if (err)
-+		return err;
-+
-+	if (len)
-+		memcpy(prop_data, val, len);
-+	return 0;
-+}
-+
-+int fdt_appendprop(void *fdt, int nodeoffset, const char *name,
-+		   const void *val, int len)
-+{
-+	struct fdt_property *prop;
-+	int err, oldlen, newlen;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
-+	if (prop) {
-+		newlen = len + oldlen;
-+		err = fdt_splice_struct_(fdt, prop->data,
-+					 FDT_TAGALIGN(oldlen),
-+					 FDT_TAGALIGN(newlen));
-+		if (err)
-+			return err;
-+		prop->len = cpu_to_fdt32(newlen);
-+		memcpy(prop->data + oldlen, val, len);
-+	} else {
-+		err = fdt_add_property_(fdt, nodeoffset, name, len, &prop);
-+		if (err)
-+			return err;
-+		memcpy(prop->data, val, len);
-+	}
-+	return 0;
-+}
-+
-+int fdt_delprop(void *fdt, int nodeoffset, const char *name)
-+{
-+	struct fdt_property *prop;
-+	int len, proplen;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
-+	if (!prop)
-+		return len;
-+
-+	proplen = sizeof(*prop) + FDT_TAGALIGN(len);
-+	return fdt_splice_struct_(fdt, prop, proplen, 0);
-+}
-+
-+int fdt_add_subnode_namelen(void *fdt, int parentoffset,
-+			    const char *name, int namelen)
-+{
-+	struct fdt_node_header *nh;
-+	int offset, nextoffset;
-+	int nodelen;
-+	int err;
-+	uint32_t tag;
-+	fdt32_t *endtag;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	offset = fdt_subnode_offset_namelen(fdt, parentoffset, name, namelen);
-+	if (offset >= 0)
-+		return -FDT_ERR_EXISTS;
-+	else if (offset != -FDT_ERR_NOTFOUND)
-+		return offset;
-+
-+	/* Try to place the new node after the parent's properties */
-+	tag = fdt_next_tag(fdt, parentoffset, &nextoffset);
-+	/* the fdt_subnode_offset_namelen() should ensure this never hits */
-+	if (!can_assume(LIBFDT_FLAWLESS) && (tag != FDT_BEGIN_NODE))
-+		return -FDT_ERR_INTERNAL;
-+	do {
-+		offset = nextoffset;
-+		tag = fdt_next_tag(fdt, offset, &nextoffset);
-+	} while ((tag == FDT_PROP) || (tag == FDT_NOP));
-+
-+	nh = fdt_offset_ptr_w_(fdt, offset);
-+	nodelen = sizeof(*nh) + FDT_TAGALIGN(namelen+1) + FDT_TAGSIZE;
-+
-+	err = fdt_splice_struct_(fdt, nh, 0, nodelen);
-+	if (err)
-+		return err;
-+
-+	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
-+	memset(nh->name, 0, FDT_TAGALIGN(namelen+1));
-+	memcpy(nh->name, name, namelen);
-+	endtag = (fdt32_t *)((char *)nh + nodelen - FDT_TAGSIZE);
-+	*endtag = cpu_to_fdt32(FDT_END_NODE);
-+
-+	return offset;
-+}
-+
-+int fdt_add_subnode(void *fdt, int parentoffset, const char *name)
-+{
-+	return fdt_add_subnode_namelen(fdt, parentoffset, name, strlen(name));
-+}
-+
-+int fdt_del_node(void *fdt, int nodeoffset)
-+{
-+	int endoffset;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	endoffset = fdt_node_end_offset_(fdt, nodeoffset);
-+	if (endoffset < 0)
-+		return endoffset;
-+
-+	return fdt_splice_struct_(fdt, fdt_offset_ptr_w_(fdt, nodeoffset),
-+				  endoffset - nodeoffset, 0);
-+}
-+
-+static void fdt_packblocks_(const char *old, char *new,
-+			    int mem_rsv_size,
-+			    int struct_size,
-+			    int strings_size)
-+{
-+	int mem_rsv_off, struct_off, strings_off;
-+
-+	mem_rsv_off = FDT_ALIGN(sizeof(struct fdt_header), 8);
-+	struct_off = mem_rsv_off + mem_rsv_size;
-+	strings_off = struct_off + struct_size;
-+
-+	memmove(new + mem_rsv_off, old + fdt_off_mem_rsvmap(old), mem_rsv_size);
-+	fdt_set_off_mem_rsvmap(new, mem_rsv_off);
-+
-+	memmove(new + struct_off, old + fdt_off_dt_struct(old), struct_size);
-+	fdt_set_off_dt_struct(new, struct_off);
-+	fdt_set_size_dt_struct(new, struct_size);
-+
-+	memmove(new + strings_off, old + fdt_off_dt_strings(old), strings_size);
-+	fdt_set_off_dt_strings(new, strings_off);
-+	fdt_set_size_dt_strings(new, fdt_size_dt_strings(old));
-+}
-+
-+int fdt_open_into(const void *fdt, void *buf, int bufsize)
-+{
-+	int err;
-+	int mem_rsv_size, struct_size;
-+	int newsize;
-+	const char *fdtstart = fdt;
-+	const char *fdtend = fdtstart + fdt_totalsize(fdt);
-+	char *tmp;
-+
-+	FDT_RO_PROBE(fdt);
-+
-+	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
-+		* sizeof(struct fdt_reserve_entry);
-+
-+	if (can_assume(LATEST) || fdt_version(fdt) >= 17) {
-+		struct_size = fdt_size_dt_struct(fdt);
-+	} else if (fdt_version(fdt) == 16) {
-+		struct_size = 0;
-+		while (fdt_next_tag(fdt, struct_size, &struct_size) != FDT_END)
-+			;
-+		if (struct_size < 0)
-+			return struct_size;
-+	} else {
-+		return -FDT_ERR_BADVERSION;
-+	}
-+
-+	if (can_assume(LIBFDT_ORDER) ||
-+	    !fdt_blocks_misordered_(fdt, mem_rsv_size, struct_size)) {
-+		/* no further work necessary */
-+		err = fdt_move(fdt, buf, bufsize);
-+		if (err)
-+			return err;
-+		fdt_set_version(buf, 17);
-+		fdt_set_size_dt_struct(buf, struct_size);
-+		fdt_set_totalsize(buf, bufsize);
-+		return 0;
-+	}
-+
-+	/* Need to reorder */
-+	newsize = FDT_ALIGN(sizeof(struct fdt_header), 8) + mem_rsv_size
-+		+ struct_size + fdt_size_dt_strings(fdt);
-+
-+	if (bufsize < newsize)
-+		return -FDT_ERR_NOSPACE;
-+
-+	/* First attempt to build converted tree at beginning of buffer */
-+	tmp = buf;
-+	/* But if that overlaps with the old tree... */
-+	if (((tmp + newsize) > fdtstart) && (tmp < fdtend)) {
-+		/* Try right after the old tree instead */
-+		tmp = (char *)(uintptr_t)fdtend;
-+		if ((tmp + newsize) > ((char *)buf + bufsize))
-+			return -FDT_ERR_NOSPACE;
-+	}
-+
-+	fdt_packblocks_(fdt, tmp, mem_rsv_size, struct_size,
-+			fdt_size_dt_strings(fdt));
-+	memmove(buf, tmp, newsize);
-+
-+	fdt_set_magic(buf, FDT_MAGIC);
-+	fdt_set_totalsize(buf, bufsize);
-+	fdt_set_version(buf, 17);
-+	fdt_set_last_comp_version(buf, 16);
-+	fdt_set_boot_cpuid_phys(buf, fdt_boot_cpuid_phys(fdt));
-+
-+	return 0;
-+}
-+
-+int fdt_pack(void *fdt)
-+{
-+	int mem_rsv_size;
-+
-+	FDT_RW_PROBE(fdt);
-+
-+	mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
-+		* sizeof(struct fdt_reserve_entry);
-+	fdt_packblocks_(fdt, fdt, mem_rsv_size, fdt_size_dt_struct(fdt),
-+			fdt_size_dt_strings(fdt));
-+	fdt_set_totalsize(fdt, fdt_data_size_(fdt));
-+
-+	return 0;
-+}
-diff --git a/common/libfdt/fdt_strerror.c b/common/libfdt/fdt_strerror.c
-new file mode 100644
-index 0000000..b435693
---- /dev/null
-+++ b/common/libfdt/fdt_strerror.c
-@@ -0,0 +1,59 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+struct fdt_errtabent {
-+	const char *str;
-+};
-+
-+#define FDT_ERRTABENT(val) \
-+	[(val)] = { .str = #val, }
-+
-+static struct fdt_errtabent fdt_errtable[] = {
-+	FDT_ERRTABENT(FDT_ERR_NOTFOUND),
-+	FDT_ERRTABENT(FDT_ERR_EXISTS),
-+	FDT_ERRTABENT(FDT_ERR_NOSPACE),
-+
-+	FDT_ERRTABENT(FDT_ERR_BADOFFSET),
-+	FDT_ERRTABENT(FDT_ERR_BADPATH),
-+	FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
-+	FDT_ERRTABENT(FDT_ERR_BADSTATE),
-+
-+	FDT_ERRTABENT(FDT_ERR_TRUNCATED),
-+	FDT_ERRTABENT(FDT_ERR_BADMAGIC),
-+	FDT_ERRTABENT(FDT_ERR_BADVERSION),
-+	FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
-+	FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
-+	FDT_ERRTABENT(FDT_ERR_INTERNAL),
-+	FDT_ERRTABENT(FDT_ERR_BADNCELLS),
-+	FDT_ERRTABENT(FDT_ERR_BADVALUE),
-+	FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
-+	FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
-+	FDT_ERRTABENT(FDT_ERR_BADFLAGS),
-+};
-+#define FDT_ERRTABSIZE	((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))
-+
-+const char *fdt_strerror(int errval)
-+{
-+	if (errval > 0)
-+		return "<valid offset/length>";
-+	else if (errval == 0)
-+		return "<no error>";
-+	else if (-errval < FDT_ERRTABSIZE) {
-+		const char *s = fdt_errtable[-errval].str;
-+
-+		if (s)
-+			return s;
-+	}
-+
-+	return "<unknown error>";
-+}
-diff --git a/common/libfdt/fdt_sw.c b/common/libfdt/fdt_sw.c
-new file mode 100644
-index 0000000..4c569ee
---- /dev/null
-+++ b/common/libfdt/fdt_sw.c
-@@ -0,0 +1,384 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+static int fdt_sw_probe_(void *fdt)
-+{
-+	if (!can_assume(VALID_INPUT)) {
-+		if (fdt_magic(fdt) == FDT_MAGIC)
-+			return -FDT_ERR_BADSTATE;
-+		else if (fdt_magic(fdt) != FDT_SW_MAGIC)
-+			return -FDT_ERR_BADMAGIC;
-+	}
-+
-+	return 0;
-+}
-+
-+#define FDT_SW_PROBE(fdt) \
-+	{ \
-+		int err; \
-+		if ((err = fdt_sw_probe_(fdt)) != 0) \
-+			return err; \
-+	}
-+
-+/* 'memrsv' state:	Initial state after fdt_create()
-+ *
-+ * Allowed functions:
-+ *	fdt_add_reservemap_entry()
-+ *	fdt_finish_reservemap()		[moves to 'struct' state]
-+ */
-+static int fdt_sw_probe_memrsv_(void *fdt)
-+{
-+	int err = fdt_sw_probe_(fdt);
-+	if (err)
-+		return err;
-+
-+	if (!can_assume(VALID_INPUT) && fdt_off_dt_strings(fdt) != 0)
-+		return -FDT_ERR_BADSTATE;
-+	return 0;
-+}
-+
-+#define FDT_SW_PROBE_MEMRSV(fdt) \
-+	{ \
-+		int err; \
-+		if ((err = fdt_sw_probe_memrsv_(fdt)) != 0) \
-+			return err; \
-+	}
-+
-+/* 'struct' state:	Enter this state after fdt_finish_reservemap()
-+ *
-+ * Allowed functions:
-+ *	fdt_begin_node()
-+ *	fdt_end_node()
-+ *	fdt_property*()
-+ *	fdt_finish()			[moves to 'complete' state]
-+ */
-+static int fdt_sw_probe_struct_(void *fdt)
-+{
-+	int err = fdt_sw_probe_(fdt);
-+	if (err)
-+		return err;
-+
-+	if (!can_assume(VALID_INPUT) &&
-+	    fdt_off_dt_strings(fdt) != fdt_totalsize(fdt))
-+		return -FDT_ERR_BADSTATE;
-+	return 0;
-+}
-+
-+#define FDT_SW_PROBE_STRUCT(fdt) \
-+	{ \
-+		int err; \
-+		if ((err = fdt_sw_probe_struct_(fdt)) != 0) \
-+			return err; \
-+	}
-+
-+static inline uint32_t sw_flags(void *fdt)
-+{
-+	/* assert: (fdt_magic(fdt) == FDT_SW_MAGIC) */
-+	return fdt_last_comp_version(fdt);
-+}
-+
-+/* 'complete' state:	Enter this state after fdt_finish()
-+ *
-+ * Allowed functions: none
-+ */
-+
-+static void *fdt_grab_space_(void *fdt, size_t len)
-+{
-+	unsigned int offset = fdt_size_dt_struct(fdt);
-+	unsigned int spaceleft;
-+
-+	spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)
-+		- fdt_size_dt_strings(fdt);
-+
-+	if ((offset + len < offset) || (offset + len > spaceleft))
-+		return NULL;
-+
-+	fdt_set_size_dt_struct(fdt, offset + len);
-+	return fdt_offset_ptr_w_(fdt, offset);
-+}
-+
-+int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)
-+{
-+	const int hdrsize = FDT_ALIGN(sizeof(struct fdt_header),
-+				      sizeof(struct fdt_reserve_entry));
-+	void *fdt = buf;
-+
-+	if (bufsize < hdrsize)
-+		return -FDT_ERR_NOSPACE;
-+
-+	if (flags & ~FDT_CREATE_FLAGS_ALL)
-+		return -FDT_ERR_BADFLAGS;
-+
-+	memset(buf, 0, bufsize);
-+
-+	/*
-+	 * magic and last_comp_version keep intermediate state during the fdt
-+	 * creation process, which is replaced with the proper FDT format by
-+	 * fdt_finish().
-+	 *
-+	 * flags should be accessed with sw_flags().
-+	 */
-+	fdt_set_magic(fdt, FDT_SW_MAGIC);
-+	fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
-+	fdt_set_last_comp_version(fdt, flags);
-+
-+	fdt_set_totalsize(fdt,  bufsize);
-+
-+	fdt_set_off_mem_rsvmap(fdt, hdrsize);
-+	fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));
-+	fdt_set_off_dt_strings(fdt, 0);
-+
-+	return 0;
-+}
-+
-+int fdt_create(void *buf, int bufsize)
-+{
-+	return fdt_create_with_flags(buf, bufsize, 0);
-+}
-+
-+int fdt_resize(void *fdt, void *buf, int bufsize)
-+{
-+	size_t headsize, tailsize;
-+	char *oldtail, *newtail;
-+
-+	FDT_SW_PROBE(fdt);
-+
-+	if (bufsize < 0)
-+		return -FDT_ERR_NOSPACE;
-+
-+	headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
-+	tailsize = fdt_size_dt_strings(fdt);
-+
-+	if (!can_assume(VALID_DTB) &&
-+	    headsize + tailsize > fdt_totalsize(fdt))
-+		return -FDT_ERR_INTERNAL;
-+
-+	if ((headsize + tailsize) > (unsigned)bufsize)
-+		return -FDT_ERR_NOSPACE;
-+
-+	oldtail = (char *)fdt + fdt_totalsize(fdt) - tailsize;
-+	newtail = (char *)buf + bufsize - tailsize;
-+
-+	/* Two cases to avoid clobbering data if the old and new
-+	 * buffers partially overlap */
-+	if (buf <= fdt) {
-+		memmove(buf, fdt, headsize);
-+		memmove(newtail, oldtail, tailsize);
-+	} else {
-+		memmove(newtail, oldtail, tailsize);
-+		memmove(buf, fdt, headsize);
-+	}
-+
-+	fdt_set_totalsize(buf, bufsize);
-+	if (fdt_off_dt_strings(buf))
-+		fdt_set_off_dt_strings(buf, bufsize);
-+
-+	return 0;
-+}
-+
-+int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)
-+{
-+	struct fdt_reserve_entry *re;
-+	int offset;
-+
-+	FDT_SW_PROBE_MEMRSV(fdt);
-+
-+	offset = fdt_off_dt_struct(fdt);
-+	if ((offset + sizeof(*re)) > fdt_totalsize(fdt))
-+		return -FDT_ERR_NOSPACE;
-+
-+	re = (struct fdt_reserve_entry *)((char *)fdt + offset);
-+	re->address = cpu_to_fdt64(addr);
-+	re->size = cpu_to_fdt64(size);
-+
-+	fdt_set_off_dt_struct(fdt, offset + sizeof(*re));
-+
-+	return 0;
-+}
-+
-+int fdt_finish_reservemap(void *fdt)
-+{
-+	int err = fdt_add_reservemap_entry(fdt, 0, 0);
-+
-+	if (err)
-+		return err;
-+
-+	fdt_set_off_dt_strings(fdt, fdt_totalsize(fdt));
-+	return 0;
-+}
-+
-+int fdt_begin_node(void *fdt, const char *name)
-+{
-+	struct fdt_node_header *nh;
-+	int namelen;
-+
-+	FDT_SW_PROBE_STRUCT(fdt);
-+
-+	namelen = strlen(name) + 1;
-+	nh = fdt_grab_space_(fdt, sizeof(*nh) + FDT_TAGALIGN(namelen));
-+	if (! nh)
-+		return -FDT_ERR_NOSPACE;
-+
-+	nh->tag = cpu_to_fdt32(FDT_BEGIN_NODE);
-+	memcpy(nh->name, name, namelen);
-+	return 0;
-+}
-+
-+int fdt_end_node(void *fdt)
-+{
-+	fdt32_t *en;
-+
-+	FDT_SW_PROBE_STRUCT(fdt);
-+
-+	en = fdt_grab_space_(fdt, FDT_TAGSIZE);
-+	if (! en)
-+		return -FDT_ERR_NOSPACE;
-+
-+	*en = cpu_to_fdt32(FDT_END_NODE);
-+	return 0;
-+}
-+
-+static int fdt_add_string_(void *fdt, const char *s)
-+{
-+	char *strtab = (char *)fdt + fdt_totalsize(fdt);
-+	unsigned int strtabsize = fdt_size_dt_strings(fdt);
-+	unsigned int len = strlen(s) + 1;
-+	unsigned int struct_top, offset;
-+
-+	offset = strtabsize + len;
-+	struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
-+	if (fdt_totalsize(fdt) - offset < struct_top)
-+		return 0; /* no more room :( */
-+
-+	memcpy(strtab - offset, s, len);
-+	fdt_set_size_dt_strings(fdt, strtabsize + len);
-+	return -offset;
-+}
-+
-+/* Must only be used to roll back in case of error */
-+static void fdt_del_last_string_(void *fdt, const char *s)
-+{
-+	int strtabsize = fdt_size_dt_strings(fdt);
-+	int len = strlen(s) + 1;
-+
-+	fdt_set_size_dt_strings(fdt, strtabsize - len);
-+}
-+
-+static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)
-+{
-+	char *strtab = (char *)fdt + fdt_totalsize(fdt);
-+	int strtabsize = fdt_size_dt_strings(fdt);
-+	const char *p;
-+
-+	*allocated = 0;
-+
-+	p = fdt_find_string_(strtab - strtabsize, strtabsize, s);
-+	if (p)
-+		return p - strtab;
-+
-+	*allocated = 1;
-+
-+	return fdt_add_string_(fdt, s);
-+}
-+
-+int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp)
-+{
-+	struct fdt_property *prop;
-+	int nameoff;
-+	int allocated;
-+
-+	FDT_SW_PROBE_STRUCT(fdt);
-+
-+	/* String de-duplication can be slow, _NO_NAME_DEDUP skips it */
-+	if (sw_flags(fdt) & FDT_CREATE_FLAG_NO_NAME_DEDUP) {
-+		allocated = 1;
-+		nameoff = fdt_add_string_(fdt, name);
-+	} else {
-+		nameoff = fdt_find_add_string_(fdt, name, &allocated);
-+	}
-+	if (nameoff == 0)
-+		return -FDT_ERR_NOSPACE;
-+
-+	prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len));
-+	if (! prop) {
-+		if (allocated)
-+			fdt_del_last_string_(fdt, name);
-+		return -FDT_ERR_NOSPACE;
-+	}
-+
-+	prop->tag = cpu_to_fdt32(FDT_PROP);
-+	prop->nameoff = cpu_to_fdt32(nameoff);
-+	prop->len = cpu_to_fdt32(len);
-+	*valp = prop->data;
-+	return 0;
-+}
-+
-+int fdt_property(void *fdt, const char *name, const void *val, int len)
-+{
-+	void *ptr;
-+	int ret;
-+
-+	ret = fdt_property_placeholder(fdt, name, len, &ptr);
-+	if (ret)
-+		return ret;
-+	memcpy(ptr, val, len);
-+	return 0;
-+}
-+
-+int fdt_finish(void *fdt)
-+{
-+	char *p = (char *)fdt;
-+	fdt32_t *end;
-+	int oldstroffset, newstroffset;
-+	uint32_t tag;
-+	int offset, nextoffset;
-+
-+	FDT_SW_PROBE_STRUCT(fdt);
-+
-+	/* Add terminator */
-+	end = fdt_grab_space_(fdt, sizeof(*end));
-+	if (! end)
-+		return -FDT_ERR_NOSPACE;
-+	*end = cpu_to_fdt32(FDT_END);
-+
-+	/* Relocate the string table */
-+	oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);
-+	newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
-+	memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));
-+	fdt_set_off_dt_strings(fdt, newstroffset);
-+
-+	/* Walk the structure, correcting string offsets */
-+	offset = 0;
-+	while ((tag = fdt_next_tag(fdt, offset, &nextoffset)) != FDT_END) {
-+		if (tag == FDT_PROP) {
-+			struct fdt_property *prop =
-+				fdt_offset_ptr_w_(fdt, offset);
-+			int nameoff;
-+
-+			nameoff = fdt32_to_cpu(prop->nameoff);
-+			nameoff += fdt_size_dt_strings(fdt);
-+			prop->nameoff = cpu_to_fdt32(nameoff);
-+		}
-+		offset = nextoffset;
-+	}
-+	if (nextoffset < 0)
-+		return nextoffset;
-+
-+	/* Finally, adjust the header */
-+	fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
-+
-+	/* And fix up fields that were keeping intermediate state. */
-+	fdt_set_last_comp_version(fdt, FDT_LAST_COMPATIBLE_VERSION);
-+	fdt_set_magic(fdt, FDT_MAGIC);
-+
-+	return 0;
-+}
-diff --git a/common/libfdt/fdt_wip.c b/common/libfdt/fdt_wip.c
-new file mode 100644
-index 0000000..c2d7566
---- /dev/null
-+++ b/common/libfdt/fdt_wip.c
-@@ -0,0 +1,94 @@
-+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include "libfdt_env.h"
-+
-+#include <fdt.h>
-+#include <libfdt.h>
-+
-+#include "libfdt_internal.h"
-+
-+int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
-+					const char *name, int namelen,
-+					uint32_t idx, const void *val,
-+					int len)
-+{
-+	void *propval;
-+	int proplen;
-+
-+	propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen,
-+					&proplen);
-+	if (!propval)
-+		return proplen;
-+
-+	if ((unsigned)proplen < (len + idx))
-+		return -FDT_ERR_NOSPACE;
-+
-+	memcpy((char *)propval + idx, val, len);
-+	return 0;
-+}
-+
-+int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
-+			const void *val, int len)
-+{
-+	const void *propval;
-+	int proplen;
-+
-+	propval = fdt_getprop(fdt, nodeoffset, name, &proplen);
-+	if (!propval)
-+		return proplen;
-+
-+	if (proplen != len)
-+		return -FDT_ERR_NOSPACE;
-+
-+	return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name,
-+						   strlen(name), 0,
-+						   val, len);
-+}
-+
-+static void fdt_nop_region_(void *start, int len)
-+{
-+	fdt32_t *p;
-+
-+	for (p = start; (char *)p < ((char *)start + len); p++)
-+		*p = cpu_to_fdt32(FDT_NOP);
-+}
-+
-+int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
-+{
-+	struct fdt_property *prop;
-+	int len;
-+
-+	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
-+	if (!prop)
-+		return len;
-+
-+	fdt_nop_region_(prop, len + sizeof(*prop));
-+
-+	return 0;
-+}
-+
-+int fdt_node_end_offset_(void *fdt, int offset)
-+{
-+	int depth = 0;
-+
-+	while ((offset >= 0) && (depth >= 0))
-+		offset = fdt_next_node(fdt, offset, &depth);
-+
-+	return offset;
-+}
-+
-+int fdt_nop_node(void *fdt, int nodeoffset)
-+{
-+	int endoffset;
-+
-+	endoffset = fdt_node_end_offset_(fdt, nodeoffset);
-+	if (endoffset < 0)
-+		return endoffset;
-+
-+	fdt_nop_region_(fdt_offset_ptr_w(fdt, nodeoffset, 0),
-+			endoffset - nodeoffset);
-+	return 0;
-+}
-diff --git a/common/libfdt/libfdt_internal.h b/common/libfdt/libfdt_internal.h
-new file mode 100644
-index 0000000..16bda19
---- /dev/null
-+++ b/common/libfdt/libfdt_internal.h
-@@ -0,0 +1,192 @@
-+/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
-+#ifndef LIBFDT_INTERNAL_H
-+#define LIBFDT_INTERNAL_H
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+#include <fdt.h>
-+
-+#define FDT_ALIGN(x, a)		(((x) + (a) - 1) & ~((a) - 1))
-+#define FDT_TAGALIGN(x)		(FDT_ALIGN((x), FDT_TAGSIZE))
-+
-+int32_t fdt_ro_probe_(const void *fdt);
-+#define FDT_RO_PROBE(fdt)					\
-+	{							\
-+		int32_t totalsize_;				\
-+		if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
-+			return totalsize_;			\
-+	}
-+
-+int fdt_check_node_offset_(const void *fdt, int offset);
-+int fdt_check_prop_offset_(const void *fdt, int offset);
-+const char *fdt_find_string_(const char *strtab, int tabsize, const char *s);
-+int fdt_node_end_offset_(void *fdt, int nodeoffset);
-+
-+static inline const void *fdt_offset_ptr_(const void *fdt, int offset)
-+{
-+	return (const char *)fdt + fdt_off_dt_struct(fdt) + offset;
-+}
-+
-+static inline void *fdt_offset_ptr_w_(void *fdt, int offset)
-+{
-+	return (void *)(uintptr_t)fdt_offset_ptr_(fdt, offset);
-+}
-+
-+static inline const struct fdt_reserve_entry *fdt_mem_rsv_(const void *fdt, int n)
-+{
-+	const struct fdt_reserve_entry *rsv_table =
-+		(const struct fdt_reserve_entry *)
-+		((const char *)fdt + fdt_off_mem_rsvmap(fdt));
-+
-+	return rsv_table + n;
-+}
-+static inline struct fdt_reserve_entry *fdt_mem_rsv_w_(void *fdt, int n)
-+{
-+	return (void *)(uintptr_t)fdt_mem_rsv_(fdt, n);
-+}
-+
-+/*
-+ * Internal helpers to access tructural elements of the device tree
-+ * blob (rather than for exaple reading integers from within property
-+ * values).  We assume that we are either given a naturally aligned
-+ * address for the platform or if we are not, we are on a platform
-+ * where unaligned memory reads will be handled in a graceful manner.
-+ * If not the external helpers fdtXX_ld() from libfdt.h can be used
-+ * instead.
-+ */
-+static inline uint32_t fdt32_ld_(const fdt32_t *p)
-+{
-+	return fdt32_to_cpu(*p);
-+}
-+
-+static inline uint64_t fdt64_ld_(const fdt64_t *p)
-+{
-+	return fdt64_to_cpu(*p);
-+}
-+
-+#define FDT_SW_MAGIC		(~FDT_MAGIC)
-+
-+/**********************************************************************/
-+/* Checking controls                                                  */
-+/**********************************************************************/
-+
-+#ifndef FDT_ASSUME_MASK
-+#define FDT_ASSUME_MASK 0
-+#endif
-+
-+/*
-+ * Defines assumptions which can be enabled. Each of these can be enabled
-+ * individually. For maximum safety, don't enable any assumptions!
-+ *
-+ * For minimal code size and no safety, use ASSUME_PERFECT at your own risk.
-+ * You should have another method of validating the device tree, such as a
-+ * signature or hash check before using libfdt.
-+ *
-+ * For situations where security is not a concern it may be safe to enable
-+ * ASSUME_SANE.
-+ */
-+enum {
-+	/*
-+	 * This does essentially no checks. Only the latest device-tree
-+	 * version is correctly handled. Inconsistencies or errors in the device
-+	 * tree may cause undefined behaviour or crashes. Invalid parameters
-+	 * passed to libfdt may do the same.
-+	 *
-+	 * If an error occurs when modifying the tree it may leave the tree in
-+	 * an intermediate (but valid) state. As an example, adding a property
-+	 * where there is insufficient space may result in the property name
-+	 * being added to the string table even though the property itself is
-+	 * not added to the struct section.
-+	 *
-+	 * Only use this if you have a fully validated device tree with
-+	 * the latest supported version and wish to minimise code size.
-+	 */
-+	ASSUME_PERFECT		= 0xff,
-+
-+	/*
-+	 * This assumes that the device tree is sane. i.e. header metadata
-+	 * and basic hierarchy are correct.
-+	 *
-+	 * With this assumption enabled, normal device trees produced by libfdt
-+	 * and the compiler should be handled safely. Malicious device trees and
-+	 * complete garbage may cause libfdt to behave badly or crash. Truncated
-+	 * device trees (e.g. those only partially loaded) can also cause
-+	 * problems.
-+	 *
-+	 * Note: Only checks that relate exclusively to the device tree itself
-+	 * (not the parameters passed to libfdt) are disabled by this
-+	 * assumption. This includes checking headers, tags and the like.
-+	 */
-+	ASSUME_VALID_DTB	= 1 << 0,
-+
-+	/*
-+	 * This builds on ASSUME_VALID_DTB and further assumes that libfdt
-+	 * functions are called with valid parameters, i.e. not trigger
-+	 * FDT_ERR_BADOFFSET or offsets that are out of bounds. It disables any
-+	 * extensive checking of parameters and the device tree, making various
-+	 * assumptions about correctness.
-+	 *
-+	 * It doesn't make sense to enable this assumption unless
-+	 * ASSUME_VALID_DTB is also enabled.
-+	 */
-+	ASSUME_VALID_INPUT	= 1 << 1,
-+
-+	/*
-+	 * This disables checks for device-tree version and removes all code
-+	 * which handles older versions.
-+	 *
-+	 * Only enable this if you know you have a device tree with the latest
-+	 * version.
-+	 */
-+	ASSUME_LATEST		= 1 << 2,
-+
-+	/*
-+	 * This assumes that it is OK for a failed addition to the device tree,
-+	 * due to lack of space or some other problem, to skip any rollback
-+	 * steps (such as dropping the property name from the string table).
-+	 * This is safe to enable in most circumstances, even though it may
-+	 * leave the tree in a sub-optimal state.
-+	 */
-+	ASSUME_NO_ROLLBACK	= 1 << 3,
-+
-+	/*
-+	 * This assumes that the device tree components appear in a 'convenient'
-+	 * order, i.e. the memory reservation block first, then the structure
-+	 * block and finally the string block.
-+	 *
-+	 * This order is not specified by the device-tree specification,
-+	 * but is expected by libfdt. The device-tree compiler always created
-+	 * device trees with this order.
-+	 *
-+	 * This assumption disables a check in fdt_open_into() and removes the
-+	 * ability to fix the problem there. This is safe if you know that the
-+	 * device tree is correctly ordered. See fdt_blocks_misordered_().
-+	 */
-+	ASSUME_LIBFDT_ORDER	= 1 << 4,
-+
-+	/*
-+	 * This assumes that libfdt itself does not have any internal bugs. It
-+	 * drops certain checks that should never be needed unless libfdt has an
-+	 * undiscovered bug.
-+	 *
-+	 * This can generally be considered safe to enable.
-+	 */
-+	ASSUME_LIBFDT_FLAWLESS	= 1 << 5,
-+};
-+
-+/**
-+ * can_assume_() - check if a particular assumption is enabled
-+ *
-+ * @mask: Mask to check (ASSUME_...)
-+ * @return true if that assumption is enabled, else false
-+ */
-+static inline bool can_assume_(int mask)
-+{
-+	return FDT_ASSUME_MASK & mask;
-+}
-+
-+/** helper macros for checking assumptions */
-+#define can_assume(_assume)	can_assume_(ASSUME_ ## _assume)
-+
-+#endif /* LIBFDT_INTERNAL_H */
-diff --git a/include/fdt.h b/include/fdt.h
-new file mode 100644
-index 0000000..f2e6880
---- /dev/null
-+++ b/include/fdt.h
-@@ -0,0 +1,66 @@
-+/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
-+#ifndef FDT_H
-+#define FDT_H
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ * Copyright 2012 Kim Phillips, Freescale Semiconductor.
-+ */
-+
-+#ifndef __ASSEMBLY__
-+
-+struct fdt_header {
-+	fdt32_t magic;			 /* magic word FDT_MAGIC */
-+	fdt32_t totalsize;		 /* total size of DT block */
-+	fdt32_t off_dt_struct;		 /* offset to structure */
-+	fdt32_t off_dt_strings;		 /* offset to strings */
-+	fdt32_t off_mem_rsvmap;		 /* offset to memory reserve map */
-+	fdt32_t version;		 /* format version */
-+	fdt32_t last_comp_version;	 /* last compatible version */
-+
-+	/* version 2 fields below */
-+	fdt32_t boot_cpuid_phys;	 /* Which physical CPU id we're
-+					    booting on */
-+	/* version 3 fields below */
-+	fdt32_t size_dt_strings;	 /* size of the strings block */
-+
-+	/* version 17 fields below */
-+	fdt32_t size_dt_struct;		 /* size of the structure block */
-+};
-+
-+struct fdt_reserve_entry {
-+	fdt64_t address;
-+	fdt64_t size;
-+};
-+
-+struct fdt_node_header {
-+	fdt32_t tag;
-+	char name[0];
-+};
-+
-+struct fdt_property {
-+	fdt32_t tag;
-+	fdt32_t len;
-+	fdt32_t nameoff;
-+	char data[0];
-+};
-+
-+#endif /* !__ASSEMBLY */
-+
-+#define FDT_MAGIC	0xd00dfeed	/* 4: version, 4: total size */
-+#define FDT_TAGSIZE	sizeof(fdt32_t)
-+
-+#define FDT_BEGIN_NODE	0x1		/* Start node: full name */
-+#define FDT_END_NODE	0x2		/* End node */
-+#define FDT_PROP	0x3		/* Property: name off,
-+					   size, content */
-+#define FDT_NOP		0x4		/* nop */
-+#define FDT_END		0x9
-+
-+#define FDT_V1_SIZE	(7*sizeof(fdt32_t))
-+#define FDT_V2_SIZE	(FDT_V1_SIZE + sizeof(fdt32_t))
-+#define FDT_V3_SIZE	(FDT_V2_SIZE + sizeof(fdt32_t))
-+#define FDT_V16_SIZE	FDT_V3_SIZE
-+#define FDT_V17_SIZE	(FDT_V16_SIZE + sizeof(fdt32_t))
-+
-+#endif /* FDT_H */
-diff --git a/include/libfdt.h b/include/libfdt.h
-new file mode 100644
-index 0000000..a7f432c
---- /dev/null
-+++ b/include/libfdt.h
-@@ -0,0 +1,2147 @@
-+/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
-+#ifndef LIBFDT_H
-+#define LIBFDT_H
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ */
-+
-+#include <libfdt_env.h>
-+#include <fdt.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#define FDT_FIRST_SUPPORTED_VERSION	0x02
-+#define FDT_LAST_COMPATIBLE_VERSION 0x10
-+#define FDT_LAST_SUPPORTED_VERSION	0x11
-+
-+/* Error codes: informative error codes */
-+#define FDT_ERR_NOTFOUND	1
-+	/* FDT_ERR_NOTFOUND: The requested node or property does not exist */
-+#define FDT_ERR_EXISTS		2
-+	/* FDT_ERR_EXISTS: Attempted to create a node or property which
-+	 * already exists */
-+#define FDT_ERR_NOSPACE		3
-+	/* FDT_ERR_NOSPACE: Operation needed to expand the device
-+	 * tree, but its buffer did not have sufficient space to
-+	 * contain the expanded tree. Use fdt_open_into() to move the
-+	 * device tree to a buffer with more space. */
-+
-+/* Error codes: codes for bad parameters */
-+#define FDT_ERR_BADOFFSET	4
-+	/* FDT_ERR_BADOFFSET: Function was passed a structure block
-+	 * offset which is out-of-bounds, or which points to an
-+	 * unsuitable part of the structure for the operation. */
-+#define FDT_ERR_BADPATH		5
-+	/* FDT_ERR_BADPATH: Function was passed a badly formatted path
-+	 * (e.g. missing a leading / for a function which requires an
-+	 * absolute path) */
-+#define FDT_ERR_BADPHANDLE	6
-+	/* FDT_ERR_BADPHANDLE: Function was passed an invalid phandle.
-+	 * This can be caused either by an invalid phandle property
-+	 * length, or the phandle value was either 0 or -1, which are
-+	 * not permitted. */
-+#define FDT_ERR_BADSTATE	7
-+	/* FDT_ERR_BADSTATE: Function was passed an incomplete device
-+	 * tree created by the sequential-write functions, which is
-+	 * not sufficiently complete for the requested operation. */
-+
-+/* Error codes: codes for bad device tree blobs */
-+#define FDT_ERR_TRUNCATED	8
-+	/* FDT_ERR_TRUNCATED: FDT or a sub-block is improperly
-+	 * terminated (overflows, goes outside allowed bounds, or
-+	 * isn't properly terminated).  */
-+#define FDT_ERR_BADMAGIC	9
-+	/* FDT_ERR_BADMAGIC: Given "device tree" appears not to be a
-+	 * device tree at all - it is missing the flattened device
-+	 * tree magic number. */
-+#define FDT_ERR_BADVERSION	10
-+	/* FDT_ERR_BADVERSION: Given device tree has a version which
-+	 * can't be handled by the requested operation.  For
-+	 * read-write functions, this may mean that fdt_open_into() is
-+	 * required to convert the tree to the expected version. */
-+#define FDT_ERR_BADSTRUCTURE	11
-+	/* FDT_ERR_BADSTRUCTURE: Given device tree has a corrupt
-+	 * structure block or other serious error (e.g. misnested
-+	 * nodes, or subnodes preceding properties). */
-+#define FDT_ERR_BADLAYOUT	12
-+	/* FDT_ERR_BADLAYOUT: For read-write functions, the given
-+	 * device tree has it's sub-blocks in an order that the
-+	 * function can't handle (memory reserve map, then structure,
-+	 * then strings).  Use fdt_open_into() to reorganize the tree
-+	 * into a form suitable for the read-write operations. */
-+
-+/* "Can't happen" error indicating a bug in libfdt */
-+#define FDT_ERR_INTERNAL	13
-+	/* FDT_ERR_INTERNAL: libfdt has failed an internal assertion.
-+	 * Should never be returned, if it is, it indicates a bug in
-+	 * libfdt itself. */
-+
-+/* Errors in device tree content */
-+#define FDT_ERR_BADNCELLS	14
-+	/* FDT_ERR_BADNCELLS: Device tree has a #address-cells, #size-cells
-+	 * or similar property with a bad format or value */
-+
-+#define FDT_ERR_BADVALUE	15
-+	/* FDT_ERR_BADVALUE: Device tree has a property with an unexpected
-+	 * value. For example: a property expected to contain a string list
-+	 * is not NUL-terminated within the length of its value. */
-+
-+#define FDT_ERR_BADOVERLAY	16
-+	/* FDT_ERR_BADOVERLAY: The device tree overlay, while
-+	 * correctly structured, cannot be applied due to some
-+	 * unexpected or missing value, property or node. */
-+
-+#define FDT_ERR_NOPHANDLES	17
-+	/* FDT_ERR_NOPHANDLES: The device tree doesn't have any
-+	 * phandle available anymore without causing an overflow */
-+
-+#define FDT_ERR_BADFLAGS	18
-+	/* FDT_ERR_BADFLAGS: The function was passed a flags field that
-+	 * contains invalid flags or an invalid combination of flags. */
-+
-+#define FDT_ERR_ALIGNMENT	19
-+	/* FDT_ERR_ALIGNMENT: The device tree base address is not 8-byte
-+	 * aligned. */
-+
-+#define FDT_ERR_MAX		19
-+
-+/* constants */
-+#define FDT_MAX_PHANDLE 0xfffffffe
-+	/* Valid values for phandles range from 1 to 2^32-2. */
-+
-+/**********************************************************************/
-+/* Low-level functions (you probably don't need these)                */
-+/**********************************************************************/
-+
-+#ifndef SWIG /* This function is not useful in Python */
-+const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int checklen);
-+#endif
-+static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)
-+{
-+	return (void *)(uintptr_t)fdt_offset_ptr(fdt, offset, checklen);
-+}
-+
-+uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
-+
-+/*
-+ * External helpers to access words from a device tree blob. They're built
-+ * to work even with unaligned pointers on platforms (such as ARMv5) that don't
-+ * like unaligned loads and stores.
-+ */
-+static inline uint16_t fdt16_ld(const fdt16_t *p)
-+{
-+	const uint8_t *bp = (const uint8_t *)p;
-+
-+	return ((uint16_t)bp[0] << 8) | bp[1];
-+}
-+
-+static inline uint32_t fdt32_ld(const fdt32_t *p)
-+{
-+	const uint8_t *bp = (const uint8_t *)p;
-+
-+	return ((uint32_t)bp[0] << 24)
-+		| ((uint32_t)bp[1] << 16)
-+		| ((uint32_t)bp[2] << 8)
-+		| bp[3];
-+}
-+
-+static inline void fdt32_st(void *property, uint32_t value)
-+{
-+	uint8_t *bp = (uint8_t *)property;
-+
-+	bp[0] = value >> 24;
-+	bp[1] = (value >> 16) & 0xff;
-+	bp[2] = (value >> 8) & 0xff;
-+	bp[3] = value & 0xff;
-+}
-+
-+static inline uint64_t fdt64_ld(const fdt64_t *p)
-+{
-+	const uint8_t *bp = (const uint8_t *)p;
-+
-+	return ((uint64_t)bp[0] << 56)
-+		| ((uint64_t)bp[1] << 48)
-+		| ((uint64_t)bp[2] << 40)
-+		| ((uint64_t)bp[3] << 32)
-+		| ((uint64_t)bp[4] << 24)
-+		| ((uint64_t)bp[5] << 16)
-+		| ((uint64_t)bp[6] << 8)
-+		| bp[7];
-+}
-+
-+static inline void fdt64_st(void *property, uint64_t value)
-+{
-+	uint8_t *bp = (uint8_t *)property;
-+
-+	bp[0] = value >> 56;
-+	bp[1] = (value >> 48) & 0xff;
-+	bp[2] = (value >> 40) & 0xff;
-+	bp[3] = (value >> 32) & 0xff;
-+	bp[4] = (value >> 24) & 0xff;
-+	bp[5] = (value >> 16) & 0xff;
-+	bp[6] = (value >> 8) & 0xff;
-+	bp[7] = value & 0xff;
-+}
-+
-+/**********************************************************************/
-+/* Traversal functions                                                */
-+/**********************************************************************/
-+
-+int fdt_next_node(const void *fdt, int offset, int *depth);
-+
-+/**
-+ * fdt_first_subnode() - get offset of first direct subnode
-+ * @fdt:	FDT blob
-+ * @offset:	Offset of node to check
-+ *
-+ * Return: offset of first subnode, or -FDT_ERR_NOTFOUND if there is none
-+ */
-+int fdt_first_subnode(const void *fdt, int offset);
-+
-+/**
-+ * fdt_next_subnode() - get offset of next direct subnode
-+ * @fdt:	FDT blob
-+ * @offset:	Offset of previous subnode
-+ *
-+ * After first calling fdt_first_subnode(), call this function repeatedly to
-+ * get direct subnodes of a parent node.
-+ *
-+ * Return: offset of next subnode, or -FDT_ERR_NOTFOUND if there are no more
-+ *         subnodes
-+ */
-+int fdt_next_subnode(const void *fdt, int offset);
-+
-+/**
-+ * fdt_for_each_subnode - iterate over all subnodes of a parent
-+ *
-+ * @node:	child node (int, lvalue)
-+ * @fdt:	FDT blob (const void *)
-+ * @parent:	parent node (int)
-+ *
-+ * This is actually a wrapper around a for loop and would be used like so:
-+ *
-+ *	fdt_for_each_subnode(node, fdt, parent) {
-+ *		Use node
-+ *		...
-+ *	}
-+ *
-+ *	if ((node < 0) && (node != -FDT_ERR_NOTFOUND)) {
-+ *		Error handling
-+ *	}
-+ *
-+ * Note that this is implemented as a macro and @node is used as
-+ * iterator in the loop. The parent variable be constant or even a
-+ * literal.
-+ */
-+#define fdt_for_each_subnode(node, fdt, parent)		\
-+	for (node = fdt_first_subnode(fdt, parent);	\
-+	     node >= 0;					\
-+	     node = fdt_next_subnode(fdt, node))
-+
-+/**********************************************************************/
-+/* General functions                                                  */
-+/**********************************************************************/
-+#define fdt_get_header(fdt, field) \
-+	(fdt32_ld(&((const struct fdt_header *)(fdt))->field))
-+#define fdt_magic(fdt)			(fdt_get_header(fdt, magic))
-+#define fdt_totalsize(fdt)		(fdt_get_header(fdt, totalsize))
-+#define fdt_off_dt_struct(fdt)		(fdt_get_header(fdt, off_dt_struct))
-+#define fdt_off_dt_strings(fdt)		(fdt_get_header(fdt, off_dt_strings))
-+#define fdt_off_mem_rsvmap(fdt)		(fdt_get_header(fdt, off_mem_rsvmap))
-+#define fdt_version(fdt)		(fdt_get_header(fdt, version))
-+#define fdt_last_comp_version(fdt)	(fdt_get_header(fdt, last_comp_version))
-+#define fdt_boot_cpuid_phys(fdt)	(fdt_get_header(fdt, boot_cpuid_phys))
-+#define fdt_size_dt_strings(fdt)	(fdt_get_header(fdt, size_dt_strings))
-+#define fdt_size_dt_struct(fdt)		(fdt_get_header(fdt, size_dt_struct))
-+
-+#define fdt_set_hdr_(name) \
-+	static inline void fdt_set_##name(void *fdt, uint32_t val) \
-+	{ \
-+		struct fdt_header *fdth = (struct fdt_header *)fdt; \
-+		fdth->name = cpu_to_fdt32(val); \
-+	}
-+fdt_set_hdr_(magic);
-+fdt_set_hdr_(totalsize);
-+fdt_set_hdr_(off_dt_struct);
-+fdt_set_hdr_(off_dt_strings);
-+fdt_set_hdr_(off_mem_rsvmap);
-+fdt_set_hdr_(version);
-+fdt_set_hdr_(last_comp_version);
-+fdt_set_hdr_(boot_cpuid_phys);
-+fdt_set_hdr_(size_dt_strings);
-+fdt_set_hdr_(size_dt_struct);
-+#undef fdt_set_hdr_
-+
-+/**
-+ * fdt_header_size - return the size of the tree's header
-+ * @fdt: pointer to a flattened device tree
-+ *
-+ * Return: size of DTB header in bytes
-+ */
-+size_t fdt_header_size(const void *fdt);
-+
-+/**
-+ * fdt_header_size_ - internal function to get header size from a version number
-+ * @version: devicetree version number
-+ *
-+ * Return: size of DTB header in bytes
-+ */
-+size_t fdt_header_size_(uint32_t version);
-+
-+/**
-+ * fdt_check_header - sanity check a device tree header
-+ * @fdt: pointer to data which might be a flattened device tree
-+ *
-+ * fdt_check_header() checks that the given buffer contains what
-+ * appears to be a flattened device tree, and that the header contains
-+ * valid information (to the extent that can be determined from the
-+ * header alone).
-+ *
-+ * returns:
-+ *     0, if the buffer appears to contain a valid device tree
-+ *     -FDT_ERR_BADMAGIC,
-+ *     -FDT_ERR_BADVERSION,
-+ *     -FDT_ERR_BADSTATE,
-+ *     -FDT_ERR_TRUNCATED, standard meanings, as above
-+ */
-+int fdt_check_header(const void *fdt);
-+
-+/**
-+ * fdt_move - move a device tree around in memory
-+ * @fdt: pointer to the device tree to move
-+ * @buf: pointer to memory where the device is to be moved
-+ * @bufsize: size of the memory space at buf
-+ *
-+ * fdt_move() relocates, if possible, the device tree blob located at
-+ * fdt to the buffer at buf of size bufsize.  The buffer may overlap
-+ * with the existing device tree blob at fdt.  Therefore,
-+ *     fdt_move(fdt, fdt, fdt_totalsize(fdt))
-+ * should always succeed.
-+ *
-+ * returns:
-+ *     0, on success
-+ *     -FDT_ERR_NOSPACE, bufsize is insufficient to contain the device tree
-+ *     -FDT_ERR_BADMAGIC,
-+ *     -FDT_ERR_BADVERSION,
-+ *     -FDT_ERR_BADSTATE, standard meanings
-+ */
-+int fdt_move(const void *fdt, void *buf, int bufsize);
-+
-+/**********************************************************************/
-+/* Read-only functions                                                */
-+/**********************************************************************/
-+
-+int fdt_check_full(const void *fdt, size_t bufsize);
-+
-+/**
-+ * fdt_get_string - retrieve a string from the strings block of a device tree
-+ * @fdt: pointer to the device tree blob
-+ * @stroffset: offset of the string within the strings block (native endian)
-+ * @lenp: optional pointer to return the string's length
-+ *
-+ * fdt_get_string() retrieves a pointer to a single string from the
-+ * strings block of the device tree blob at fdt, and optionally also
-+ * returns the string's length in *lenp.
-+ *
-+ * returns:
-+ *     a pointer to the string, on success
-+ *     NULL, if stroffset is out of bounds, or doesn't point to a valid string
-+ */
-+const char *fdt_get_string(const void *fdt, int stroffset, int *lenp);
-+
-+/**
-+ * fdt_string - retrieve a string from the strings block of a device tree
-+ * @fdt: pointer to the device tree blob
-+ * @stroffset: offset of the string within the strings block (native endian)
-+ *
-+ * fdt_string() retrieves a pointer to a single string from the
-+ * strings block of the device tree blob at fdt.
-+ *
-+ * returns:
-+ *     a pointer to the string, on success
-+ *     NULL, if stroffset is out of bounds, or doesn't point to a valid string
-+ */
-+const char *fdt_string(const void *fdt, int stroffset);
-+
-+/**
-+ * fdt_find_max_phandle - find and return the highest phandle in a tree
-+ * @fdt: pointer to the device tree blob
-+ * @phandle: return location for the highest phandle value found in the tree
-+ *
-+ * fdt_find_max_phandle() finds the highest phandle value in the given device
-+ * tree. The value returned in @phandle is only valid if the function returns
-+ * success.
-+ *
-+ * returns:
-+ *     0 on success or a negative error code on failure
-+ */
-+int fdt_find_max_phandle(const void *fdt, uint32_t *phandle);
-+
-+/**
-+ * fdt_get_max_phandle - retrieves the highest phandle in a tree
-+ * @fdt: pointer to the device tree blob
-+ *
-+ * fdt_get_max_phandle retrieves the highest phandle in the given
-+ * device tree. This will ignore badly formatted phandles, or phandles
-+ * with a value of 0 or -1.
-+ *
-+ * This function is deprecated in favour of fdt_find_max_phandle().
-+ *
-+ * returns:
-+ *      the highest phandle on success
-+ *      0, if no phandle was found in the device tree
-+ *      -1, if an error occurred
-+ */
-+static inline uint32_t fdt_get_max_phandle(const void *fdt)
-+{
-+	uint32_t phandle;
-+	int err;
-+
-+	err = fdt_find_max_phandle(fdt, &phandle);
-+	if (err < 0)
-+		return (uint32_t)-1;
-+
-+	return phandle;
-+}
-+
-+/**
-+ * fdt_generate_phandle - return a new, unused phandle for a device tree blob
-+ * @fdt: pointer to the device tree blob
-+ * @phandle: return location for the new phandle
-+ *
-+ * Walks the device tree blob and looks for the highest phandle value. On
-+ * success, the new, unused phandle value (one higher than the previously
-+ * highest phandle value in the device tree blob) will be returned in the
-+ * @phandle parameter.
-+ *
-+ * Return: 0 on success or a negative error-code on failure
-+ */
-+int fdt_generate_phandle(const void *fdt, uint32_t *phandle);
-+
-+/**
-+ * fdt_num_mem_rsv - retrieve the number of memory reserve map entries
-+ * @fdt: pointer to the device tree blob
-+ *
-+ * Returns the number of entries in the device tree blob's memory
-+ * reservation map.  This does not include the terminating 0,0 entry
-+ * or any other (0,0) entries reserved for expansion.
-+ *
-+ * returns:
-+ *     the number of entries
-+ */
-+int fdt_num_mem_rsv(const void *fdt);
-+
-+/**
-+ * fdt_get_mem_rsv - retrieve one memory reserve map entry
-+ * @fdt: pointer to the device tree blob
-+ * @n: index of reserve map entry
-+ * @address: pointer to 64-bit variable to hold the start address
-+ * @size: pointer to 64-bit variable to hold the size of the entry
-+ *
-+ * On success, @address and @size will contain the address and size of
-+ * the n-th reserve map entry from the device tree blob, in
-+ * native-endian format.
-+ *
-+ * returns:
-+ *     0, on success
-+ *     -FDT_ERR_BADMAGIC,
-+ *     -FDT_ERR_BADVERSION,
-+ *     -FDT_ERR_BADSTATE, standard meanings
-+ */
-+int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size);
-+
-+/**
-+ * fdt_subnode_offset_namelen - find a subnode based on substring
-+ * @fdt: pointer to the device tree blob
-+ * @parentoffset: structure block offset of a node
-+ * @name: name of the subnode to locate
-+ * @namelen: number of characters of name to consider
-+ *
-+ * Identical to fdt_subnode_offset(), but only examine the first
-+ * namelen characters of name for matching the subnode name.  This is
-+ * useful for finding subnodes based on a portion of a larger string,
-+ * such as a full path.
-+ *
-+ * Return: offset of the subnode or -FDT_ERR_NOTFOUND if name not found.
-+ */
-+#ifndef SWIG /* Not available in Python */
-+int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,
-+			       const char *name, int namelen);
-+#endif
-+/**
-+ * fdt_subnode_offset - find a subnode of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @parentoffset: structure block offset of a node
-+ * @name: name of the subnode to locate
-+ *
-+ * fdt_subnode_offset() finds a subnode of the node at structure block
-+ * offset parentoffset with the given name.  name may include a unit
-+ * address, in which case fdt_subnode_offset() will find the subnode
-+ * with that unit address, or the unit address may be omitted, in
-+ * which case fdt_subnode_offset() will find an arbitrary subnode
-+ * whose name excluding unit address matches the given name.
-+ *
-+ * returns:
-+ *	structure block offset of the requested subnode (>=0), on success
-+ *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
-+ *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE
-+ *		tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings.
-+ */
-+int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);
-+
-+/**
-+ * fdt_path_offset_namelen - find a tree node by its full path
-+ * @fdt: pointer to the device tree blob
-+ * @path: full path of the node to locate
-+ * @namelen: number of characters of path to consider
-+ *
-+ * Identical to fdt_path_offset(), but only consider the first namelen
-+ * characters of path as the path name.
-+ *
-+ * Return: offset of the node or negative libfdt error value otherwise
-+ */
-+#ifndef SWIG /* Not available in Python */
-+int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen);
-+#endif
-+
-+/**
-+ * fdt_path_offset - find a tree node by its full path
-+ * @fdt: pointer to the device tree blob
-+ * @path: full path of the node to locate
-+ *
-+ * fdt_path_offset() finds a node of a given path in the device tree.
-+ * Each path component may omit the unit address portion, but the
-+ * results of this are undefined if any such path component is
-+ * ambiguous (that is if there are multiple nodes at the relevant
-+ * level matching the given component, differentiated only by unit
-+ * address).
-+ *
-+ * returns:
-+ *	structure block offset of the node with the requested path (>=0), on
-+ *		success
-+ *	-FDT_ERR_BADPATH, given path does not begin with '/' or is invalid
-+ *	-FDT_ERR_NOTFOUND, if the requested node does not exist
-+ *      -FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings.
-+ */
-+int fdt_path_offset(const void *fdt, const char *path);
-+
-+/**
-+ * fdt_get_name - retrieve the name of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: structure block offset of the starting node
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_get_name() retrieves the name (including unit address) of the
-+ * device tree node at structure block offset nodeoffset.  If lenp is
-+ * non-NULL, the length of this name is also returned, in the integer
-+ * pointed to by lenp.
-+ *
-+ * returns:
-+ *	pointer to the node's name, on success
-+ *		If lenp is non-NULL, *lenp contains the length of that name
-+ *			(>=0)
-+ *	NULL, on error
-+ *		if lenp is non-NULL *lenp contains an error code (<0):
-+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE
-+ *			tag
-+ *		-FDT_ERR_BADMAGIC,
-+ *		-FDT_ERR_BADVERSION,
-+ *		-FDT_ERR_BADSTATE, standard meanings
-+ */
-+const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);
-+
-+/**
-+ * fdt_first_property_offset - find the offset of a node's first property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: structure block offset of a node
-+ *
-+ * fdt_first_property_offset() finds the first property of the node at
-+ * the given structure block offset.
-+ *
-+ * returns:
-+ *	structure block offset of the property (>=0), on success
-+ *	-FDT_ERR_NOTFOUND, if the requested node has no properties
-+ *	-FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_BEGIN_NODE tag
-+ *      -FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings.
-+ */
-+int fdt_first_property_offset(const void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_next_property_offset - step through a node's properties
-+ * @fdt: pointer to the device tree blob
-+ * @offset: structure block offset of a property
-+ *
-+ * fdt_next_property_offset() finds the property immediately after the
-+ * one at the given structure block offset.  This will be a property
-+ * of the same node as the given property.
-+ *
-+ * returns:
-+ *	structure block offset of the next property (>=0), on success
-+ *	-FDT_ERR_NOTFOUND, if the given property is the last in its node
-+ *	-FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_PROP tag
-+ *      -FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings.
-+ */
-+int fdt_next_property_offset(const void *fdt, int offset);
-+
-+/**
-+ * fdt_for_each_property_offset - iterate over all properties of a node
-+ *
-+ * @property:	property offset (int, lvalue)
-+ * @fdt:	FDT blob (const void *)
-+ * @node:	node offset (int)
-+ *
-+ * This is actually a wrapper around a for loop and would be used like so:
-+ *
-+ *	fdt_for_each_property_offset(property, fdt, node) {
-+ *		Use property
-+ *		...
-+ *	}
-+ *
-+ *	if ((property < 0) && (property != -FDT_ERR_NOTFOUND)) {
-+ *		Error handling
-+ *	}
-+ *
-+ * Note that this is implemented as a macro and property is used as
-+ * iterator in the loop. The node variable can be constant or even a
-+ * literal.
-+ */
-+#define fdt_for_each_property_offset(property, fdt, node)	\
-+	for (property = fdt_first_property_offset(fdt, node);	\
-+	     property >= 0;					\
-+	     property = fdt_next_property_offset(fdt, property))
-+
-+/**
-+ * fdt_get_property_by_offset - retrieve the property at a given offset
-+ * @fdt: pointer to the device tree blob
-+ * @offset: offset of the property to retrieve
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_get_property_by_offset() retrieves a pointer to the
-+ * fdt_property structure within the device tree blob at the given
-+ * offset.  If lenp is non-NULL, the length of the property value is
-+ * also returned, in the integer pointed to by lenp.
-+ *
-+ * Note that this code only works on device tree versions >= 16. fdt_getprop()
-+ * works on all versions.
-+ *
-+ * returns:
-+ *	pointer to the structure representing the property
-+ *		if lenp is non-NULL, *lenp contains the length of the property
-+ *		value (>=0)
-+ *	NULL, on error
-+ *		if lenp is non-NULL, *lenp contains an error code (<0):
-+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag
-+ *		-FDT_ERR_BADMAGIC,
-+ *		-FDT_ERR_BADVERSION,
-+ *		-FDT_ERR_BADSTATE,
-+ *		-FDT_ERR_BADSTRUCTURE,
-+ *		-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
-+						      int offset,
-+						      int *lenp);
-+
-+/**
-+ * fdt_get_property_namelen - find a property based on substring
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to find
-+ * @name: name of the property to find
-+ * @namelen: number of characters of name to consider
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * Identical to fdt_get_property(), but only examine the first namelen
-+ * characters of name for matching the property name.
-+ *
-+ * Return: pointer to the structure representing the property, or NULL
-+ *         if not found
-+ */
-+#ifndef SWIG /* Not available in Python */
-+const struct fdt_property *fdt_get_property_namelen(const void *fdt,
-+						    int nodeoffset,
-+						    const char *name,
-+						    int namelen, int *lenp);
-+#endif
-+
-+/**
-+ * fdt_get_property - find a given property in a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to find
-+ * @name: name of the property to find
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_get_property() retrieves a pointer to the fdt_property
-+ * structure within the device tree blob corresponding to the property
-+ * named 'name' of the node at offset nodeoffset.  If lenp is
-+ * non-NULL, the length of the property value is also returned, in the
-+ * integer pointed to by lenp.
-+ *
-+ * returns:
-+ *	pointer to the structure representing the property
-+ *		if lenp is non-NULL, *lenp contains the length of the property
-+ *		value (>=0)
-+ *	NULL, on error
-+ *		if lenp is non-NULL, *lenp contains an error code (<0):
-+ *		-FDT_ERR_NOTFOUND, node does not have named property
-+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE
-+ *			tag
-+ *		-FDT_ERR_BADMAGIC,
-+ *		-FDT_ERR_BADVERSION,
-+ *		-FDT_ERR_BADSTATE,
-+ *		-FDT_ERR_BADSTRUCTURE,
-+ *		-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+const struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,
-+					    const char *name, int *lenp);
-+static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,
-+						      const char *name,
-+						      int *lenp)
-+{
-+	return (struct fdt_property *)(uintptr_t)
-+		fdt_get_property(fdt, nodeoffset, name, lenp);
-+}
-+
-+/**
-+ * fdt_getprop_by_offset - retrieve the value of a property at a given offset
-+ * @fdt: pointer to the device tree blob
-+ * @offset: offset of the property to read
-+ * @namep: pointer to a string variable (will be overwritten) or NULL
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_getprop_by_offset() retrieves a pointer to the value of the
-+ * property at structure block offset 'offset' (this will be a pointer
-+ * to within the device blob itself, not a copy of the value).  If
-+ * lenp is non-NULL, the length of the property value is also
-+ * returned, in the integer pointed to by lenp.  If namep is non-NULL,
-+ * the property's namne will also be returned in the char * pointed to
-+ * by namep (this will be a pointer to within the device tree's string
-+ * block, not a new copy of the name).
-+ *
-+ * returns:
-+ *	pointer to the property's value
-+ *		if lenp is non-NULL, *lenp contains the length of the property
-+ *		value (>=0)
-+ *		if namep is non-NULL *namep contiains a pointer to the property
-+ *		name.
-+ *	NULL, on error
-+ *		if lenp is non-NULL, *lenp contains an error code (<0):
-+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag
-+ *		-FDT_ERR_BADMAGIC,
-+ *		-FDT_ERR_BADVERSION,
-+ *		-FDT_ERR_BADSTATE,
-+ *		-FDT_ERR_BADSTRUCTURE,
-+ *		-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+#ifndef SWIG /* This function is not useful in Python */
-+const void *fdt_getprop_by_offset(const void *fdt, int offset,
-+				  const char **namep, int *lenp);
-+#endif
-+
-+/**
-+ * fdt_getprop_namelen - get property value based on substring
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to find
-+ * @name: name of the property to find
-+ * @namelen: number of characters of name to consider
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * Identical to fdt_getprop(), but only examine the first namelen
-+ * characters of name for matching the property name.
-+ *
-+ * Return: pointer to the property's value or NULL on error
-+ */
-+#ifndef SWIG /* Not available in Python */
-+const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
-+				const char *name, int namelen, int *lenp);
-+static inline void *fdt_getprop_namelen_w(void *fdt, int nodeoffset,
-+					  const char *name, int namelen,
-+					  int *lenp)
-+{
-+	return (void *)(uintptr_t)fdt_getprop_namelen(fdt, nodeoffset, name,
-+						      namelen, lenp);
-+}
-+#endif
-+
-+/**
-+ * fdt_getprop - retrieve the value of a given property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to find
-+ * @name: name of the property to find
-+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_getprop() retrieves a pointer to the value of the property
-+ * named @name of the node at offset @nodeoffset (this will be a
-+ * pointer to within the device blob itself, not a copy of the value).
-+ * If @lenp is non-NULL, the length of the property value is also
-+ * returned, in the integer pointed to by @lenp.
-+ *
-+ * returns:
-+ *	pointer to the property's value
-+ *		if lenp is non-NULL, *lenp contains the length of the property
-+ *		value (>=0)
-+ *	NULL, on error
-+ *		if lenp is non-NULL, *lenp contains an error code (<0):
-+ *		-FDT_ERR_NOTFOUND, node does not have named property
-+ *		-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE
-+ *			tag
-+ *		-FDT_ERR_BADMAGIC,
-+ *		-FDT_ERR_BADVERSION,
-+ *		-FDT_ERR_BADSTATE,
-+ *		-FDT_ERR_BADSTRUCTURE,
-+ *		-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+const void *fdt_getprop(const void *fdt, int nodeoffset,
-+			const char *name, int *lenp);
-+static inline void *fdt_getprop_w(void *fdt, int nodeoffset,
-+				  const char *name, int *lenp)
-+{
-+	return (void *)(uintptr_t)fdt_getprop(fdt, nodeoffset, name, lenp);
-+}
-+
-+/**
-+ * fdt_get_phandle - retrieve the phandle of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: structure block offset of the node
-+ *
-+ * fdt_get_phandle() retrieves the phandle of the device tree node at
-+ * structure block offset nodeoffset.
-+ *
-+ * returns:
-+ *	the phandle of the node at nodeoffset, on success (!= 0, != -1)
-+ *	0, if the node has no phandle, or another error occurs
-+ */
-+uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_get_alias_namelen - get alias based on substring
-+ * @fdt: pointer to the device tree blob
-+ * @name: name of the alias th look up
-+ * @namelen: number of characters of name to consider
-+ *
-+ * Identical to fdt_get_alias(), but only examine the first @namelen
-+ * characters of @name for matching the alias name.
-+ *
-+ * Return: a pointer to the expansion of the alias named @name, if it exists,
-+ *	   NULL otherwise
-+ */
-+#ifndef SWIG /* Not available in Python */
-+const char *fdt_get_alias_namelen(const void *fdt,
-+				  const char *name, int namelen);
-+#endif
-+
-+/**
-+ * fdt_get_alias - retrieve the path referenced by a given alias
-+ * @fdt: pointer to the device tree blob
-+ * @name: name of the alias th look up
-+ *
-+ * fdt_get_alias() retrieves the value of a given alias.  That is, the
-+ * value of the property named @name in the node /aliases.
-+ *
-+ * returns:
-+ *	a pointer to the expansion of the alias named 'name', if it exists
-+ *	NULL, if the given alias or the /aliases node does not exist
-+ */
-+const char *fdt_get_alias(const void *fdt, const char *name);
-+
-+/**
-+ * fdt_get_path - determine the full path of a node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose path to find
-+ * @buf: character buffer to contain the returned path (will be overwritten)
-+ * @buflen: size of the character buffer at buf
-+ *
-+ * fdt_get_path() computes the full path of the node at offset
-+ * nodeoffset, and records that path in the buffer at buf.
-+ *
-+ * NOTE: This function is expensive, as it must scan the device tree
-+ * structure from the start to nodeoffset.
-+ *
-+ * returns:
-+ *	0, on success
-+ *		buf contains the absolute path of the node at
-+ *		nodeoffset, as a NUL-terminated string.
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_NOSPACE, the path of the given node is longer than (bufsize-1)
-+ *		characters and will not fit in the given buffer.
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);
-+
-+/**
-+ * fdt_supernode_atdepth_offset - find a specific ancestor of a node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose parent to find
-+ * @supernodedepth: depth of the ancestor to find
-+ * @nodedepth: pointer to an integer variable (will be overwritten) or NULL
-+ *
-+ * fdt_supernode_atdepth_offset() finds an ancestor of the given node
-+ * at a specific depth from the root (where the root itself has depth
-+ * 0, its immediate subnodes depth 1 and so forth).  So
-+ *	fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);
-+ * will always return 0, the offset of the root node.  If the node at
-+ * nodeoffset has depth D, then:
-+ *	fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);
-+ * will return nodeoffset itself.
-+ *
-+ * NOTE: This function is expensive, as it must scan the device tree
-+ * structure from the start to nodeoffset.
-+ *
-+ * returns:
-+ *	structure block offset of the node at node offset's ancestor
-+ *		of depth supernodedepth (>=0), on success
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_NOTFOUND, supernodedepth was greater than the depth of
-+ *		nodeoffset
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
-+				 int supernodedepth, int *nodedepth);
-+
-+/**
-+ * fdt_node_depth - find the depth of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose parent to find
-+ *
-+ * fdt_node_depth() finds the depth of a given node.  The root node
-+ * has depth 0, its immediate subnodes depth 1 and so forth.
-+ *
-+ * NOTE: This function is expensive, as it must scan the device tree
-+ * structure from the start to nodeoffset.
-+ *
-+ * returns:
-+ *	depth of the node at nodeoffset (>=0), on success
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_node_depth(const void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_parent_offset - find the parent of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose parent to find
-+ *
-+ * fdt_parent_offset() locates the parent node of a given node (that
-+ * is, it finds the offset of the node which contains the node at
-+ * nodeoffset as a subnode).
-+ *
-+ * NOTE: This function is expensive, as it must scan the device tree
-+ * structure from the start to nodeoffset, *twice*.
-+ *
-+ * returns:
-+ *	structure block offset of the parent of the node at nodeoffset
-+ *		(>=0), on success
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_parent_offset(const void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_node_offset_by_prop_value - find nodes with a given property value
-+ * @fdt: pointer to the device tree blob
-+ * @startoffset: only find nodes after this offset
-+ * @propname: property name to check
-+ * @propval: property value to search for
-+ * @proplen: length of the value in propval
-+ *
-+ * fdt_node_offset_by_prop_value() returns the offset of the first
-+ * node after startoffset, which has a property named propname whose
-+ * value is of length proplen and has value equal to propval; or if
-+ * startoffset is -1, the very first such node in the tree.
-+ *
-+ * To iterate through all nodes matching the criterion, the following
-+ * idiom can be used:
-+ *	offset = fdt_node_offset_by_prop_value(fdt, -1, propname,
-+ *					       propval, proplen);
-+ *	while (offset != -FDT_ERR_NOTFOUND) {
-+ *		// other code here
-+ *		offset = fdt_node_offset_by_prop_value(fdt, offset, propname,
-+ *						       propval, proplen);
-+ *	}
-+ *
-+ * Note the -1 in the first call to the function, if 0 is used here
-+ * instead, the function will never locate the root node, even if it
-+ * matches the criterion.
-+ *
-+ * returns:
-+ *	structure block offset of the located node (>= 0, >startoffset),
-+ *		 on success
-+ *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
-+ *		tree after startoffset
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
-+				  const char *propname,
-+				  const void *propval, int proplen);
-+
-+/**
-+ * fdt_node_offset_by_phandle - find the node with a given phandle
-+ * @fdt: pointer to the device tree blob
-+ * @phandle: phandle value
-+ *
-+ * fdt_node_offset_by_phandle() returns the offset of the node
-+ * which has the given phandle value.  If there is more than one node
-+ * in the tree with the given phandle (an invalid tree), results are
-+ * undefined.
-+ *
-+ * returns:
-+ *	structure block offset of the located node (>= 0), on success
-+ *	-FDT_ERR_NOTFOUND, no node with that phandle exists
-+ *	-FDT_ERR_BADPHANDLE, given phandle value was invalid (0 or -1)
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle);
-+
-+/**
-+ * fdt_node_check_compatible - check a node's compatible property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of a tree node
-+ * @compatible: string to match against
-+ *
-+ * fdt_node_check_compatible() returns 0 if the given node contains a
-+ * @compatible property with the given string as one of its elements,
-+ * it returns non-zero otherwise, or on error.
-+ *
-+ * returns:
-+ *	0, if the node has a 'compatible' property listing the given string
-+ *	1, if the node has a 'compatible' property, but it does not list
-+ *		the given string
-+ *	-FDT_ERR_NOTFOUND, if the given node has no 'compatible' property
-+ *	-FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_node_check_compatible(const void *fdt, int nodeoffset,
-+			      const char *compatible);
-+
-+/**
-+ * fdt_node_offset_by_compatible - find nodes with a given 'compatible' value
-+ * @fdt: pointer to the device tree blob
-+ * @startoffset: only find nodes after this offset
-+ * @compatible: 'compatible' string to match against
-+ *
-+ * fdt_node_offset_by_compatible() returns the offset of the first
-+ * node after startoffset, which has a 'compatible' property which
-+ * lists the given compatible string; or if startoffset is -1, the
-+ * very first such node in the tree.
-+ *
-+ * To iterate through all nodes matching the criterion, the following
-+ * idiom can be used:
-+ *	offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
-+ *	while (offset != -FDT_ERR_NOTFOUND) {
-+ *		// other code here
-+ *		offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
-+ *	}
-+ *
-+ * Note the -1 in the first call to the function, if 0 is used here
-+ * instead, the function will never locate the root node, even if it
-+ * matches the criterion.
-+ *
-+ * returns:
-+ *	structure block offset of the located node (>= 0, >startoffset),
-+ *		 on success
-+ *	-FDT_ERR_NOTFOUND, no node matching the criterion exists in the
-+ *		tree after startoffset
-+ *	-FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE, standard meanings
-+ */
-+int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
-+				  const char *compatible);
-+
-+/**
-+ * fdt_stringlist_contains - check a string list property for a string
-+ * @strlist: Property containing a list of strings to check
-+ * @listlen: Length of property
-+ * @str: String to search for
-+ *
-+ * This is a utility function provided for convenience. The list contains
-+ * one or more strings, each terminated by \0, as is found in a device tree
-+ * "compatible" property.
-+ *
-+ * Return: 1 if the string is found in the list, 0 not found, or invalid list
-+ */
-+int fdt_stringlist_contains(const char *strlist, int listlen, const char *str);
-+
-+/**
-+ * fdt_stringlist_count - count the number of strings in a string list
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of a tree node
-+ * @property: name of the property containing the string list
-+ *
-+ * Return:
-+ *   the number of strings in the given property
-+ *   -FDT_ERR_BADVALUE if the property value is not NUL-terminated
-+ *   -FDT_ERR_NOTFOUND if the property does not exist
-+ */
-+int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property);
-+
-+/**
-+ * fdt_stringlist_search - find a string in a string list and return its index
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of a tree node
-+ * @property: name of the property containing the string list
-+ * @string: string to look up in the string list
-+ *
-+ * Note that it is possible for this function to succeed on property values
-+ * that are not NUL-terminated. That's because the function will stop after
-+ * finding the first occurrence of @string. This can for example happen with
-+ * small-valued cell properties, such as #address-cells, when searching for
-+ * the empty string.
-+ *
-+ * return:
-+ *   the index of the string in the list of strings
-+ *   -FDT_ERR_BADVALUE if the property value is not NUL-terminated
-+ *   -FDT_ERR_NOTFOUND if the property does not exist or does not contain
-+ *                     the given string
-+ */
-+int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,
-+			  const char *string);
-+
-+/**
-+ * fdt_stringlist_get() - obtain the string at a given index in a string list
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of a tree node
-+ * @property: name of the property containing the string list
-+ * @index: index of the string to return
-+ * @lenp: return location for the string length or an error code on failure
-+ *
-+ * Note that this will successfully extract strings from properties with
-+ * non-NUL-terminated values. For example on small-valued cell properties
-+ * this function will return the empty string.
-+ *
-+ * If non-NULL, the length of the string (on success) or a negative error-code
-+ * (on failure) will be stored in the integer pointer to by lenp.
-+ *
-+ * Return:
-+ *   A pointer to the string at the given index in the string list or NULL on
-+ *   failure. On success the length of the string will be stored in the memory
-+ *   location pointed to by the lenp parameter, if non-NULL. On failure one of
-+ *   the following negative error codes will be returned in the lenp parameter
-+ *   (if non-NULL):
-+ *     -FDT_ERR_BADVALUE if the property value is not NUL-terminated
-+ *     -FDT_ERR_NOTFOUND if the property does not exist
-+ */
-+const char *fdt_stringlist_get(const void *fdt, int nodeoffset,
-+			       const char *property, int index,
-+			       int *lenp);
-+
-+/**********************************************************************/
-+/* Read-only functions (addressing related)                           */
-+/**********************************************************************/
-+
-+/**
-+ * FDT_MAX_NCELLS - maximum value for #address-cells and #size-cells
-+ *
-+ * This is the maximum value for #address-cells, #size-cells and
-+ * similar properties that will be processed by libfdt.  IEE1275
-+ * requires that OF implementations handle values up to 4.
-+ * Implementations may support larger values, but in practice higher
-+ * values aren't used.
-+ */
-+#define FDT_MAX_NCELLS		4
-+
-+/**
-+ * fdt_address_cells - retrieve address size for a bus represented in the tree
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node to find the address size for
-+ *
-+ * When the node has a valid #address-cells property, returns its value.
-+ *
-+ * returns:
-+ *	0 <= n < FDT_MAX_NCELLS, on success
-+ *      2, if the node has no #address-cells property
-+ *      -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid
-+ *		#address-cells property
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_address_cells(const void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_size_cells - retrieve address range size for a bus represented in the
-+ *                  tree
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node to find the address range size for
-+ *
-+ * When the node has a valid #size-cells property, returns its value.
-+ *
-+ * returns:
-+ *	0 <= n < FDT_MAX_NCELLS, on success
-+ *      1, if the node has no #size-cells property
-+ *      -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid
-+ *		#size-cells property
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_size_cells(const void *fdt, int nodeoffset);
-+
-+
-+/**********************************************************************/
-+/* Write-in-place functions                                           */
-+/**********************************************************************/
-+
-+/**
-+ * fdt_setprop_inplace_namelen_partial - change a property's value,
-+ *                                       but not its size
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @namelen: number of characters of name to consider
-+ * @idx: index of the property to change in the array
-+ * @val: pointer to data to replace the property value with
-+ * @len: length of the property value
-+ *
-+ * Identical to fdt_setprop_inplace(), but modifies the given property
-+ * starting from the given index, and using only the first characters
-+ * of the name. It is useful when you want to manipulate only one value of
-+ * an array and you have a string that doesn't end with \0.
-+ *
-+ * Return: 0 on success, negative libfdt error value otherwise
-+ */
-+#ifndef SWIG /* Not available in Python */
-+int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
-+					const char *name, int namelen,
-+					uint32_t idx, const void *val,
-+					int len);
-+#endif
-+
-+/**
-+ * fdt_setprop_inplace - change a property's value, but not its size
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: pointer to data to replace the property value with
-+ * @len: length of the property value
-+ *
-+ * fdt_setprop_inplace() replaces the value of a given property with
-+ * the data in val, of length len.  This function cannot change the
-+ * size of a property, and so will only work if len is equal to the
-+ * current length of the property.
-+ *
-+ * This function will alter only the bytes in the blob which contain
-+ * the given property value, and will not alter or move any other part
-+ * of the tree.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, if len is not equal to the property's current length
-+ *	-FDT_ERR_NOTFOUND, node does not have the named property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+#ifndef SWIG /* Not available in Python */
-+int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
-+			const void *val, int len);
-+#endif
-+
-+/**
-+ * fdt_setprop_inplace_u32 - change the value of a 32-bit integer property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 32-bit integer value to replace the property with
-+ *
-+ * fdt_setprop_inplace_u32() replaces the value of a given property
-+ * with the 32-bit integer value in val, converting val to big-endian
-+ * if necessary.  This function cannot change the size of a property,
-+ * and so will only work if the property already exists and has length
-+ * 4.
-+ *
-+ * This function will alter only the bytes in the blob which contain
-+ * the given property value, and will not alter or move any other part
-+ * of the tree.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, if the property's length is not equal to 4
-+ *	-FDT_ERR_NOTFOUND, node does not have the named property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_setprop_inplace_u32(void *fdt, int nodeoffset,
-+					  const char *name, uint32_t val)
-+{
-+	fdt32_t tmp = cpu_to_fdt32(val);
-+	return fdt_setprop_inplace(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_setprop_inplace_u64 - change the value of a 64-bit integer property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 64-bit integer value to replace the property with
-+ *
-+ * fdt_setprop_inplace_u64() replaces the value of a given property
-+ * with the 64-bit integer value in val, converting val to big-endian
-+ * if necessary.  This function cannot change the size of a property,
-+ * and so will only work if the property already exists and has length
-+ * 8.
-+ *
-+ * This function will alter only the bytes in the blob which contain
-+ * the given property value, and will not alter or move any other part
-+ * of the tree.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, if the property's length is not equal to 8
-+ *	-FDT_ERR_NOTFOUND, node does not have the named property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_setprop_inplace_u64(void *fdt, int nodeoffset,
-+					  const char *name, uint64_t val)
-+{
-+	fdt64_t tmp = cpu_to_fdt64(val);
-+	return fdt_setprop_inplace(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_setprop_inplace_cell - change the value of a single-cell property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node containing the property
-+ * @name: name of the property to change the value of
-+ * @val: new value of the 32-bit cell
-+ *
-+ * This is an alternative name for fdt_setprop_inplace_u32()
-+ * Return: 0 on success, negative libfdt error number otherwise.
-+ */
-+static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
-+					   const char *name, uint32_t val)
-+{
-+	return fdt_setprop_inplace_u32(fdt, nodeoffset, name, val);
-+}
-+
-+/**
-+ * fdt_nop_property - replace a property with nop tags
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to nop
-+ * @name: name of the property to nop
-+ *
-+ * fdt_nop_property() will replace a given property's representation
-+ * in the blob with FDT_NOP tags, effectively removing it from the
-+ * tree.
-+ *
-+ * This function will alter only the bytes in the blob which contain
-+ * the property, and will not alter or move any other part of the
-+ * tree.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOTFOUND, node does not have the named property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_nop_property(void *fdt, int nodeoffset, const char *name);
-+
-+/**
-+ * fdt_nop_node - replace a node (subtree) with nop tags
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node to nop
-+ *
-+ * fdt_nop_node() will replace a given node's representation in the
-+ * blob, including all its subnodes, if any, with FDT_NOP tags,
-+ * effectively removing it from the tree.
-+ *
-+ * This function will alter only the bytes in the blob which contain
-+ * the node and its properties and subnodes, and will not alter or
-+ * move any other part of the tree.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_nop_node(void *fdt, int nodeoffset);
-+
-+/**********************************************************************/
-+/* Sequential write functions                                         */
-+/**********************************************************************/
-+
-+/* fdt_create_with_flags flags */
-+#define FDT_CREATE_FLAG_NO_NAME_DEDUP 0x1
-+	/* FDT_CREATE_FLAG_NO_NAME_DEDUP: Do not try to de-duplicate property
-+	 * names in the fdt. This can result in faster creation times, but
-+	 * a larger fdt. */
-+
-+#define FDT_CREATE_FLAGS_ALL	(FDT_CREATE_FLAG_NO_NAME_DEDUP)
-+
-+/**
-+ * fdt_create_with_flags - begin creation of a new fdt
-+ * @buf: pointer to memory allocated where fdt will be created
-+ * @bufsize: size of the memory space at fdt
-+ * @flags: a valid combination of FDT_CREATE_FLAG_ flags, or 0.
-+ *
-+ * fdt_create_with_flags() begins the process of creating a new fdt with
-+ * the sequential write interface.
-+ *
-+ * fdt creation process must end with fdt_finished() to produce a valid fdt.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt
-+ *	-FDT_ERR_BADFLAGS, flags is not valid
-+ */
-+int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags);
-+
-+/**
-+ * fdt_create - begin creation of a new fdt
-+ * @buf: pointer to memory allocated where fdt will be created
-+ * @bufsize: size of the memory space at fdt
-+ *
-+ * fdt_create() is equivalent to fdt_create_with_flags() with flags=0.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt
-+ */
-+int fdt_create(void *buf, int bufsize);
-+
-+int fdt_resize(void *fdt, void *buf, int bufsize);
-+int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
-+int fdt_finish_reservemap(void *fdt);
-+int fdt_begin_node(void *fdt, const char *name);
-+int fdt_property(void *fdt, const char *name, const void *val, int len);
-+static inline int fdt_property_u32(void *fdt, const char *name, uint32_t val)
-+{
-+	fdt32_t tmp = cpu_to_fdt32(val);
-+	return fdt_property(fdt, name, &tmp, sizeof(tmp));
-+}
-+static inline int fdt_property_u64(void *fdt, const char *name, uint64_t val)
-+{
-+	fdt64_t tmp = cpu_to_fdt64(val);
-+	return fdt_property(fdt, name, &tmp, sizeof(tmp));
-+}
-+
-+#ifndef SWIG /* Not available in Python */
-+static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)
-+{
-+	return fdt_property_u32(fdt, name, val);
-+}
-+#endif
-+
-+/**
-+ * fdt_property_placeholder - add a new property and return a ptr to its value
-+ *
-+ * @fdt: pointer to the device tree blob
-+ * @name: name of property to add
-+ * @len: length of property value in bytes
-+ * @valp: returns a pointer to where where the value should be placed
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_NOSPACE, standard meanings
-+ */
-+int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp);
-+
-+#define fdt_property_string(fdt, name, str) \
-+	fdt_property(fdt, name, str, strlen(str)+1)
-+int fdt_end_node(void *fdt);
-+int fdt_finish(void *fdt);
-+
-+/**********************************************************************/
-+/* Read-write functions                                               */
-+/**********************************************************************/
-+
-+int fdt_create_empty_tree(void *buf, int bufsize);
-+int fdt_open_into(const void *fdt, void *buf, int bufsize);
-+int fdt_pack(void *fdt);
-+
-+/**
-+ * fdt_add_mem_rsv - add one memory reserve map entry
-+ * @fdt: pointer to the device tree blob
-+ * @address: 64-bit start address of the reserve map entry
-+ * @size: 64-bit size of the reserved region
-+ *
-+ * Adds a reserve map entry to the given blob reserving a region at
-+ * address address of length size.
-+ *
-+ * This function will insert data into the reserve map and will
-+ * therefore change the indexes of some entries in the table.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new reservation entry
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);
-+
-+/**
-+ * fdt_del_mem_rsv - remove a memory reserve map entry
-+ * @fdt: pointer to the device tree blob
-+ * @n: entry to remove
-+ *
-+ * fdt_del_mem_rsv() removes the n-th memory reserve map entry from
-+ * the blob.
-+ *
-+ * This function will delete data from the reservation table and will
-+ * therefore change the indexes of some entries in the table.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there
-+ *		are less than n+1 reserve map entries)
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_del_mem_rsv(void *fdt, int n);
-+
-+/**
-+ * fdt_set_name - change the name of a given node
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: structure block offset of a node
-+ * @name: name to give the node
-+ *
-+ * fdt_set_name() replaces the name (including unit address, if any)
-+ * of the given node with the given string.  NOTE: this function can't
-+ * efficiently check if the new name is unique amongst the given
-+ * node's siblings; results are undefined if this function is invoked
-+ * with a name equal to one of the given node's siblings.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob
-+ *		to contain the new name
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE, standard meanings
-+ */
-+int fdt_set_name(void *fdt, int nodeoffset, const char *name);
-+
-+/**
-+ * fdt_setprop - create or change a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: pointer to data to set the property value to
-+ * @len: length of the property value
-+ *
-+ * fdt_setprop() sets the value of the named property in the given
-+ * node to the given value and length, creating the property if it
-+ * does not already exist.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_setprop(void *fdt, int nodeoffset, const char *name,
-+		const void *val, int len);
-+
-+/**
-+ * fdt_setprop_placeholder - allocate space for a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @len: length of the property value
-+ * @prop_data: return pointer to property data
-+ *
-+ * fdt_setprop_placeholer() allocates the named property in the given node.
-+ * If the property exists it is resized. In either case a pointer to the
-+ * property data is returned.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_setprop_placeholder(void *fdt, int nodeoffset, const char *name,
-+			    int len, void **prop_data);
-+
-+/**
-+ * fdt_setprop_u32 - set a property to a 32-bit integer
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 32-bit integer value for the property (native endian)
-+ *
-+ * fdt_setprop_u32() sets the value of the named property in the given
-+ * node to the given 32-bit integer value (converting to big-endian if
-+ * necessary), or creates a new property with that value if it does
-+ * not already exist.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_setprop_u32(void *fdt, int nodeoffset, const char *name,
-+				  uint32_t val)
-+{
-+	fdt32_t tmp = cpu_to_fdt32(val);
-+	return fdt_setprop(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_setprop_u64 - set a property to a 64-bit integer
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 64-bit integer value for the property (native endian)
-+ *
-+ * fdt_setprop_u64() sets the value of the named property in the given
-+ * node to the given 64-bit integer value (converting to big-endian if
-+ * necessary), or creates a new property with that value if it does
-+ * not already exist.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_setprop_u64(void *fdt, int nodeoffset, const char *name,
-+				  uint64_t val)
-+{
-+	fdt64_t tmp = cpu_to_fdt64(val);
-+	return fdt_setprop(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_setprop_cell - set a property to a single cell value
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 32-bit integer value for the property (native endian)
-+ *
-+ * This is an alternative name for fdt_setprop_u32()
-+ *
-+ * Return: 0 on success, negative libfdt error value otherwise.
-+ */
-+static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
-+				   uint32_t val)
-+{
-+	return fdt_setprop_u32(fdt, nodeoffset, name, val);
-+}
-+
-+/**
-+ * fdt_setprop_string - set a property to a string value
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @str: string value for the property
-+ *
-+ * fdt_setprop_string() sets the value of the named property in the
-+ * given node to the given string value (using the length of the
-+ * string to determine the new length of the property), or creates a
-+ * new property with that value if it does not already exist.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+#define fdt_setprop_string(fdt, nodeoffset, name, str) \
-+	fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
-+
-+
-+/**
-+ * fdt_setprop_empty - set a property to an empty value
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ *
-+ * fdt_setprop_empty() sets the value of the named property in the
-+ * given node to an empty (zero length) value, or creates a new empty
-+ * property if it does not already exist.
-+ *
-+ * This function may insert or delete data from the blob, and will
-+ * therefore change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+#define fdt_setprop_empty(fdt, nodeoffset, name) \
-+	fdt_setprop((fdt), (nodeoffset), (name), NULL, 0)
-+
-+/**
-+ * fdt_appendprop - append to or create a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to append to
-+ * @val: pointer to data to append to the property value
-+ * @len: length of the data to append to the property value
-+ *
-+ * fdt_appendprop() appends the value to the named property in the
-+ * given node, creating the property if it does not already exist.
-+ *
-+ * This function may insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_appendprop(void *fdt, int nodeoffset, const char *name,
-+		   const void *val, int len);
-+
-+/**
-+ * fdt_appendprop_u32 - append a 32-bit integer value to a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 32-bit integer value to append to the property (native endian)
-+ *
-+ * fdt_appendprop_u32() appends the given 32-bit integer value
-+ * (converting to big-endian if necessary) to the value of the named
-+ * property in the given node, or creates a new property with that
-+ * value if it does not already exist.
-+ *
-+ * This function may insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_appendprop_u32(void *fdt, int nodeoffset,
-+				     const char *name, uint32_t val)
-+{
-+	fdt32_t tmp = cpu_to_fdt32(val);
-+	return fdt_appendprop(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_appendprop_u64 - append a 64-bit integer value to a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 64-bit integer value to append to the property (native endian)
-+ *
-+ * fdt_appendprop_u64() appends the given 64-bit integer value
-+ * (converting to big-endian if necessary) to the value of the named
-+ * property in the given node, or creates a new property with that
-+ * value if it does not already exist.
-+ *
-+ * This function may insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+static inline int fdt_appendprop_u64(void *fdt, int nodeoffset,
-+				     const char *name, uint64_t val)
-+{
-+	fdt64_t tmp = cpu_to_fdt64(val);
-+	return fdt_appendprop(fdt, nodeoffset, name, &tmp, sizeof(tmp));
-+}
-+
-+/**
-+ * fdt_appendprop_cell - append a single cell value to a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @val: 32-bit integer value to append to the property (native endian)
-+ *
-+ * This is an alternative name for fdt_appendprop_u32()
-+ *
-+ * Return: 0 on success, negative libfdt error value otherwise.
-+ */
-+static inline int fdt_appendprop_cell(void *fdt, int nodeoffset,
-+				      const char *name, uint32_t val)
-+{
-+	return fdt_appendprop_u32(fdt, nodeoffset, name, val);
-+}
-+
-+/**
-+ * fdt_appendprop_string - append a string to a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to change
-+ * @name: name of the property to change
-+ * @str: string value to append to the property
-+ *
-+ * fdt_appendprop_string() appends the given string to the value of
-+ * the named property in the given node, or creates a new property
-+ * with that value if it does not already exist.
-+ *
-+ * This function may insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain the new property value
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+#define fdt_appendprop_string(fdt, nodeoffset, name, str) \
-+	fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
-+
-+/**
-+ * fdt_appendprop_addrrange - append a address range property
-+ * @fdt: pointer to the device tree blob
-+ * @parent: offset of the parent node
-+ * @nodeoffset: offset of the node to add a property at
-+ * @name: name of property
-+ * @addr: start address of a given range
-+ * @size: size of a given range
-+ *
-+ * fdt_appendprop_addrrange() appends an address range value (start
-+ * address and size) to the value of the named property in the given
-+ * node, or creates a new property with that value if it does not
-+ * already exist.
-+ * If "name" is not specified, a default "reg" is used.
-+ * Cell sizes are determined by parent's #address-cells and #size-cells.
-+ *
-+ * This function may insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid
-+ *		#address-cells property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADVALUE, addr or size doesn't fit to respective cells size
-+ *	-FDT_ERR_NOSPACE, there is insufficient free space in the blob to
-+ *		contain a new property
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,
-+			     const char *name, uint64_t addr, uint64_t size);
-+
-+/**
-+ * fdt_delprop - delete a property
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node whose property to nop
-+ * @name: name of the property to nop
-+ *
-+ * fdt_del_property() will delete the given property.
-+ *
-+ * This function will delete data from the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOTFOUND, node does not have the named property
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_delprop(void *fdt, int nodeoffset, const char *name);
-+
-+/**
-+ * fdt_add_subnode_namelen - creates a new node based on substring
-+ * @fdt: pointer to the device tree blob
-+ * @parentoffset: structure block offset of a node
-+ * @name: name of the subnode to create
-+ * @namelen: number of characters of name to consider
-+ *
-+ * Identical to fdt_add_subnode(), but use only the first @namelen
-+ * characters of @name as the name of the new node.  This is useful for
-+ * creating subnodes based on a portion of a larger string, such as a
-+ * full path.
-+ *
-+ * Return: structure block offset of the created subnode (>=0),
-+ *	   negative libfdt error value otherwise
-+ */
-+#ifndef SWIG /* Not available in Python */
-+int fdt_add_subnode_namelen(void *fdt, int parentoffset,
-+			    const char *name, int namelen);
-+#endif
-+
-+/**
-+ * fdt_add_subnode - creates a new node
-+ * @fdt: pointer to the device tree blob
-+ * @parentoffset: structure block offset of a node
-+ * @name: name of the subnode to locate
-+ *
-+ * fdt_add_subnode() creates a new node as a subnode of the node at
-+ * structure block offset parentoffset, with the given name (which
-+ * should include the unit address, if any).
-+ *
-+ * This function will insert data into the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	structure block offset of the created nodeequested subnode (>=0), on
-+ *		success
-+ *	-FDT_ERR_NOTFOUND, if the requested subnode does not exist
-+ *	-FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE
-+ *		tag
-+ *	-FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of
-+ *		the given name
-+ *	-FDT_ERR_NOSPACE, if there is insufficient free space in the
-+ *		blob to contain the new node
-+ *	-FDT_ERR_NOSPACE
-+ *	-FDT_ERR_BADLAYOUT
-+ *      -FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings.
-+ */
-+int fdt_add_subnode(void *fdt, int parentoffset, const char *name);
-+
-+/**
-+ * fdt_del_node - delete a node (subtree)
-+ * @fdt: pointer to the device tree blob
-+ * @nodeoffset: offset of the node to nop
-+ *
-+ * fdt_del_node() will remove the given node, including all its
-+ * subnodes if any, from the blob.
-+ *
-+ * This function will delete data from the blob, and will therefore
-+ * change the offsets of some existing nodes.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_del_node(void *fdt, int nodeoffset);
-+
-+/**
-+ * fdt_overlay_apply - Applies a DT overlay on a base DT
-+ * @fdt: pointer to the base device tree blob
-+ * @fdto: pointer to the device tree overlay blob
-+ *
-+ * fdt_overlay_apply() will apply the given device tree overlay on the
-+ * given base device tree.
-+ *
-+ * Expect the base device tree to be modified, even if the function
-+ * returns an error.
-+ *
-+ * returns:
-+ *	0, on success
-+ *	-FDT_ERR_NOSPACE, there's not enough space in the base device tree
-+ *	-FDT_ERR_NOTFOUND, the overlay points to some inexistant nodes or
-+ *		properties in the base DT
-+ *	-FDT_ERR_BADPHANDLE,
-+ *	-FDT_ERR_BADOVERLAY,
-+ *	-FDT_ERR_NOPHANDLES,
-+ *	-FDT_ERR_INTERNAL,
-+ *	-FDT_ERR_BADLAYOUT,
-+ *	-FDT_ERR_BADMAGIC,
-+ *	-FDT_ERR_BADOFFSET,
-+ *	-FDT_ERR_BADPATH,
-+ *	-FDT_ERR_BADVERSION,
-+ *	-FDT_ERR_BADSTRUCTURE,
-+ *	-FDT_ERR_BADSTATE,
-+ *	-FDT_ERR_TRUNCATED, standard meanings
-+ */
-+int fdt_overlay_apply(void *fdt, void *fdto);
-+
-+/**
-+ * fdt_overlay_target_offset - retrieves the offset of a fragment's target
-+ * @fdt: Base device tree blob
-+ * @fdto: Device tree overlay blob
-+ * @fragment_offset: node offset of the fragment in the overlay
-+ * @pathp: pointer which receives the path of the target (or NULL)
-+ *
-+ * fdt_overlay_target_offset() retrieves the target offset in the base
-+ * device tree of a fragment, no matter how the actual targeting is
-+ * done (through a phandle or a path)
-+ *
-+ * returns:
-+ *      the targeted node offset in the base device tree
-+ *      Negative error code on error
-+ */
-+int fdt_overlay_target_offset(const void *fdt, const void *fdto,
-+			      int fragment_offset, char const **pathp);
-+
-+/**********************************************************************/
-+/* Debugging / informational functions                                */
-+/**********************************************************************/
-+
-+const char *fdt_strerror(int errval);
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* LIBFDT_H */
-diff --git a/include/libfdt_env.h b/include/libfdt_env.h
-new file mode 100644
-index 0000000..51b31d1
---- /dev/null
-+++ b/include/libfdt_env.h
-@@ -0,0 +1,95 @@
-+/* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
-+#ifndef LIBFDT_ENV_H
-+#define LIBFDT_ENV_H
-+/*
-+ * libfdt - Flat Device Tree manipulation
-+ * Copyright (C) 2006 David Gibson, IBM Corporation.
-+ * Copyright 2012 Kim Phillips, Freescale Semiconductor.
-+ */
-+
-+#include <stdbool.h>
-+#include <stddef.h>
-+#include <stdint.h>
-+#include <limits.h>
-+#include <string.h>
-+
-+#ifdef __CHECKER__
-+#define FDT_FORCE __attribute__((force))
-+#define FDT_BITWISE __attribute__((bitwise))
-+#else
-+#define FDT_FORCE
-+#define FDT_BITWISE
-+#endif
-+
-+typedef uint16_t FDT_BITWISE fdt16_t;
-+typedef uint32_t FDT_BITWISE fdt32_t;
-+typedef uint64_t FDT_BITWISE fdt64_t;
-+
-+#define EXTRACT_BYTE(x, n)	((unsigned long long)((uint8_t *)&x)[n])
-+#define CPU_TO_FDT16(x) ((EXTRACT_BYTE(x, 0) << 8) | EXTRACT_BYTE(x, 1))
-+#define CPU_TO_FDT32(x) ((EXTRACT_BYTE(x, 0) << 24) | (EXTRACT_BYTE(x, 1) << 16) | \
-+			 (EXTRACT_BYTE(x, 2) << 8) | EXTRACT_BYTE(x, 3))
-+#define CPU_TO_FDT64(x) ((EXTRACT_BYTE(x, 0) << 56) | (EXTRACT_BYTE(x, 1) << 48) | \
-+			 (EXTRACT_BYTE(x, 2) << 40) | (EXTRACT_BYTE(x, 3) << 32) | \
-+			 (EXTRACT_BYTE(x, 4) << 24) | (EXTRACT_BYTE(x, 5) << 16) | \
-+			 (EXTRACT_BYTE(x, 6) << 8) | EXTRACT_BYTE(x, 7))
-+
-+static inline uint16_t fdt16_to_cpu(fdt16_t x)
-+{
-+	return (FDT_FORCE uint16_t)CPU_TO_FDT16(x);
-+}
-+static inline fdt16_t cpu_to_fdt16(uint16_t x)
-+{
-+	return (FDT_FORCE fdt16_t)CPU_TO_FDT16(x);
-+}
-+
-+static inline uint32_t fdt32_to_cpu(fdt32_t x)
-+{
-+	return (FDT_FORCE uint32_t)CPU_TO_FDT32(x);
-+}
-+static inline fdt32_t cpu_to_fdt32(uint32_t x)
-+{
-+	return (FDT_FORCE fdt32_t)CPU_TO_FDT32(x);
-+}
-+
-+static inline uint64_t fdt64_to_cpu(fdt64_t x)
-+{
-+	return (FDT_FORCE uint64_t)CPU_TO_FDT64(x);
-+}
-+static inline fdt64_t cpu_to_fdt64(uint64_t x)
-+{
-+	return (FDT_FORCE fdt64_t)CPU_TO_FDT64(x);
-+}
-+#undef CPU_TO_FDT64
-+#undef CPU_TO_FDT32
-+#undef CPU_TO_FDT16
-+#undef EXTRACT_BYTE
-+
-+#ifdef __APPLE__
-+#include <AvailabilityMacros.h>
-+
-+/* strnlen() is not available on Mac OS < 10.7 */
-+# if !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED < \
-+                                         MAC_OS_X_VERSION_10_7)
-+
-+#define strnlen fdt_strnlen
-+
-+/*
-+ * fdt_strnlen: returns the length of a string or max_count - which ever is
-+ * smallest.
-+ * Input 1 string: the string whose size is to be determined
-+ * Input 2 max_count: the maximum value returned by this function
-+ * Output: length of the string or max_count (the smallest of the two)
-+ */
-+static inline size_t fdt_strnlen(const char *string, size_t max_count)
-+{
-+    const char *p = memchr(string, 0, max_count);
-+    return p ? p - string : max_count;
-+}
-+
-+#endif /* !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED <
-+          MAC_OS_X_VERSION_10_7) */
-+
-+#endif /* __APPLE__ */
-+
-+#endif /* LIBFDT_ENV_H */
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0011-common-Add-essential-libc-functions.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0011-common-Add-essential-libc-functions.patch
deleted file mode 100644
index b7726f5..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0011-common-Add-essential-libc-functions.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From e2eff4f80e65cb3fcbe6345b5376a6bf7de7e2cc Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 28 Dec 2021 17:28:25 +0800
-Subject: [PATCH] common: Add essential libc functions
-
-The libfdt uses some of the libc functions, e.g. memcmp, memmove,
-strlen .etc. Add them in lib.c.
-
-The code is copied from TF-A (v2.5) [1] project, which is under the
-terms of BSD license. It is the same with boot-wrapper.
-
-[1]: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
-
-Issue-Id: SCM-3814
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: If3b55b00afa8694c7522df989a41e0b38eda1d38
----
- common/lib.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 70 insertions(+), 1 deletion(-)
-
-diff --git a/common/lib.c b/common/lib.c
-index fcf5f69..0be1c4a 100644
---- a/common/lib.c
-+++ b/common/lib.c
-@@ -32,4 +32,73 @@ void *memset(void *s, int c, size_t n)
- 	return s;
- }
- 
--/* TODO: memmove and memcmp could also be called */
-+int memcmp(const void *s1, const void *s2, size_t len)
-+{
-+	const unsigned char *s = s1;
-+	const unsigned char *d = s2;
-+	unsigned char sc;
-+	unsigned char dc;
-+
-+	while (len--) {
-+		sc = *s++;
-+		dc = *d++;
-+		if (sc - dc)
-+			return (sc - dc);
-+	}
-+
-+	return 0;
-+}
-+
-+void *memmove(void *dst, const void *src, size_t len)
-+{
-+	if ((size_t)dst - (size_t)src >= len) {
-+		/* destination not in source data, so can safely use memcpy */
-+		return memcpy(dst, src, len);
-+	} else {
-+		/* copy backwards... */
-+		const char *end = dst;
-+		const char *s = (const char *)src + len;
-+		char *d = (char *)dst + len;
-+		while (d != end)
-+			*--d = *--s;
-+	}
-+	return dst;
-+}
-+
-+void *memchr(const void *src, int c, size_t len)
-+{
-+	const unsigned char *s = src;
-+
-+	while (len--) {
-+		if (*s == (unsigned char)c)
-+			return (void *) s;
-+		s++;
-+	}
-+
-+	return NULL;
-+}
-+
-+char *strrchr(const char *p, int ch)
-+{
-+	char *save;
-+	char c;
-+
-+	c = ch;
-+	for (save = NULL;; ++p) {
-+		if (*p == c)
-+			save = (char *)p;
-+		if (*p == '\0')
-+			return (save);
-+	}
-+	/* NOTREACHED */
-+}
-+
-+size_t strlen(const char *s)
-+{
-+	const char *cursor = s;
-+
-+	while (*cursor)
-+		cursor++;
-+
-+	return cursor - s;
-+}
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0012-Makefile-Add-the-libfdt-to-the-Makefile-system.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0012-Makefile-Add-the-libfdt-to-the-Makefile-system.patch
deleted file mode 100644
index b77ab3e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0012-Makefile-Add-the-libfdt-to-the-Makefile-system.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From f4d5cf4c3424598a2b3bb391717313b70c79ea28 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 28 Dec 2021 17:42:48 +0800
-Subject: [PATCH] Makefile: Add the libfdt to the Makefile system
-
-Add the libfdt into Makefile system. The libfdt uses const value and
-thus gcc will enable the stack guard. The stack guard will fail the
-compile. Add -fno-stack-protector to fix it.
-
-Issue-Id: SCM-3814
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I472bc28cdc5cde3b22461a4b7d7a3752ae382b4b
----
- Makefile.am | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index fc66662..ab2c3a9 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -36,6 +36,9 @@ PSCI_CPU_OFF	:= 0x84000002
- COMMON_SRC	:= common/
- COMMON_OBJ	:= boot.o bakery_lock.o platform.o lib.o
- 
-+LIBFDT_SRC	:= common/libfdt/
-+LIBFDT_OBJS	:= fdt.o fdt_ro.o fdt_rw.o
-+
- ARCH_OBJ	:= boot.o stack.o utils.o
- 
- if BOOTWRAPPER_32
-@@ -127,11 +130,12 @@ CFLAGS		+= -I$(top_srcdir)/include/ -I$(top_srcdir)/$(ARCH_SRC)/include/
- CFLAGS		+= -Wall -fomit-frame-pointer
- CFLAGS		+= -ffreestanding -nostdlib
- CFLAGS		+= -fno-stack-protector
-+CFLAGS 		+= -fno-stack-protector
- CFLAGS		+= -ffunction-sections -fdata-sections
- CFLAGS		+= -fno-pic -fno-pie
- LDFLAGS		+= --gc-sections
- 
--OBJ		:= $(addprefix $(ARCH_SRC),$(ARCH_OBJ)) $(addprefix $(COMMON_SRC),$(COMMON_OBJ))
-+OBJ		:= $(addprefix $(ARCH_SRC),$(ARCH_OBJ)) $(addprefix $(COMMON_SRC),$(COMMON_OBJ)) $(addprefix $(LIBFDT_SRC),$(LIBFDT_OBJS))
- 
- # Don't lookup all prerequisites in $(top_srcdir), only the source files. When
- # building outside the source tree $(ARCH_SRC) needs to be created.
-@@ -152,10 +156,13 @@ $(ARCH_SRC):
- $(COMMON_SRC):
- 	$(MKDIR_P) $@
- 
-+$(LIBFDT_SRC):
-+	$(MKDIR_P) $@
-+
- %.o: %.S Makefile | $(ARCH_SRC)
- 	$(CC) $(CPPFLAGS) -D__ASSEMBLY__ $(CFLAGS) $(DEFINES) -c -o $@ $<
- 
--%.o: %.c Makefile | $(COMMON_SRC)
-+%.o: %.c Makefile | $(COMMON_SRC) $(LIBFDT_SRC)
- 	$(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c -o $@ $<
- 
- model.lds: $(LD_SCRIPT) Makefile
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0013-platform-Add-print_hex-func.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0013-platform-Add-print_hex-func.patch
deleted file mode 100644
index 2346109..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0013-platform-Add-print_hex-func.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From f0ece5e8cac761a76a86df7204bae7c6ef09215f Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Wed, 29 Dec 2021 10:50:21 +0800
-Subject: [PATCH] platform: Add print_hex func
-
-Refine the print functions, and add a new print_hex func to print hex
-numbers.
-
-Issue-Id: SCM-3814
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: Ic960345d9ef0b41d81d30c4a4dbd9c31139907c4
----
- common/platform.c | 33 +++++++++++++++++++++++++--------
- 1 file changed, 25 insertions(+), 8 deletions(-)
-
-diff --git a/common/platform.c b/common/platform.c
-index d11f568..8269392 100644
---- a/common/platform.c
-+++ b/common/platform.c
-@@ -30,20 +30,37 @@
- #define V2M_SYS(reg)	((void *)SYSREGS_BASE + V2M_SYS_##reg)
- #endif
- 
--static void print_string(const char *str)
-+static void print_char(const char c)
- {
- 	uint32_t flags;
-+	do {
-+		flags = raw_readl(PL011(UARTFR));
-+	} while (flags & PL011_UARTFR_FIFO_FULL);
- 
-+	raw_writel(c, PL011(UARTDR));
-+
-+	do {
-+		flags = raw_readl(PL011(UARTFR));
-+	} while (flags & PL011_UARTFR_BUSY);
-+}
-+
-+void print_string(const char *str)
-+{
- 	while (*str) {
--		do
--			flags = raw_readl(PL011(UARTFR));
--		while (flags & PL011_UARTFR_FIFO_FULL);
-+		print_char(*str++);
-+	}
-+}
- 
--		raw_writel(*str++, PL011(UARTDR));
-+#define HEX_CHARS_PER_INT (2 * sizeof(int))
-+
-+void print_hex(unsigned int val)
-+{
- 
--		do
--			flags = raw_readl(PL011(UARTFR));
--		while (flags & PL011_UARTFR_BUSY);
-+	const char hex_chars[16] = "0123456789abcdef";
-+	int i;
-+	for (i = HEX_CHARS_PER_INT - 1; i >= 0; i--) {
-+		int v = (val >> (4 * i)) & 0xf;
-+		print_char(hex_chars[v]);
- 	}
- }
- 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0014-common-Add-mem-usage-to-memreserve.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0014-common-Add-mem-usage-to-memreserve.patch
deleted file mode 100644
index f4ea89c..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0014-common-Add-mem-usage-to-memreserve.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From f4704146e1af9f6e0a2220db6b39a328c813fac1 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Wed, 19 Jan 2022 16:19:02 +0800
-Subject: [PATCH] common: Add mem usage to /memreserve/
-
-Set /memreserve/ to prevent next boot stages from overrding PSCI
-services with libfdt.
-
-Issue-Id: SCM-3815
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I2ea80cdf736a910fa2c3deb622e21d50f04be960
----
- Makefile.am          |  2 +-
- common/boot.c        |  1 +
- common/device_tree.c | 34 ++++++++++++++++++++++++++++++++++
- include/boot.h       |  1 +
- 4 files changed, 37 insertions(+), 1 deletion(-)
- create mode 100644 common/device_tree.c
-
-diff --git a/Makefile.am b/Makefile.am
-index ab2c3a9..e905602 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -34,7 +34,7 @@ endif
- PSCI_CPU_OFF	:= 0x84000002
- 
- COMMON_SRC	:= common/
--COMMON_OBJ	:= boot.o bakery_lock.o platform.o lib.o
-+COMMON_OBJ	:= boot.o bakery_lock.o platform.o lib.o device_tree.o
- 
- LIBFDT_SRC	:= common/libfdt/
- LIBFDT_OBJS	:= fdt.o fdt_ro.o fdt_rw.o
-diff --git a/common/boot.c b/common/boot.c
-index c74d34c..ee2bea0 100644
---- a/common/boot.c
-+++ b/common/boot.c
-@@ -63,6 +63,7 @@ void __noreturn first_spin(unsigned int cpu, unsigned long *mbox,
- {
- 	if (cpu == 0) {
- 		init_platform();
-+		dt_add_memreserve();
- 
- 		*mbox = (unsigned long)&entrypoint;
- 		sevl();
-diff --git a/common/device_tree.c b/common/device_tree.c
-new file mode 100644
-index 0000000..4d0876c
---- /dev/null
-+++ b/common/device_tree.c
-@@ -0,0 +1,34 @@
-+/*
-+ * device_tree.c - Basic device tree node handler
-+ *
-+ * Copyright (C) 2021 ARM Limited. All rights reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license that can be
-+ * found in the LICENSE.txt file.
-+ */
-+#include <libfdt.h>
-+
-+extern unsigned long dtb;
-+extern char firmware_start[], firmware_end[];
-+
-+extern void print_string(const char *str);
-+
-+static void *blob;
-+
-+
-+void dt_add_memreserve(void)
-+{
-+	int ret;
-+
-+	blob = (void*)&dtb;
-+	print_string("Add /memreserve/\n\r");
-+
-+	fdt_open_into(blob, blob, fdt_totalsize(blob) +
-+		      sizeof(struct fdt_reserve_entry));
-+	ret = fdt_add_mem_rsv(blob, (uint64_t)firmware_start,
-+			      (uint64_t)(firmware_end - firmware_start));
-+
-+	if(ret < 0) {
-+		print_string("reserve mem add err\n\r");
-+	}
-+}
-diff --git a/include/boot.h b/include/boot.h
-index d75e013..c3e2ec1 100644
---- a/include/boot.h
-+++ b/include/boot.h
-@@ -16,4 +16,5 @@ void __noreturn spin(unsigned long *mbox, unsigned long invalid, int is_entry);
- void __noreturn first_spin(unsigned int cpu, unsigned long *mbox,
- 			   unsigned long invalid_addr);
- 
-+void dt_add_memreserve(void);
- #endif
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0015-boot-Add-the-enable-keep-el-compile-option.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0015-boot-Add-the-enable-keep-el-compile-option.patch
deleted file mode 100644
index 7d59e5f..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0015-boot-Add-the-enable-keep-el-compile-option.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 5995f83592aea874f5b423538e36675e2204582b Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 4 Jan 2022 17:01:55 +0800
-Subject: [PATCH] boot: Add the --enable-keep-el compile option
-
-Add --enable-keep-el compile option to enable boot-wrapper booting next
-stage at EL2.
-The Armv8R AArch64 boots at EL2. If the next stage requires EL2 booting,
-the boot-wrapper should not drop to EL1.
-Currently, this option only works for Armv8R AArch64. Also, to work with
-Linux PSCI, this option will cause secondary cores booting at EL1.
-
-Issue-Id: SCM-3813
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I3ba9c87cf0b59d163ca433f74c9e3a46e5ca2c63
----
- Makefile.am         | 4 ++++
- arch/aarch64/boot.S | 6 +++++-
- common/psci.c       | 6 ++++++
- configure.ac        | 5 +++++
- 4 files changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index e905602..6604baa 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -33,6 +33,10 @@ PSCI_CPU_ON	:= 0xc4000003
- endif
- PSCI_CPU_OFF	:= 0x84000002
- 
-+if KEEP_EL
-+DEFINES		+= -DKEEP_EL
-+endif
-+
- COMMON_SRC	:= common/
- COMMON_OBJ	:= boot.o bakery_lock.o platform.o lib.o device_tree.o
- 
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index 27b1139..c079d22 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -254,7 +254,11 @@ el2_init:
- 	msr	cnthctl_el2, x0
- 	isb
- 
-+#ifdef KEEP_EL
-+	mov	w0, #SPSR_KERNEL
-+#else
- 	mov	w0, #SPSR_KERNEL_EL1
-+#endif
- 	ldr	x1, =spsr_to_elx
- 	str	w0, [x1]
- 	// fall through
-@@ -334,5 +338,5 @@ ASM_FUNC(jump_kernel)
- 	.align 3
- flag_keep_el:
- 	.long 0
--spsr_to_elx:
-+ASM_DATA(spsr_to_elx)
- 	.long 0
-diff --git a/common/psci.c b/common/psci.c
-index a0e8700..945780b 100644
---- a/common/psci.c
-+++ b/common/psci.c
-@@ -18,6 +18,8 @@
- #error "No MPIDRs provided"
- #endif
- 
-+extern unsigned int spsr_to_elx;
-+
- static unsigned long branch_table[NR_CPUS];
- 
- bakery_ticket_t branch_table_lock[NR_CPUS];
-@@ -44,6 +46,10 @@ static int psci_cpu_on(unsigned long target_mpidr, unsigned long address)
- 	ret = psci_store_address(cpu, address);
- 	bakery_unlock(branch_table_lock, this_cpu);
- 
-+#ifdef KEEP_EL
-+	spsr_to_elx = SPSR_KERNEL_EL1;
-+#endif
-+
- 	return ret;
- }
- 
-diff --git a/configure.ac b/configure.ac
-index 53e51be..0e07db3 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -25,6 +25,11 @@ AS_IF([test "x$BOOTWRAPPER_ES" = x32 -a "x$KERNEL_ES" != x32],
- 	[AC_MSG_ERROR([a 32-bit boot-wrapper cannot launch a 64-bit kernel])]
- )
- 
-+AC_ARG_ENABLE([keep-el],
-+	AC_HELP_STRING([--enable-keep-el], [keep exception level when start kernel]),
-+	[KEEP_EL=yes], [KEEP_EL=no])
-+AM_CONDITIONAL([KEEP_EL], [test "x$KEEP_EL" = xyes])
-+
- # Allow a user to pass --with-kernel-dir
- AC_ARG_WITH([kernel-dir],
- 	AS_HELP_STRING([--with-kernel-dir], [specify the root Linux kernel build directory (required)]),
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0016-Makefile-Change-COUNTER_FREQ-to-100-MHz.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0016-Makefile-Change-COUNTER_FREQ-to-100-MHz.patch
deleted file mode 100644
index e93a300..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0016-Makefile-Change-COUNTER_FREQ-to-100-MHz.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 0c0695cd3160ccdb95bae29b7668918015c0b6aa Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Tue, 1 Feb 2022 11:28:46 +0000
-Subject: [PATCH] Makefile: Change COUNTER_FREQ to 100 MHz
-
-Older Arm Fast Models (AEM < RevC) had a base frequency of 24 MHz. but
-the RevC base models use 100 MHz. There is not a robust method of
-determining the configured base frequency at runtime, so update
-COUNTER_FREQ to be 100 MHz.
-
-Issue-Id: SCM-3871
-Upstream-Status: Pending
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: Ia9ad0f8ee488d1a887791f1fa1d8f3bf9c5887fd
----
- Makefile.am | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 6604baa..cc6504e 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -13,7 +13,7 @@ SCRIPT_DIR	:= $(top_srcdir)/scripts
- PHYS_OFFSET	:= $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/findmem.pl $(KERNEL_DTB))
- UART_BASE	:= $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/findbase.pl $(KERNEL_DTB) 0 'arm,pl011')
- SYSREGS_BASE	:= $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/findbase.pl $(KERNEL_DTB) 0 'arm,vexpress-sysreg' 2> /dev/null)
--COUNTER_FREQ	:= 24000000
-+COUNTER_FREQ	:= 100000000
- 
- CPU_IDS		:= $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/findcpuids.pl $(KERNEL_DTB))
- NR_CPUS         := $(shell echo $(CPU_IDS) | tr ',' ' ' | wc -w)
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0017-PSCI-Apply-flush-cache-after-setting-branch_data.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0017-PSCI-Apply-flush-cache-after-setting-branch_data.patch
deleted file mode 100644
index b63d8d1..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0017-PSCI-Apply-flush-cache-after-setting-branch_data.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From fa73d885be85eee4369b292ec601e7b024a68807 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 2 Nov 2021 10:48:39 +0800
-Subject: [PATCH] PSCI: Apply flush cache after setting branch_data
-
-For v8-R64, Hypervisor calls boot-wrapper's PSCI service using simple
-function call (instead of hvc).
-
-In this case, hypervisor's main core has enabled MPU and cache, but
-the secondary cores which are spinning have not enabled cache.
-That means if the main core set the branch_data to 1 to boot other
-cores, the secondary cores cannot see the change of branch_data and
-also cannot break the spin.
-
-Thus, the PSCI service in boot-wrapper needs a cache flush after
-setting branch_data in order to let other cores see the change.
-
-Issue-ID: SCM-3816
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: Ifc282091c54d8fb2ffdb8cfa7fd3ffc1f4be717e
----
- common/psci.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/common/psci.c b/common/psci.c
-index 945780b..6efc695 100644
---- a/common/psci.c
-+++ b/common/psci.c
-@@ -24,12 +24,18 @@ static unsigned long branch_table[NR_CPUS];
- 
- bakery_ticket_t branch_table_lock[NR_CPUS];
- 
-+static inline void flush_per_cpu_data(void *data)
-+{
-+	asm volatile ("dc cvac, %0" : : "r" (data));
-+}
-+
- static int psci_store_address(unsigned int cpu, unsigned long address)
- {
- 	if (branch_table[cpu] != PSCI_ADDR_INVALID)
- 		return PSCI_RET_ALREADY_ON;
- 
- 	branch_table[cpu] = address;
-+	flush_per_cpu_data((void*)&(branch_table[cpu]));
- 	return PSCI_RET_SUCCESS;
- }
- 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0018-PSCI-Add-function-call-entry-point.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0018-PSCI-Add-function-call-entry-point.patch
deleted file mode 100644
index dd2b965..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0018-PSCI-Add-function-call-entry-point.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 9da48e3433b919868650cd60e28827273a42c63b Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 25 Jan 2022 14:56:36 +0800
-Subject: [PATCH] PSCI: Add function call entry point
-
-The max exception level of Armv8R AArch64 is EL2, which means it has no
-exclusive EL for firmware. That is, firmware and hypervisors have to share
-the EL2. Also, hypervisors cannot call firmware services via a 'smc'
-instruction. Thus, boot-wrapper has to provide a function entry point
-for Armv8R AArch64.
-
-Issue-Id: SCM-3816
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I06ec8e50298603155c6d8ae2330e71db2f111182
----
- common/psci.c | 24 ++++++++++++++++++++----
- 1 file changed, 20 insertions(+), 4 deletions(-)
-
-diff --git a/common/psci.c b/common/psci.c
-index 6efc695..8fdefb5 100644
---- a/common/psci.c
-+++ b/common/psci.c
-@@ -20,6 +20,8 @@
- 
- extern unsigned int spsr_to_elx;
- 
-+unsigned long flag_from_smc_fn[NR_CPUS];
-+
- static unsigned long branch_table[NR_CPUS];
- 
- bakery_ticket_t branch_table_lock[NR_CPUS];
-@@ -49,12 +51,14 @@ static int psci_cpu_on(unsigned long target_mpidr, unsigned long address)
- 		return PSCI_RET_INVALID_PARAMETERS;
- 
- 	bakery_lock(branch_table_lock, this_cpu);
--	ret = psci_store_address(cpu, address);
--	bakery_unlock(branch_table_lock, this_cpu);
--
- #ifdef KEEP_EL
--	spsr_to_elx = SPSR_KERNEL_EL1;
-+	if (!flag_from_smc_fn[this_cpu]) {
-+		spsr_to_elx = SPSR_KERNEL_EL1;
-+		flush_per_cpu_data((void*)&(spsr_to_elx));
-+	}
- #endif
-+	ret = psci_store_address(cpu, address);
-+	bakery_unlock(branch_table_lock, this_cpu);
- 
- 	return ret;
- }
-@@ -90,6 +94,18 @@ long psci_call(unsigned long fid, unsigned long arg1, unsigned long arg2)
- 	}
- }
- 
-+long smc_fn_entry(unsigned long fid, unsigned long arg1, unsigned long arg2)
-+{
-+	long ret;
-+	unsigned int this_cpu = this_cpu_logical_id();
-+
-+	flag_from_smc_fn[this_cpu] = 1;
-+	ret = psci_call(fid, arg1, arg2);
-+	flag_from_smc_fn[this_cpu] = 0;
-+
-+	return ret;
-+}
-+
- void __noreturn psci_first_spin(unsigned int cpu)
- {
- 	if (cpu == MPIDR_INVALID)
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0019-lds-Rearrange-and-mark-the-sections.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0019-lds-Rearrange-and-mark-the-sections.patch
deleted file mode 100644
index c0d1fcb..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0019-lds-Rearrange-and-mark-the-sections.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 7c5e40d9f8699a55ac2187c035429c643e6d0ef0 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Tue, 2 Nov 2021 15:10:28 +0800
-Subject: [PATCH] lds: Rearrange and mark the sections
-
-To make it possible for the next stage to protect sections with MPU,
-boot-wrapper needs to provide the text and data section information.
-By rearranging the .data .rodata and .vector sections, all sections
-can be split into 2 big sections:
- - RO and Executable
- - RW and Non-Executable
-Add firmware_data to mark the boundry, thus:
-firmware_start to firmware_data - 1 indicates RO and Executable section,
-firmware_data to firmware_end - 1 indicates RW and Non-Executable
-section.
-
-Also, the firmware_data and firmware_end should align with 64 bytes,
-since Armv8R AArch64 MPU requires it.
-
-Issue-ID: SCM-3816
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I55342aa7492f2c7b5c16ab9a6472c8cb45cff8fd
----
- model.lds.S | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/model.lds.S b/model.lds.S
-index ab98ddf..85451f9 100644
---- a/model.lds.S
-+++ b/model.lds.S
-@@ -63,12 +63,16 @@ SECTIONS
- 	}
- #endif
- 
-+#define FIRMWARE_ALIGN . = ALIGN(1 << 6)
- 	.boot PHYS_OFFSET: {
- 		PROVIDE(firmware_start = .);
- 		*(.init)
- 		*(.text*)
--		*(.data* .rodata* .bss* COMMON)
- 		*(.vectors)
-+		*(.rodata*)
-+		FIRMWARE_ALIGN;
-+		PROVIDE(firmware_data = .);
-+		*(.data* .bss* COMMON)
- 		*(.stack)
- 		PROVIDE(etext = .);
- 	}
-@@ -77,6 +81,7 @@ SECTIONS
- 		mbox = .;
- 		QUAD(0x0)
- 	}
-+	FIRMWARE_ALIGN;
- 	PROVIDE(firmware_end = .);
- 
- 	ASSERT(etext <= (PHYS_OFFSET + TEXT_LIMIT), ".text overflow!")
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0020-common-Provide-firmware-info-using-libfdt.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0020-common-Provide-firmware-info-using-libfdt.patch
deleted file mode 100644
index 1573be0..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0020-common-Provide-firmware-info-using-libfdt.patch
+++ /dev/null
@@ -1,342 +0,0 @@
-From 3c1140c29c39561848056fb4b9a03042b00279f3 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Wed, 29 Dec 2021 15:17:38 +0800
-Subject: [PATCH] common: Provide firmware info using libfdt
-
-Boot-wrapper uses libfdt to provide more info in device tree.
-We add a new node to include those new firmware relevant infomation.
-The new node defined as follows:
-  fw-shared-info {
-        compatible = "firmware,shared_info";
-
-        #address-cells = <0x02>;
-        #size-cells = <0x02>;
-
-        version = "1.0";
-        regions = <START_ADDR_HIGH START_ADDR_LOW SIZE_HIGH SIZE_LOW
-                   0x0 0x80000000 0x0 0x400000
-                   0x0 0x90000000 0x0 0x400000
-                   0x0 0xA0000000 0x0 0x400000>;
-        regions-permission = "RX", "R", "RWX", "RW";
-        regions-cache = "Cache", "NCache", "Cache", "Device"
-
-        function_entry = <ENTRY_ADDR_HIGH ENRTY_ADDR_LOW>;
-  };
-The node path is /fw-shared-info.
-For boot-wrapper, in real case, it will be:
-  fw-shared-info {
-        compatible = "firmware,shared_info";
-
-        #address-cells = <0x02>;
-        #size-cells = <0x02>;
-
-        version = "1.0";
-        regions = <0x0 firmware_start 0x0 firmware_code_size
-                   0x0 firmware_data 0x0 firmware_data_size>;
-        regions-permission = "RX", "RW";
-        regions-cache = "Cache", "Cache";
-
-        function_entry = <0x0 smc_fn_entry>;
-  };
-
-Issue-Id: SCM-3816
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: I6ebc59ce2bd3939b0fe066720d57821eaa1bed27
----
- common/device_tree.c | 271 ++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 270 insertions(+), 1 deletion(-)
-
-diff --git a/common/device_tree.c b/common/device_tree.c
-index 4d0876c..7f7befc 100644
---- a/common/device_tree.c
-+++ b/common/device_tree.c
-@@ -8,13 +8,225 @@
-  */
- #include <libfdt.h>
- 
-+#define DEVICE_TREE_DEBUG 1
-+
-+#define FW_NODE_NAME	"/fw-shared-info"
-+#define FW_COMPAT	"firmware,shared_info"
-+#define FW_INFO_VER	"1.0"
-+
-+#ifdef BOOTWRAPPER_32
-+#define CELL_NUM	1
-+#define VAL_TYPE	uint32_t
-+#else
-+#define CELL_NUM	2
-+#define VAL_TYPE	uint64_t
-+#endif
-+
-+#define ALIGN(x)	(((x) + (FDT_TAGSIZE) - 1) & ~((FDT_TAGSIZE) - 1))
-+
- extern unsigned long dtb;
--extern char firmware_start[], firmware_end[];
-+extern char firmware_start[], firmware_data[], firmware_end[];
-+
-+extern long smc_fn_entry(unsigned long, unsigned long, unsigned long);
- 
- extern void print_string(const char *str);
-+extern void print_hex(unsigned int val);
- 
- static void *blob;
- 
-+static char *realloc_node(char *fdt, const char *name)
-+{
-+	int delta;
-+	int new_sz;
-+	/* FDT_BEGIN_NODE, node name in off_struct and FDT_END_NODE */
-+	delta = sizeof(struct fdt_node_header) + ALIGN(strlen(name) + 1)
-+			+ FDT_TAGSIZE;
-+	new_sz = fdt_totalsize(fdt) + delta;
-+	fdt_open_into(fdt, fdt, new_sz);
-+	return fdt;
-+}
-+
-+static int create_node(const char *node_name)
-+{
-+	int node = 0;
-+	char *p;
-+
-+	p = strrchr(node_name, '/');
-+	if (!p) {
-+		print_string("node name without '/'\r\n");
-+		return -1;
-+	}
-+	*p = '\0';
-+
-+	blob = realloc_node(blob, p + 1);
-+
-+	if (p > node_name) {
-+		node = fdt_path_offset(blob, node_name);
-+		if (node < 0) {
-+			print_string("no node name\r\n");
-+			return -1;
-+		}
-+	}
-+
-+	node = fdt_add_subnode(blob, node, p + 1);
-+	if (node < 0) {
-+		print_string("add subnode err\r\n");
-+		return -1;
-+	}
-+
-+	return node;
-+}
-+
-+static int dt_create_fw_node(void) {
-+	int fw_node;
-+
-+	fw_node = fdt_path_offset(blob, FW_NODE_NAME);
-+
-+	if(fw_node < 0) {
-+		fw_node = create_node(FW_NODE_NAME);
-+	}
-+
-+	return fw_node;
-+}
-+
-+static char *realloc_property(char *fdt, int nodeoffset, const char *name,
-+			      int newlen)
-+{
-+	int delta = 0;
-+	int oldlen = 0;
-+	int new_sz;
-+
-+	if (!fdt_get_property(fdt, nodeoffset, name, &oldlen))
-+		delta = sizeof(struct fdt_property) + strlen(name) + 1;
-+
-+	if (newlen > oldlen)
-+		delta += ALIGN(newlen) - ALIGN(oldlen);
-+
-+	new_sz = fdt_totalsize(fdt) + delta;
-+	fdt_open_into(fdt, fdt, new_sz);
-+	return fdt;
-+}
-+
-+static void dt_set_prop(int node, char *property, void *buf, int len)
-+{
-+	int err;
-+
-+	err = fdt_setprop(blob, node, property, buf, len);
-+	if (err == -FDT_ERR_NOSPACE) {
-+		blob = realloc_property(blob, node, property, len);
-+		err = fdt_setprop(blob, node, property, buf, len);
-+	}
-+	if (err) {
-+		print_string("fdt error\n\r");
-+	}
-+}
-+
-+static void dt_set_prop_u32(int node, char *property, uint32_t val)
-+{
-+	fdt32_t fdt_val = cpu_to_fdt32(val);
-+	int len = sizeof(fdt32_t);
-+
-+	dt_set_prop(node, property, (void*)&fdt_val, len);
-+}
-+
-+static void dt_set_prop_u64(int node, char *property, uint64_t val)
-+{
-+	fdt64_t fdt_val = cpu_to_fdt64(val);
-+	int len = sizeof(fdt64_t);
-+
-+	dt_set_prop(node, property, (void*)&fdt_val, len);
-+}
-+
-+/* This dt_set_prop_u32_array maybe unused according to the BOOTWRAPPER_32 */
-+__attribute__((unused))
-+static void dt_set_prop_u32_array(int node, char *property, uint32_t *vals,
-+				       int size)
-+{
-+	fdt32_t *fdt_vals = (fdt32_t*)vals;
-+	int len = sizeof(fdt32_t) * size;
-+
-+	for (int i = 0; i < size; i++) {
-+		fdt_vals[i] = cpu_to_fdt32(vals[i]);
-+	}
-+
-+	dt_set_prop(node, property, (void*)fdt_vals, len);
-+}
-+
-+static void dt_set_prop_u64_array(int node, char *property, uint64_t *vals,
-+				       int size)
-+{
-+	fdt64_t *fdt_vals = (fdt64_t*)vals;
-+	int len = sizeof(fdt64_t) * size;
-+
-+	for (int i = 0; i < size; i++) {
-+		fdt_vals[i] = cpu_to_fdt64(vals[i]);
-+	}
-+
-+	dt_set_prop(node, property, (void*)fdt_vals, len);
-+}
-+
-+#if DEVICE_TREE_DEBUG
-+static void dt_dump_string(const void *s, int len)
-+{
-+	char *sub = (char*)s;
-+	int sublen;
-+	while(*sub && ((uint64_t)sub - (uint64_t)s) < len) {
-+		sublen = strlen(sub) + 1;
-+		print_string(sub);
-+		print_string(" ");
-+		sub += sublen;
-+	}
-+	print_string("\n\r");
-+}
-+
-+static void dt_dump_fdt32_array(const void *vals, int len)
-+{
-+	fdt32_t *fdt_vals = (fdt32_t*)vals;
-+	len = len / sizeof(fdt32_t);
-+	for (int i = 0; i < len; i++) {
-+		print_hex(fdt32_to_cpu(fdt_vals[i]));
-+		print_string(" ");
-+	}
-+	print_string("\n\r");
-+}
-+
-+static void dt_dump(int node, char *property, char type)
-+{
-+	const void *val;
-+	int len;
-+
-+	val = fdt_getprop(blob, node, property, &len);
-+	print_string(property);
-+	print_string(": ");
-+
-+	if (type == 's') {
-+		/* string type */
-+		dt_dump_string(val, len);
-+		return;
-+	}
-+
-+	/* uint type */
-+	dt_dump_fdt32_array(val, len);
-+}
-+
-+void dt_dump_all(int node)
-+{
-+	if (node >= 0) {
-+		print_string(FW_NODE_NAME" info:\r\n");
-+		dt_dump(node, "compatible", 's');
-+		dt_dump(node, "version", 's');
-+		dt_dump(node, "function_entry", 'i');
-+		dt_dump(node, "address-cells", 'i');
-+		dt_dump(node, "size-cells", 'i');
-+		dt_dump(node, "regions", 'i');
-+		dt_dump(node, "regions-permission", 's');
-+		dt_dump(node, "regions-cache", 's');
-+		print_string("\r\n");
-+	}
-+}
-+#else
-+void dt_dump_all(int node) { (void*)node; return; }
-+#endif
- 
- void dt_add_memreserve(void)
- {
-@@ -32,3 +244,60 @@ void dt_add_memreserve(void)
- 		print_string("reserve mem add err\n\r");
- 	}
- }
-+
-+void dt_fw_node_init(int enable)
-+{
-+	int fw_node;
-+
-+	VAL_TYPE regions[] = {
-+		/* code region: start, end, ro, x, cachable */
-+		(VAL_TYPE)firmware_start,
-+		(VAL_TYPE)(firmware_data - firmware_start),
-+		/* data region: start, end, rw, xn, cachable */
-+		(VAL_TYPE)firmware_data,
-+		(VAL_TYPE)(firmware_end - firmware_data),
-+	};
-+	int regions_num = sizeof(regions) / sizeof(VAL_TYPE);
-+	char regions_permission[] = "RX\0RW";
-+	char regions_cache[] = "Cache\0Cache";
-+
-+	if (!enable)
-+		return;
-+
-+	print_string("Prepare "FW_NODE_NAME" node\n\r");
-+
-+	blob = (void*)&dtb;
-+
-+	if(fdt_path_offset(blob, "/psci") < 0) {
-+		print_string("/psci node not found\n\r");
-+		return;
-+	}
-+
-+	fw_node = dt_create_fw_node();
-+
-+	if(fw_node < 0) {
-+		print_string(FW_NODE_NAME" node create err\n\r");
-+	}
-+
-+	dt_set_prop(fw_node, "compatible", FW_COMPAT, sizeof(FW_COMPAT));
-+	dt_set_prop(fw_node, "version", FW_INFO_VER, sizeof(FW_INFO_VER));
-+
-+	dt_set_prop_u32(fw_node, "address-cells", CELL_NUM);
-+	dt_set_prop_u32(fw_node, "size-cells", CELL_NUM);
-+	dt_set_prop(fw_node, "regions-permission", regions_permission,
-+		    sizeof(regions_permission));
-+	dt_set_prop(fw_node, "regions-cache", regions_cache,
-+		    sizeof(regions_cache));
-+
-+#ifdef BOOTWRAPPER_32
-+	dt_set_prop_u32_array(fw_node, "regions", regions, regions_num);
-+	dt_set_prop_u32(fw_node, "function_entry", (VAL_TYPE)smc_fn_entry);
-+#else
-+	dt_set_prop_u64_array(fw_node, "regions", regions, regions_num);
-+	dt_set_prop_u64(fw_node, "function_entry", (VAL_TYPE)smc_fn_entry);
-+#endif
-+
-+	fdt_pack(blob);
-+
-+	dt_dump_all(fw_node);
-+}
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0021-boot-Enable-firmware-node-initialization.patch b/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0021-boot-Enable-firmware-node-initialization.patch
deleted file mode 100644
index 9b367a7..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0021-boot-Enable-firmware-node-initialization.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From b1105e862e8f770fc195bc20e9c64d231dd32f66 Mon Sep 17 00:00:00 2001
-From: Jaxson Han <jaxson.han@arm.com>
-Date: Wed, 29 Dec 2021 15:33:17 +0800
-Subject: [PATCH] boot: Enable firmware node initialization
-
-Enable the firmware node initialization, so that the next stage
-(hypervisor) could share the EL2 with firmware (boot-wrapper). The next
-stage (hypervisor) get the smccc entry point, code/data sections, the
-sections attrs and firmware node version and so on.
-It is worth noting that this EL2 sharing mechanism is only for Armv8R
-AArch64, thus add flag_v8r to record if the arch is Armv8R AArch64.
-Enable the firmware node initialization only if it is Armv8R AArch64.
-Also, we increase the stack size to 1024 to fix the stack overflow issue
-when using the libfdt.
-
-Add -fno-builtin options to CFLAGS to avoid the issue that the 'memset'
-in common/lib.c conflicts with builtin 'memset' function. GCC version
->= 10 will have an incorrect compilation without -fno-builtin;
-
-Issue-Id: SCM-3816
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Jaxson Han <jaxson.han@arm.com>
-Change-Id: Ib274485a34d26215595fd0cd737be86610289817
----
- Makefile.am         | 4 ++--
- arch/aarch64/boot.S | 6 ++++++
- common/boot.c       | 4 ++++
- 3 files changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index cc6504e..fbe6b81 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -23,7 +23,7 @@ DEFINES		+= -DCPU_IDS=$(CPU_IDS)
- DEFINES		+= -DNR_CPUS=$(NR_CPUS)
- DEFINES		+= $(if $(SYSREGS_BASE), -DSYSREGS_BASE=$(SYSREGS_BASE), )
- DEFINES		+= -DUART_BASE=$(UART_BASE)
--DEFINES		+= -DSTACK_SIZE=256
-+DEFINES		+= -DSTACK_SIZE=1024
- 
- if KERNEL_32
- DEFINES		+= -DKERNEL_32
-@@ -134,7 +134,7 @@ CFLAGS		+= -I$(top_srcdir)/include/ -I$(top_srcdir)/$(ARCH_SRC)/include/
- CFLAGS		+= -Wall -fomit-frame-pointer
- CFLAGS		+= -ffreestanding -nostdlib
- CFLAGS		+= -fno-stack-protector
--CFLAGS 		+= -fno-stack-protector
-+CFLAGS 		+= -fno-stack-protector -fno-builtin
- CFLAGS		+= -ffunction-sections -fdata-sections
- CFLAGS		+= -fno-pic -fno-pie
- LDFLAGS		+= --gc-sections
-diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
-index c079d22..daaa674 100644
---- a/arch/aarch64/boot.S
-+++ b/arch/aarch64/boot.S
-@@ -261,6 +261,10 @@ el2_init:
- #endif
- 	ldr	x1, =spsr_to_elx
- 	str	w0, [x1]
-+
-+	mov	w0, #1
-+	ldr	x1, =flag_v8r
-+	str	w0, [x1]
- 	// fall through
- 
- el_max_init:
-@@ -340,3 +344,5 @@ flag_keep_el:
- 	.long 0
- ASM_DATA(spsr_to_elx)
- 	.long 0
-+ASM_DATA(flag_v8r)
-+	.long 0
-diff --git a/common/boot.c b/common/boot.c
-index ee2bea0..38b2dca 100644
---- a/common/boot.c
-+++ b/common/boot.c
-@@ -11,6 +11,9 @@
- 
- extern unsigned long entrypoint;
- extern unsigned long dtb;
-+extern unsigned int  flag_v8r;
-+
-+extern void dt_fw_node_init(int enable);
- 
- void init_platform(void);
- 
-@@ -64,6 +67,7 @@ void __noreturn first_spin(unsigned int cpu, unsigned long *mbox,
- 	if (cpu == 0) {
- 		init_platform();
- 		dt_add_memreserve();
-+		dt_fw_node_init(flag_v8r == 1);
- 
- 		*mbox = (unsigned long)&entrypoint;
- 		sevl();
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
index 3f66bed..ee07137 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
@@ -38,7 +38,8 @@
                         NR_OF_IMAGES_IN_FW_BANK=4 \
                         COT=tbbr \
                         ARM_ROTPK_LOCATION=devel_rsa  \
+                        ERRATA_A35_855472=1 \
                         ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \
-                        BL32=${RECIPE_SYSROOT}/lib/firmware/tee-pager_v2.bin \
+                        BL32=${RECIPE_SYSROOT}/${nonarch_base_libdir}/firmware/tee-pager_v2.bin \
                         LOG_LEVEL=50 \
                         "
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
index c2fa223..900decc 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
@@ -36,6 +36,6 @@
 		    CREATE_KEYS=1 \
 		    ARM_ROTPK_LOCATION="devel_rsa" \
 		    ROT_KEY="${TFA_ROT_KEY}" \
-		    BL32=${RECIPE_SYSROOT}/lib/firmware/tee-pager_v2.bin \
+		    BL32=${RECIPE_SYSROOT}/${nonarch_base_libdir}/firmware/tee-pager_v2.bin \
 		    BL33=${RECIPE_SYSROOT}/firmware/uefi.bin \
 		    "
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-tc.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-tc.inc
index e17a8f5..c14629f 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-tc.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-tc.inc
@@ -27,7 +27,7 @@
 # Set optee as SP. Set spmc manifest and sp layout file to optee
 DEPENDS += "optee-os"
 
-TFA_SP_LAYOUT_FILE = "${RECIPE_SYSROOT}/lib/firmware/sp_layout.json"
+TFA_SP_LAYOUT_FILE = "${RECIPE_SYSROOT}/${nonarch_base_libdir}/firmware/sp_layout.json"
 TFA_ARM_SPMC_MANIFEST_DTS = "plat/arm/board/tc/fdts/tc_spmc_optee_sp_manifest.dts"
 
 EXTRA_OEMAKE += "SCP_BL2=${RECIPE_SYSROOT}/firmware/scp_ramfw.bin"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch
new file mode 100644
index 0000000..49c336d
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch
@@ -0,0 +1,102 @@
+From fa0988fd876400dc1bb451fffc4b167265b40d25 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Thu, 14 Sep 2023 12:14:28 +0100
+Subject: [PATCH] Platform: Corstone1000: Enable Signed Capsule
+
+Enables signed capsule update and adjusts the necessary structs (fmp_payload_header
+, image_auth, etc.) to comply with the new capsule generation tool (mkeficapsule).
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ .../fw_update_agent/uefi_capsule_parser.c     | 25 +++++++++++--------
+ .../fw_update_agent/uefi_capsule_parser.h     |  2 ++
+ 2 files changed, 17 insertions(+), 10 deletions(-)
+
+diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
+index b72ff1eb91..c706c040ac 100644
+--- a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
++++ b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
+@@ -102,11 +102,9 @@ enum uefi_capsule_error_t uefi_capsule_retrieve_images(void* capsule_ptr,
+     }
+ 
+     capsule_header = (efi_capsule_header_t*)ptr;
+-    ptr += sizeof(efi_capsule_header_t) + sizeof(uint32_t);
++    ptr += sizeof(efi_capsule_header_t);
+     fmp_capsule_header = (efi_firmware_management_capsule_header_t*)ptr;
+ 
+-    fmp_payload_header = fmp_capsule_header + sizeof(*fmp_capsule_header);
+-
+     total_size = capsule_header->capsule_image_size;
+     image_count = fmp_capsule_header->payload_item_count;
+     images_info->nr_image = image_count;
+@@ -119,22 +117,20 @@ enum uefi_capsule_error_t uefi_capsule_retrieve_images(void* capsule_ptr,
+     }
+ 
+     for (int i = 0; i < image_count; i++) {
+-
+         image_header = (efi_firmware_management_capsule_image_header_t*)(ptr +
+                                 fmp_capsule_header->item_offset_list[i]);
+ 
+         images_info->size[i] = image_header->update_image_size;
+-        images_info->version[i] = fmp_payload_header->fw_version;
+-        FWU_LOG_MSG("%s: image %i version = %u\n\r", __func__, i,
+-                                images_info->version[i]);
++
+ #ifdef AUTHENTICATED_CAPSULE
+         image_auth = (efi_firmware_image_authentication_t*)(
+                         (char*)image_header +
+                         sizeof (efi_firmware_management_capsule_image_header_t)
+                      );
+         auth_size = sizeof(uint64_t) /* monotonic_count */  +
+-                    image_auth->auth_info.hdr.dwLength /* WIN_CERTIFICATE + cert_data */ +
+-                    sizeof(struct efi_guid) /* cert_type */;
++                    image_auth->auth_info.hdr.dwLength/* WIN_CERTIFICATE + cert_data + cert_type */;
++
++        fmp_payload_header = (fmp_payload_header_t*)((char*)image_auth + auth_size);
+ 
+         FWU_LOG_MSG("%s: auth size = %u\n\r", __func__, auth_size);
+ 
+@@ -143,16 +139,25 @@ enum uefi_capsule_error_t uefi_capsule_retrieve_images(void* capsule_ptr,
+         images_info->image[i] = (
+                 (char*)image_header +
+                 sizeof(efi_firmware_management_capsule_image_header_t) +
+-                auth_size);
++                auth_size +
++                sizeof(*fmp_payload_header));
+ #else
+         images_info->image[i] = (
+                 (char*)image_header +
+                 sizeof(efi_firmware_management_capsule_image_header_t) +
+                 sizeof(*fmp_payload_header));
++
++        fmp_payload_header = (fmp_payload_header_t*)((char*)image_header +
++                sizeof(efi_firmware_management_capsule_image_header_t));
++
+ #endif
+         memcpy(&images_info->guid[i], &(image_header->update_image_type_id),
+                                                         sizeof(struct efi_guid));
+ 
++        images_info->version[i] = fmp_payload_header->fw_version;
++        FWU_LOG_MSG("%s: image %i version = %d\n\r", __func__, i,
++                                images_info->version[i]);
++
+         FWU_LOG_MSG("%s: image %d at %p, size=%u\n\r", __func__, i,
+                         images_info->image[i], images_info->size[i]);
+ 
+diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.h b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.h
+index a890a709e9..a31cd8a3a0 100644
+--- a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.h
++++ b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.h
+@@ -12,6 +12,8 @@
+ #include "fip_parser/external/uuid.h"
+ #include "flash_layout.h"
+ 
++#define AUTHENTICATED_CAPSULE 1
++
+ enum uefi_capsule_error_t {
+     UEFI_CAPSULE_PARSER_SUCCESS = 0,
+     UEFI_CAPSULE_PARSER_ERROR = (-1)
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
index a259390..601d165 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
@@ -33,6 +33,7 @@
     file://0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch \
     file://0004-arm-trusted-firmware-m-disable-fatal-warnings.patch \
     file://0005-Platform-corstone1000-add-unique-firmware-GUID.patch \
+    file://0006-Platform-Corstone1000-Enable-Signed-Capsule.patch \
     "
 
 # TF-M ships patches for external dependencies that needs to be applied
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch
new file mode 100644
index 0000000..25a7aa3
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch
@@ -0,0 +1,137 @@
+From a37ab0c2578a4627111022d2d1f27f9efa1c2b76 Mon Sep 17 00:00:00 2001
+From: Sughosh Ganu <sughosh.ganu@linaro.org>
+Date: Thu, 21 Sep 2023 14:13:42 +0100
+Subject: [PATCH 35/37] dt: Provide a way to remove non-compliant nodes and
+ properties
+
+Add a function which is registered to spy for a EVT_FT_FIXUP event,
+and removes the non upstreamed nodes and properties from the
+devicetree before it gets passed to the OS.
+
+This allows removing entire nodes, or specific properties under nodes
+from the devicetree. The required nodes and properties can be
+registered for removal through the DT_NON_COMPLIANT_PURGE and
+DT_NON_COMPLIANT_PURGE_LIST macros.
+
+Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
+Upstream-Status: Submitted [RFC: https://lore.kernel.org/u-boot/aca7e6fa-2dec-a7c5-e47e-84c5ffa6f9b7@gmx.de/T/#m16d14ee960427cc88066bdcdd76f0a26738bb66d]
+---
+ include/dt-structs.h | 11 +++++++
+ lib/Makefile         |  1 +
+ lib/dt_purge.c       | 73 ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 85 insertions(+)
+ create mode 100644 lib/dt_purge.c
+
+diff --git a/include/dt-structs.h b/include/dt-structs.h
+index fa1622cb1d..f535c60471 100644
+--- a/include/dt-structs.h
++++ b/include/dt-structs.h
+@@ -57,3 +57,14 @@ struct phandle_2_arg {
+ #endif
+ 
+ #endif
++
++struct dt_non_compliant_purge {
++	const char *node_path;
++	const char *prop;
++};
++
++#define DT_NON_COMPLIANT_PURGE(__name)	\
++	ll_entry_declare(struct dt_non_compliant_purge, __name, dt_purge)
++
++#define DT_NON_COMPLIANT_PURGE_LIST(__name)	\
++	ll_entry_declare_list(struct dt_non_compliant_purge, __name, dt_purge)
+diff --git a/lib/Makefile b/lib/Makefile
+index 8d8ccc8bbc..82a906daa0 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -37,6 +37,7 @@ endif
+ obj-y += crc8.o
+ obj-y += crc16.o
+ obj-y += crc16-ccitt.o
++obj-y += dt_purge.o
+ obj-$(CONFIG_ERRNO_STR) += errno_str.o
+ obj-$(CONFIG_FIT) += fdtdec_common.o
+ obj-$(CONFIG_TEST_FDTDEC) += fdtdec_test.o
+diff --git a/lib/dt_purge.c b/lib/dt_purge.c
+new file mode 100644
+index 0000000000..f893ba9796
+--- /dev/null
++++ b/lib/dt_purge.c
+@@ -0,0 +1,73 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Copyright (c) 2023, Linaro Limited
++ */
++
++#include <dt-structs.h>
++#include <event.h>
++#include <linker_lists.h>
++
++#include <linux/libfdt.h>
++
++/**
++ * dt_non_compliant_purge() -	Remove non-upstreamed nodes and properties
++ *				from the DT
++ * @ctx: Context for event
++ * @event: Event to process
++ *
++ * Iterate through an array of DT nodes and properties, and remove them
++ * from the device-tree before the DT gets handed over to the kernel.
++ * These are nodes and properties which do not have upstream bindings
++ * and need to be purged before being handed over to the kernel.
++ *
++ * If both the node and property are specified, delete the property. If
++ * only the node is specified, delete the entire node, including it's
++ * subnodes, if any.
++ *
++ * Return: 0 if OK, -ve on error
++ */
++static int dt_non_compliant_purge(void *ctx, struct event *event)
++{
++	int nodeoff = 0;
++	int err = 0;
++	void *fdt;
++	const struct event_ft_fixup *fixup = &event->data.ft_fixup;
++	struct dt_non_compliant_purge *purge_entry;
++	struct dt_non_compliant_purge *purge_start =
++		ll_entry_start(struct dt_non_compliant_purge, dt_purge);
++	int nentries = ll_entry_count(struct dt_non_compliant_purge, dt_purge);
++
++	if (fixup->images)
++		return 0;
++
++	fdt = fixup->tree.fdt;
++	for (purge_entry = purge_start; purge_entry != purge_start + nentries;
++	     purge_entry++) {
++		nodeoff = fdt_path_offset(fdt, purge_entry->node_path);
++		if (nodeoff < 0) {
++			log_debug("Error (%d) getting node offset for %s\n",
++				  nodeoff, purge_entry->node_path);
++			continue;
++		}
++
++		if (purge_entry->prop) {
++			err = fdt_delprop(fdt, nodeoff, purge_entry->prop);
++			if (err < 0 && err != -FDT_ERR_NOTFOUND) {
++				log_debug("Error (%d) deleting %s\n",
++					  err, purge_entry->prop);
++				goto out;
++			}
++		} else {
++			err = fdt_del_node(fdt, nodeoff);
++			if (err) {
++				log_debug("Error (%d) trying to delete node %s\n",
++					  err, purge_entry->node_path);
++				goto out;
++			}
++		}
++	}
++
++out:
++	return err;
++}
++EVENT_SPY(EVT_FT_FIXUP, dt_non_compliant_purge);
+-- 
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch
new file mode 100644
index 0000000..2eb273a
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch
@@ -0,0 +1,56 @@
+From 729c0163ae6aed76b3267b95d2989e70ded66716 Mon Sep 17 00:00:00 2001
+From: Sughosh Ganu <sughosh.ganu@linaro.org>
+Date: Thu, 21 Sep 2023 14:15:13 +0100
+Subject: [PATCH 36/37] bootefi: Call the EVT_FT_FIXUP event handler
+
+The bootefi command passes the devicetree to the kernel through the
+EFI config table. Call the event handlers for fixing the devicetree
+before jumping into the kernel. This removes any devicetree nodes
+and/or properties that are specific only to U-Boot, and are not to be
+passed to the OS.
+
+Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
+Upstream-Status: Submitted [RFC: https://lore.kernel.org/u-boot/aca7e6fa-2dec-a7c5-e47e-84c5ffa6f9b7@gmx.de/T/#m16d14ee960427cc88066bdcdd76f0a26738bb66d]
+---
+ cmd/bootefi.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/cmd/bootefi.c b/cmd/bootefi.c
+index 5c0afec154..f9588b66c7 100644
+--- a/cmd/bootefi.c
++++ b/cmd/bootefi.c
+@@ -237,6 +237,23 @@ static void *get_config_table(const efi_guid_t *guid)
+ 	return NULL;
+ }
+ 
++/**
++ * event_notify_dt_fixup() - call ft_fixup event
++ *
++ * @fdt:	address of the device tree to be passed to the kernel
++ *		through the configuration table
++ * Return:	None
++ */
++static void event_notify_dt_fixup(void *fdt)
++{
++	int ret;
++	struct event_ft_fixup fixup = {0};
++
++	fixup.tree.fdt = fdt;
++	ret = event_notify(EVT_FT_FIXUP, &fixup, sizeof(fixup));
++	if (ret)
++		printf("Error: %d: FDT Fixup event failed\n", ret);
++}
+ #endif /* !CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE) */
+ 
+ /**
+@@ -318,6 +335,7 @@ efi_status_t efi_install_fdt(void *fdt)
+ 	efi_carve_out_dt_rsv(fdt);
+ 
+ 	efi_try_purge_kaslr_seed(fdt);
++	event_notify_dt_fixup(fdt);
+ 
+ 	if (CONFIG_IS_ENABLED(EFI_TCG2_PROTOCOL_MEASURE_DTB)) {
+ 		ret = efi_tcg2_measure_dtb(fdt);
+-- 
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch
new file mode 100644
index 0000000..2aafadd
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch
@@ -0,0 +1,51 @@
+From 1527eef4dd54a425a5a178f09fa9d3d65aa3e30a Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Thu, 21 Sep 2023 15:24:34 +0100
+Subject: [PATCH 37/37] corstone1000: purge U-Boot specific DT nodes
+
+Remove U-Boot specific DT nodes before passing the DT to Linux
+
+This is needed to pass SystemReady IR 2.0 dt-schema tests
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Upstream-Status: Pending [RFC: https://lore.kernel.org/u-boot/aca7e6fa-2dec-a7c5-e47e-84c5ffa6f9b7@gmx.de/T/#m16d14ee960427cc88066bdcdd76f0a26738bb66d]
+---
+ board/armltd/corstone1000/corstone1000.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
+index 53c65506d5..e3c0e5bf50 100644
+--- a/board/armltd/corstone1000/corstone1000.c
++++ b/board/armltd/corstone1000/corstone1000.c
+@@ -9,6 +9,7 @@
+ #include <common.h>
+ #include <cpu_func.h>
+ #include <dm.h>
++#include <dt-structs.h>
+ #include <env.h>
+ #include <fwu.h>
+ #include <netdev.h>
+@@ -18,6 +19,20 @@
+ #include <asm/armv8/mmu.h>
+ #include <asm/global_data.h>
+ 
++/* remove the DT nodes not needed in Linux */
++DT_NON_COMPLIANT_PURGE_LIST(foo) = {
++	{ .node_path = "/fwu-mdata" },
++	{ .node_path = "/nvmxip-qspi@08000000" },
++	{ .node_path = "/soc/mailbox@1b820000" },
++	{ .node_path = "/soc/mailbox@1b830000" },
++	{ .node_path = "/soc/mhu@1b000000" },
++	{ .node_path = "/soc/mhu@1b010000" },
++	{ .node_path = "/soc/mhu@1b020000" },
++	{ .node_path = "/soc/mhu@1b030000" },
++	{ .node_path = "/soc/client" },
++	{ .node_path = "/soc/extsys@1A010310" },
++};
++
+ #define CORSTONE1000_KERNEL_PARTS 2
+ #define CORSTONE1000_KERNEL_PRIMARY "kernel_primary"
+ #define CORSTONE1000_KERNEL_SECONDARY "kernel_secondary"
+-- 
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch
new file mode 100644
index 0000000..9d8c6a9
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch
@@ -0,0 +1,31 @@
+From 88cb6f5a91178903d4e306d8653b941f9727987b Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 13 Sep 2023 13:20:15 +0100
+Subject: [PATCH] corstone1000: add signature device tree overlay
+
+Adds signature device tree overlay.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ arch/arm/dts/corstone1000.dtsi | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
+index 25a032b6b3..1c3ab2c315 100644
+--- a/arch/arm/dts/corstone1000.dtsi
++++ b/arch/arm/dts/corstone1000.dtsi
+@@ -111,6 +111,10 @@
+ 		fwu-mdata-store = <&nvmxip>;
+ 	};
+ 
++	signature {
++		capsule-key = /incbin/("../../../CRT.esl");
++	};
++
+ 	soc {
+ 		compatible = "simple-bus";
+ 		#address-cells = <1>;
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch
new file mode 100644
index 0000000..761234e
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch
@@ -0,0 +1,28 @@
+From 9b884d4f483474b99fcb4850197a1c8dde34147d Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 13 Sep 2023 13:52:02 +0100
+Subject: [PATCH] corstone1000: enable authenticated capsule config
+
+Enables authenticated capsule update config for corstone1000.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ configs/corstone1000_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index 5b0b2ac3bf..2de3f5d7b3 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -70,6 +70,7 @@ CONFIG_FWU_MDATA=y
+ CONFIG_FWU_MDATA_GPT_BLK=y
+ CONFIG_SYSRESET=y
+ CONFIG_EFI_CAPSULE_ON_DISK=y
++CONFIG_EFI_CAPSULE_AUTHENTICATE=y
+ CONFIG_EFI_IGNORE_OSINDICATIONS=y
+ CONFIG_FWU_MULTI_BANK_UPDATE=y
+ # CONFIG_TOOLS_MKEFICAPSULE is not set
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch
new file mode 100644
index 0000000..f47dd8c
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch
@@ -0,0 +1,76 @@
+From b99a39c662b9be5f940b895efa8016f5567e1c1f Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 13 Sep 2023 13:55:08 +0100
+Subject: [PATCH] corstone1000: introduce EFI authenticated capsule update
+
+Introduces EFI authenticated capsule update for corstone1000. Corstone1000
+implements platform-specific capsule update mechanism in u-bootdue to the SoC
+design. This patch add authenticated capsule update mechanism to the
+platform-specific firmware-update routine.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Inappropriate [Redesign of Capsule update interface is required]
+---
+ lib/efi_loader/efi_capsule.c | 39 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
+
+diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
+index 6a06605ad9..30fb7d1dd5 100644
+--- a/lib/efi_loader/efi_capsule.c
++++ b/lib/efi_loader/efi_capsule.c
+@@ -820,6 +820,12 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
+ 		u64 scatter_gather_list)
+ {
+ 	struct efi_capsule_header *capsule;
++	struct efi_firmware_management_capsule_header *capsule_header;
++	struct efi_firmware_management_capsule_image_header *image;
++	size_t image_binary_size;
++	size_t tmp_capsule_payload_size=0;
++	void *tmp_capsule_payload=NULL;
++	void *image_binary;
+ 	unsigned int i;
+ 	efi_status_t ret;
+ 
+@@ -859,6 +865,39 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
+ 			goto out;
+ 		}
+ 
++		capsule_header = (void *)capsule + capsule->header_size;
++		image = (void *)capsule_header + capsule_header->item_offset_list[0];
++		if (IS_ENABLED(CONFIG_EFI_CAPSULE_AUTHENTICATE) &&
++			!(image->image_capsule_support &
++			CAPSULE_SUPPORT_AUTHENTICATION)) {
++			/* no signature */
++			log_err("Corstone1000: Capsule authentication flag check failed. Aborting update\n");
++			ret = EFI_SECURITY_VIOLATION;
++			goto out;
++		}
++
++		image_binary = (void *)image + sizeof(*image);
++		image_binary_size = image->update_image_size;
++		if (IS_ENABLED(CONFIG_EFI_CAPSULE_AUTHENTICATE) &&
++		    (image->image_capsule_support &
++			CAPSULE_SUPPORT_AUTHENTICATION)){
++			ret = efi_capsule_authenticate(image_binary, image_binary_size,
++						  &tmp_capsule_payload,
++						  &tmp_capsule_payload_size);
++
++			if (ret == EFI_SECURITY_VIOLATION) {
++				log_err("Corstone1000: Capsule authentication check failed. Aborting update\n");
++				goto out;
++			} else if (ret != EFI_SUCCESS) {
++				goto out;
++			}
++
++			log_debug("Corstone1000: Capsule authentication successful\n");
++		} else {
++			log_debug("Corstone1000: Capsule authentication disabled. ");
++			log_debug("Corstone1000: Updating capsule without authenticating.\n");
++		}
++
+ 		/* copy the data to the contiguous buffer */
+ 		efi_memcpy_runtime(corstone1000_capsule_buf, capsule, capsule->capsule_image_size);
+ 
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0001-armv8-Add-ARMv8-MPU-configuration-logic.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0001-armv8-Add-ARMv8-MPU-configuration-logic.patch
deleted file mode 100644
index 45db74e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0001-armv8-Add-ARMv8-MPU-configuration-logic.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From 401a88bf6019941d4095476de76af5893686d6f6 Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Wed, 26 May 2021 17:41:10 +0100
-Subject: [PATCH] armv8: Add ARMv8 MPU configuration logic
-
-Detect whether an MMU is present at the current exception level. If
-not, initialize the MPU instead of the MMU during init, and clear the
-MPU regions before transition to Linux.
-
-The MSA in use at EL1&0 may be configurable but can only by determined
-by inspecting VTCR_EL2 at EL2, so assume that there is an MMU for
-backwards compatibility.
-
-Provide a default (blank) MPU memory map, which can be overridden by
-board configurations.
-
-Issue-Id: SCM-2443
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: I0ee3879f9d7f03fe940664b3551c68eeaa458d17
-
----
- arch/arm/cpu/armv8/cache_v8.c    | 101 ++++++++++++++++++++++++++++++-
- arch/arm/include/asm/armv8/mpu.h |  59 ++++++++++++++++++
- arch/arm/include/asm/system.h    |  19 ++++++
- 3 files changed, 176 insertions(+), 3 deletions(-)
- create mode 100644 arch/arm/include/asm/armv8/mpu.h
-
-diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
-index 2a226fd063..8611a35eb3 100644
---- a/arch/arm/cpu/armv8/cache_v8.c
-+++ b/arch/arm/cpu/armv8/cache_v8.c
-@@ -15,6 +15,7 @@
- #include <asm/global_data.h>
- #include <asm/system.h>
- #include <asm/armv8/mmu.h>
-+#include <asm/armv8/mpu.h>
- 
- DECLARE_GLOBAL_DATA_PTR;
- 
-@@ -385,6 +386,91 @@ __weak u64 get_page_table_size(void)
- 	return size;
- }
- 
-+static void mpu_clear_regions(void)
-+{
-+	int i;
-+
-+	for (i = 0; mpu_mem_map[i].end || mpu_mem_map[i].attrs; i++) {
-+		setup_el2_mpu_region(i, 0, 0);
-+	}
-+}
-+
-+static struct mpu_region default_mpu_mem_map[] = {{0,}};
-+__weak struct mpu_region *mpu_mem_map = default_mpu_mem_map;
-+
-+static void mpu_setup(void)
-+{
-+	int i;
-+
-+	if (current_el() != 2) {
-+		panic("MPU configuration is only supported at EL2");
-+	}
-+
-+	set_sctlr(get_sctlr() & ~(CR_M | CR_WXN));
-+
-+	asm volatile("msr MAIR_EL2, %0" : : "r" MEMORY_ATTRIBUTES);
-+
-+	for (i = 0; mpu_mem_map[i].end || mpu_mem_map[i].attrs; i++) {
-+		setup_el2_mpu_region(i,
-+			PRBAR_ADDRESS(mpu_mem_map[i].start)
-+				| PRBAR_OUTER_SH | PRBAR_AP_RW_ANY,
-+			PRLAR_ADDRESS(mpu_mem_map[i].end)
-+				| mpu_mem_map[i].attrs | PRLAR_EN_BIT
-+			);
-+	}
-+
-+	set_sctlr(get_sctlr() | CR_M);
-+}
-+
-+static bool el_has_mmu(void)
-+{
-+	if (current_el() < 2) {
-+		// We have no way of knowing, so assuming we have an MMU
-+		return true;
-+	}
-+
-+	uint64_t id_aa64mmfr0;
-+	asm volatile("mrs %0, id_aa64mmfr0_el1"
-+			: "=r" (id_aa64mmfr0) : : "cc");
-+	uint64_t msa = id_aa64mmfr0 & ID_AA64MMFR0_EL1_MSA_MASK;
-+	uint64_t msa_frac = id_aa64mmfr0 & ID_AA64MMFR0_EL1_MSA_FRAC_MASK;
-+
-+	switch (msa) {
-+		case ID_AA64MMFR0_EL1_MSA_VMSA:
-+			/*
-+			 * VMSA supported in all translation regimes.
-+			 * No support for PMSA.
-+			 */
-+			return true;
-+		case ID_AA64MMFR0_EL1_MSA_USE_FRAC:
-+			/* See MSA_frac for the supported MSAs. */
-+			switch (msa_frac) {
-+				case ID_AA64MMFR0_EL1_MSA_FRAC_NO_PMSA:
-+					/*
-+					 * PMSA not supported in any translation
-+					 * regime.
-+					 */
-+					return true;
-+				case ID_AA64MMFR0_EL1_MSA_FRAC_VMSA:
-+					/*
-+					* PMSA supported in all translation
-+					* regimes. No support for VMSA.
-+					*/
-+				case ID_AA64MMFR0_EL1_MSA_FRAC_PMSA:
-+					/*
-+					 * PMSA supported in all translation
-+					 * regimes.
-+					 */
-+					return false;
-+				default:
-+					panic("Unsupported id_aa64mmfr0_el1 " \
-+						"MSA_frac value");
-+			}
-+		default:
-+			panic("Unsupported id_aa64mmfr0_el1 MSA value");
-+	}
-+}
-+
- void setup_pgtables(void)
- {
- 	int i;
-@@ -499,8 +585,13 @@ void dcache_enable(void)
- 	/* The data cache is not active unless the mmu is enabled */
- 	if (!(get_sctlr() & CR_M)) {
- 		invalidate_dcache_all();
--		__asm_invalidate_tlb_all();
--		mmu_setup();
-+
-+		if (el_has_mmu()) {
-+			__asm_invalidate_tlb_all();
-+			mmu_setup();
-+		} else {
-+			mpu_setup();
-+		}
- 	}
- 
- 	/* Set up page tables only once (it is done also by mmu_setup()) */
-@@ -523,7 +614,11 @@ void dcache_disable(void)
- 	set_sctlr(sctlr & ~(CR_C|CR_M));
- 
- 	flush_dcache_all();
--	__asm_invalidate_tlb_all();
-+
-+	if (el_has_mmu())
-+		__asm_invalidate_tlb_all();
-+	else
-+		mpu_clear_regions();
- }
- 
- int dcache_status(void)
-diff --git a/arch/arm/include/asm/armv8/mpu.h b/arch/arm/include/asm/armv8/mpu.h
-new file mode 100644
-index 0000000000..8de627cafd
---- /dev/null
-+++ b/arch/arm/include/asm/armv8/mpu.h
-@@ -0,0 +1,59 @@
-+/*
-+ * SPDX-License-Identifier: GPL-2.0+
-+ *
-+ * (C) Copyright 2021 Arm Limited
-+ */
-+
-+#ifndef _ASM_ARMV8_MPU_H_
-+#define _ASM_ARMV8_MPU_H_
-+
-+#include <asm/armv8/mmu.h>
-+#include <linux/stringify.h>
-+
-+#define PRSELR_EL2		S3_4_c6_c2_1
-+#define PRBAR_EL2		S3_4_c6_c8_0
-+#define PRLAR_EL2		S3_4_c6_c8_1
-+#define MPUIR_EL2		S3_4_c0_c0_4
-+
-+#define PRBAR_ADDRESS(addr)	((addr) & ~(0x3fULL))
-+
-+/* Access permissions */
-+#define PRBAR_AP(val)		(((val) & 0x3) << 2)
-+#define PRBAR_AP_RW_HYP		PRBAR_AP(0x0)
-+#define PRBAR_AP_RW_ANY		PRBAR_AP(0x1)
-+#define PRBAR_AP_RO_HYP		PRBAR_AP(0x2)
-+#define PRBAR_AP_RO_ANY		PRBAR_AP(0x3)
-+
-+/* Shareability */
-+#define PRBAR_SH(val)		(((val) & 0x3) << 4)
-+#define PRBAR_NON_SH		PRBAR_SH(0x0)
-+#define PRBAR_OUTER_SH		PRBAR_SH(0x2)
-+#define PRBAR_INNER_SH		PRBAR_SH(0x3)
-+
-+/* Memory attribute (MAIR idx) */
-+#define PRLAR_ATTRIDX(val)	(((val) & 0x7) << 1)
-+#define PRLAR_EN_BIT		(0x1)
-+#define PRLAR_ADDRESS(addr)	((addr) & ~(0x3fULL))
-+
-+#ifndef __ASSEMBLY__
-+
-+static inline void setup_el2_mpu_region(uint8_t region, uint64_t base, uint64_t limit)
-+{
-+	asm volatile("msr " __stringify(PRSELR_EL2) ", %0" : : "r" (region));
-+	asm volatile("msr " __stringify(PRBAR_EL2) ", %0" : : "r" (base));
-+	asm volatile("msr " __stringify(PRLAR_EL2) ", %0" : : "r" (limit));
-+
-+	asm volatile("isb");
-+}
-+
-+#endif
-+
-+struct mpu_region {
-+	u64 start;
-+	u64 end;
-+	u64 attrs;
-+};
-+
-+extern struct mpu_region *mpu_mem_map;
-+
-+#endif /* _ASM_ARMV8_MPU_H_ */
-diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
-index 87d1c77e8b..4510db98a2 100644
---- a/arch/arm/include/asm/system.h
-+++ b/arch/arm/include/asm/system.h
-@@ -95,6 +95,25 @@
- 				               auth algorithm                 */
- #define ID_AA64ISAR1_EL1_APA	(0xF << 4)  /* QARMA address auth algorithm   */
- 
-+/*
-+ * ID_AA64MMFR0_EL1 bits definitions
-+ */
-+#define ID_AA64MMFR0_EL1_MSA_FRAC_MASK		(0xFUL << 52) /* Memory system
-+								 architecture
-+								 frac         */
-+#define ID_AA64MMFR0_EL1_MSA_FRAC_VMSA		(0x2UL << 52) /* EL1&0 supports
-+								 VMSA         */
-+#define ID_AA64MMFR0_EL1_MSA_FRAC_PMSA		(0x1UL << 52) /* EL1&0 only
-+							         supports PMSA*/
-+#define ID_AA64MMFR0_EL1_MSA_FRAC_NO_PMSA	(0x0UL << 52) /* No PMSA
-+								 support      */
-+#define ID_AA64MMFR0_EL1_MSA_MASK		(0xFUL << 48) /* Memory system
-+								 architecture */
-+#define ID_AA64MMFR0_EL1_MSA_USE_FRAC		(0xFUL << 48) /* Use MSA_FRAC */
-+#define ID_AA64MMFR0_EL1_MSA_VMSA		(0x0UL << 48) /* Memory system
-+								 architecture
-+								 is VMSA      */
-+
- /*
-  * ID_AA64PFR0_EL1 bits definitions
-  */
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch
deleted file mode 100644
index 103e484..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 5b42322cb57692dbea7d2c39fd8769b6f0f6b7af Mon Sep 17 00:00:00 2001
-From: Qi Feng <qi.feng@arm.com>
-Date: Tue, 26 Jul 2022 18:13:23 +0800
-Subject: [PATCH] vexpress64: add MPU memory map for the BASER_FVP
-
-The previous patch added support for initializing an Armv8 MPU. There is only an
-MPU at S-EL2 on the BASER_FVP, so add a platform-specific MPU memory map.
-
-See https://developer.arm.com/documentation/100964/1117/Base-Platform/Base---memory/BaseR-Platform-memory-map
-
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Signed-off-by: Qi Feng <qi.feng@arm.com>
-
----
- board/armltd/vexpress64/vexpress64.c | 22 ++++++++++++++++++++++
- 1 file changed, 22 insertions(+)
-
-diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
-index af326dc6f4..2310d18eb7 100644
---- a/board/armltd/vexpress64/vexpress64.c
-+++ b/board/armltd/vexpress64/vexpress64.c
-@@ -19,6 +19,7 @@
- #include <dm/platform_data/serial_pl01x.h>
- #include "pcie.h"
- #include <asm/armv8/mmu.h>
-+#include <asm/armv8/mpu.h>
- #ifdef CONFIG_VIRTIO_NET
- #include <virtio_types.h>
- #include <virtio.h>
-@@ -37,6 +38,27 @@ U_BOOT_DRVINFO(vexpress_serials) = {
- 	.plat = &serial_plat,
- };
- 
-+static struct mpu_region vexpress64_aemv8r_mem_map[] = {
-+	{
-+		.start = 0x0UL,
-+		.end = 0x7fffffffUL,
-+		.attrs = PRLAR_ATTRIDX(MT_NORMAL)
-+	}, {
-+		.start = 0x80000000UL,
-+		.end = 0xffffffffUL,
-+		.attrs = PRLAR_ATTRIDX(MT_DEVICE_NGNRNE)
-+	}, {
-+		.start = 0x100000000UL,
-+		.end = 0xffffffffffUL,
-+		.attrs = PRLAR_ATTRIDX(MT_NORMAL)
-+	}, {
-+		/* List terminator */
-+		0,
-+	}
-+};
-+
-+struct mpu_region *mpu_mem_map = vexpress64_aemv8r_mem_map;
-+
- static struct mm_region vexpress64_mem_map[] = {
- 	{
- 		.virt = V2M_PA_BASE,
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch
deleted file mode 100644
index 5953abc6..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From ffb0f72a67926c3053308cf03420bc0c36675d42 Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Fri, 10 Dec 2021 11:41:19 +0000
-Subject: [PATCH] armv8: Allow disabling exception vectors on non-SPL builds
-
-On the BASER_FVP, U-Boot shares EL2 with another bootloader, so we do
-not wish to overide the exception vector, but we are also not using an
-SPL build.
-
-Therefore, add ARMV8_EXCEPTION_VECTORS, which disables exception vectors
-in a similar way to ARMV8_SPL_EXCEPTION_VECTORS.
-
-Rename ARMV8_SPL_EXCEPTION_VECTORS -> SPL_ARMV8_EXCEPTION_VECTORS so
-that both config flags be be targeted using CONFIG_IS_ENABLED.
-
-Issue-Id: SCM-3728
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: I0cf0fc6d7ef4d45791411cf1f67c65e198cc8b2b
-
----
- arch/arm/cpu/armv8/Kconfig        | 10 ++++++++--
- arch/arm/cpu/armv8/Makefile       |  6 ++----
- arch/arm/cpu/armv8/start.S        |  4 ++--
- configs/vexpress_aemv8r_defconfig |  1 +
- 4 files changed, 13 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
-index 1305238c9d..dec4be0e30 100644
---- a/arch/arm/cpu/armv8/Kconfig
-+++ b/arch/arm/cpu/armv8/Kconfig
-@@ -1,8 +1,8 @@
- if ARM64
- 
--config ARMV8_SPL_EXCEPTION_VECTORS
-+config ARMV8_EXCEPTION_VECTORS
- 	bool "Install crash dump exception vectors"
--	depends on SPL
-+	default y
- 	help
- 	  The default exception vector table is only used for the crash
- 	  dump, but still takes quite a lot of space in the image size.
-@@ -10,6 +10,12 @@ config ARMV8_SPL_EXCEPTION_VECTORS
- 	  Say N here if you are running out of code space in the image
- 	  and want to save some space at the cost of less debugging info.
- 
-+config SPL_ARMV8_EXCEPTION_VECTORS
-+	bool "Install crash dump exception vectors in the SPL"
-+	depends on SPL
-+	help
-+	  Same as ARMV8_EXCEPTION_VECTORS, but for SPL builds
-+
- config ARMV8_MULTIENTRY
-         bool "Enable multiple CPUs to enter into U-Boot"
- 
-diff --git a/arch/arm/cpu/armv8/Makefile b/arch/arm/cpu/armv8/Makefile
-index 2e4bf9e038..001a31cae7 100644
---- a/arch/arm/cpu/armv8/Makefile
-+++ b/arch/arm/cpu/armv8/Makefile
-@@ -13,10 +13,8 @@ ifndef CONFIG_$(SPL_)SYS_DCACHE_OFF
- obj-y	+= cache_v8.o
- obj-y	+= cache.o
- endif
--ifdef CONFIG_SPL_BUILD
--obj-$(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) += exceptions.o
--else
--obj-y	+= exceptions.o
-+obj-$(CONFIG_$(SPL_)ARMV8_EXCEPTION_VECTORS) += exceptions.o
-+ifndef CONFIG_SPL_BUILD
- obj-y	+= exception_level.o
- endif
- obj-y	+= tlb.o
-diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
-index f3ea858577..7fad901336 100644
---- a/arch/arm/cpu/armv8/start.S
-+++ b/arch/arm/cpu/armv8/start.S
-@@ -104,7 +104,7 @@ pie_skip_reloc:
- pie_fixup_done:
- #endif
- 
--#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD)
-+#if CONFIG_IS_ENABLED(ARMV8_EXCEPTION_VECTORS)
- .macro	set_vbar, regname, reg
- 	msr	\regname, \reg
- .endm
-@@ -354,7 +354,7 @@ ENDPROC(smp_kick_all_cpus)
- /*-----------------------------------------------------------------------*/
- 
- ENTRY(c_runtime_cpu_setup)
--#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD)
-+#if CONFIG_IS_ENABLED(ARMV8_EXCEPTION_VECTORS)
- 	/* Relocate vBAR */
- 	adr	x0, vectors
- 	switch_el x1, 3f, 2f, 1f
-diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 495eb1dee3..683d983c36 100644
---- a/configs/vexpress_aemv8r_defconfig
-+++ b/configs/vexpress_aemv8r_defconfig
-@@ -16,3 +16,4 @@ CONFIG_SYS_CBSIZE=512
- CONFIG_SYS_PBSIZE=541
- # CONFIG_MMC is not set
- CONFIG_VIRTIO_MMIO=y
-+CONFIG_ARMV8_EXCEPTION_VECTORS=n
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch
deleted file mode 100644
index 157a15d..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 14e204ffca5870d6bfd238627937a2028c88589d Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Wed, 14 Jul 2021 12:44:27 +0100
-Subject: [PATCH] armv8: ARMV8_SWITCH_TO_EL1 improvements
-
-Convert CONFIG_ARMV8_SWITCH_TO_EL1 to a Kconfig variable.
-
-Add support for switching to EL1 to bootefi.
-
-Add the environment variable armv8_switch_to_el1 to allow configuring
-whether to switch to EL1 at runtime. This overrides the compile-time
-option.
-
-Issue-Id: SCM-3728
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: If98478148d6d8d1f732acac5439276700614815f
-
----
- arch/arm/cpu/armv8/exception_level.c | 21 ++++++++++++++--
- arch/arm/lib/bootm.c                 | 36 ++++++++++++++++------------
- configs/vexpress_aemv8r_defconfig    |  1 +
- 3 files changed, 41 insertions(+), 17 deletions(-)
-
-diff --git a/arch/arm/cpu/armv8/exception_level.c b/arch/arm/cpu/armv8/exception_level.c
-index b11936548f..4aad1550f4 100644
---- a/arch/arm/cpu/armv8/exception_level.c
-+++ b/arch/arm/cpu/armv8/exception_level.c
-@@ -40,19 +40,36 @@ static void entry_non_secure(struct jmp_buf_data *non_secure_jmp)
-  * trusted firmware being one embodiment). The operating system shall be
-  * started at exception level EL2. So here we check the exception level
-  * and switch it if necessary.
-+ *
-+ * If armv8_switch_to_el1 (config or env var) is enabled, also switch to EL1
-+ * before booting the operating system.
-  */
- void switch_to_non_secure_mode(void)
- {
- 	struct jmp_buf_data non_secure_jmp;
- 
- 	/* On AArch64 we need to make sure we call our payload in < EL3 */
--	if (current_el() == 3) {
-+
-+	int switch_to_el1 = env_get_yesno("armv8_switch_to_el1");
-+#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
-+	if (switch_to_el1 == -1) {
-+			switch_to_el1 = 1;
-+	}
-+#endif
-+
-+	if (current_el() > 2) {
- 		if (setjmp(&non_secure_jmp))
- 			return;
- 		dcache_disable();	/* flush cache before switch to EL2 */
--
- 		/* Move into EL2 and keep running there */
- 		armv8_switch_to_el2((uintptr_t)&non_secure_jmp, 0, 0, 0,
- 				    (uintptr_t)entry_non_secure, ES_TO_AARCH64);
-+	} else if (switch_to_el1 == 1 && current_el() > 1) {
-+		if (setjmp(&non_secure_jmp))
-+			return;
-+		dcache_disable();	/* flush cache before switch to EL1 */
-+		/* Move into EL1 and keep running there */
-+		armv8_switch_to_el1((uintptr_t)&non_secure_jmp, 0, 0, 0,
-+				    (uintptr_t)entry_non_secure, ES_TO_AARCH64);
- 	}
- }
-diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
-index e414ef8267..9a86c17d2a 100644
---- a/arch/arm/lib/bootm.c
-+++ b/arch/arm/lib/bootm.c
-@@ -270,7 +270,6 @@ __weak void update_os_arch_secondary_cores(uint8_t os_arch)
- {
- }
- 
--#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
- static void switch_to_el1(void)
- {
- 	if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
-@@ -285,7 +284,6 @@ static void switch_to_el1(void)
- 				    ES_TO_AARCH64);
- }
- #endif
--#endif
- 
- /* Subcommand: GO */
- static void boot_jump_linux(struct bootm_headers *images, int flag)
-@@ -312,21 +310,29 @@ static void boot_jump_linux(struct bootm_headers *images, int flag)
- 
- 		update_os_arch_secondary_cores(images->os.arch);
- 
-+		int armv8_switch_to_el1 = env_get_yesno("armv8_switch_to_el1");
- #ifdef CONFIG_ARMV8_SWITCH_TO_EL1
--		armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
--				    (u64)switch_to_el1, ES_TO_AARCH64);
--#else
--		if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
--		    (images->os.arch == IH_ARCH_ARM))
--			armv8_switch_to_el2(0, (u64)gd->bd->bi_arch_number,
--					    (u64)images->ft_addr, 0,
--					    (u64)images->ep,
--					    ES_TO_AARCH32);
--		else
--			armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
--					    images->ep,
--					    ES_TO_AARCH64);
-+		if (armv8_switch_to_el1 == -1) {
-+			armv8_switch_to_el1 = 1;
-+		}
- #endif
-+		if (armv8_switch_to_el1 == 1) {
-+			armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
-+					    (u64)switch_to_el1, ES_TO_AARCH64);
-+		} else {
-+			if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
-+					(images->os.arch == IH_ARCH_ARM))
-+				armv8_switch_to_el2(0,
-+						    (u64)gd->bd->bi_arch_number,
-+						    (u64)images->ft_addr, 0,
-+						    (u64)images->ep,
-+						    ES_TO_AARCH32);
-+			else
-+				armv8_switch_to_el2((u64)images->ft_addr,
-+						    0, 0, 0,
-+						    images->ep,
-+						    ES_TO_AARCH64);
-+		}
- 	}
- #else
- 	unsigned long machid = gd->bd->bi_arch_number;
-diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 683d983c36..6044f82b00 100644
---- a/configs/vexpress_aemv8r_defconfig
-+++ b/configs/vexpress_aemv8r_defconfig
-@@ -17,3 +17,4 @@ CONFIG_SYS_PBSIZE=541
- # CONFIG_MMC is not set
- CONFIG_VIRTIO_MMIO=y
- CONFIG_ARMV8_EXCEPTION_VECTORS=n
-+CONFIG_ARMV8_SWITCH_TO_EL1=y
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch
deleted file mode 100644
index 82926cc..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From e3d24bc1fd0b09915b5181de1282f7008bbf776f Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Fri, 10 Dec 2021 16:37:26 +0000
-Subject: [PATCH] armv8: Make disabling HVC configurable when switching to EL1
-
-On the BASER_FVP there is no EL3, so HVC is used to provide PSCI
-services. Therefore we cannot disable hypercalls.
-
-Create CONFIG_ARMV8_DISABLE_HVC (dependent on CONFIG_ARMV8_TO_EL1) to
-control whether to disable HVC exceptions in HCR_EL2->HCD
-
-Issue-Id: SCM-3728
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: I463d82f1db8a3cafcab40a9c0c208753569cc300
-
----
- arch/arm/cpu/armv8/Kconfig        |  9 +++++++++
- arch/arm/include/asm/macro.h      | 10 ++++++++--
- configs/vexpress_aemv8r_defconfig |  1 +
- 3 files changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
-index dec4be0e30..95c03487a2 100644
---- a/arch/arm/cpu/armv8/Kconfig
-+++ b/arch/arm/cpu/armv8/Kconfig
-@@ -208,4 +208,13 @@ config ARMV8_CE_SHA256
- 
- endif
- 
-+config ARMV8_DISABLE_HVC
-+	bool "Disable HVC calls before switching to EL1"
-+	depends on ARMV8_SWITCH_TO_EL1
-+	default y
-+	help
-+	  If switching to EL1 before loading the operating system, disable taking
-+	  hypercalls back to EL2. May be disabled if, for example, PSCI services are
-+	  running at EL2.
-+
- endif
-diff --git a/arch/arm/include/asm/macro.h b/arch/arm/include/asm/macro.h
-index 1a1edc9870..7167739210 100644
---- a/arch/arm/include/asm/macro.h
-+++ b/arch/arm/include/asm/macro.h
-@@ -296,9 +296,12 @@ lr	.req	x30
- 	ldr	\tmp2, =(ID_AA64ISAR1_EL1_GPI | ID_AA64ISAR1_EL1_GPA | \
- 		      ID_AA64ISAR1_EL1_API | ID_AA64ISAR1_EL1_APA)
- 	tst	\tmp, \tmp2
--	mov	\tmp2, #(HCR_EL2_RW_AARCH64 | HCR_EL2_HCD_DIS)
-+	mov	\tmp2, #(HCR_EL2_RW_AARCH64)
- 	orr	\tmp, \tmp2, #(HCR_EL2_APK | HCR_EL2_API)
- 	csel	\tmp, \tmp2, \tmp, eq
-+#ifdef CONFIG_ARMV8_DISABLE_HVC
-+	orr	\tmp, \tmp, #(HCR_EL2_HCD_DIS)
-+#endif
- 	msr	hcr_el2, \tmp
- 
- 	/* Return to the EL1_SP1 mode from EL2 */
-@@ -311,7 +314,10 @@ lr	.req	x30
- 
- 1:
- 	/* Initialize HCR_EL2 */
--	ldr	\tmp, =(HCR_EL2_RW_AARCH32 | HCR_EL2_HCD_DIS)
-+	ldr	\tmp, =(HCR_EL2_RW_AARCH32)
-+#ifdef CONFIG_ARMV8_DISABLE_HVC
-+	orr	\tmp, \tmp, #(HCR_EL2_HCD_DIS)
-+#endif
- 	msr	hcr_el2, \tmp
- 
- 	/* Return to AArch32 Supervisor mode from EL2 */
-diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 6044f82b00..6226f6b2c1 100644
---- a/configs/vexpress_aemv8r_defconfig
-+++ b/configs/vexpress_aemv8r_defconfig
-@@ -18,3 +18,4 @@ CONFIG_SYS_PBSIZE=541
- CONFIG_VIRTIO_MMIO=y
- CONFIG_ARMV8_EXCEPTION_VECTORS=n
- CONFIG_ARMV8_SWITCH_TO_EL1=y
-+CONFIG_ARMV8_DISABLE_HVC=n
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch
deleted file mode 100644
index eb2273e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 571f44d5292cfead6f68bf4c6c9519872337bfd0 Mon Sep 17 00:00:00 2001
-From: Qi Feng <qi.feng@arm.com>
-Date: Thu, 28 Jul 2022 17:47:18 +0800
-Subject: [PATCH] vexpress64: Do not set COUNTER_FREQUENCY
-
-VExpress boards normally run as a second-stage bootloader so should not
-need to modify CNTFRQ_EL0. On the BASER_FVP, U-Boot can modify it if
-running at EL2, but shouldn't because it might be different from the
-value being used by the first-stage bootloader (which might be
-providing PSCI services).
-
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Signed-off-by: Qi Feng <qi.feng@arm.com>
-
----
- configs/vexpress_aemv8r_defconfig | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 6226f6b2c1..b902a6a7d9 100644
---- a/configs/vexpress_aemv8r_defconfig
-+++ b/configs/vexpress_aemv8r_defconfig
-@@ -1,5 +1,4 @@
- CONFIG_ARM=y
--CONFIG_COUNTER_FREQUENCY=24000000
- CONFIG_ARCH_VEXPRESS64=y
- CONFIG_NR_DRAM_BANKS=2
- CONFIG_DEFAULT_DEVICE_TREE="arm_fvp"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch
deleted file mode 100644
index 6f5bfa3..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From df01346bb63c821cf8e73202e2894ceda9cb692b Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Tue, 22 Feb 2022 15:32:51 +0000
-Subject: [PATCH] vexpress64: Enable LIBFDT_OVERLAY in the vexpress_aemv8r
- defconfig
-
-Issue-Id: SCM-3874
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Change-Id: Ide0532cf2de89f1bca9c8d4bd2ed0c1a1c57599f
-
----
- configs/vexpress_aemv8r_defconfig | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index b902a6a7d9..a58a9db385 100644
---- a/configs/vexpress_aemv8r_defconfig
-+++ b/configs/vexpress_aemv8r_defconfig
-@@ -18,3 +18,4 @@ CONFIG_VIRTIO_MMIO=y
- CONFIG_ARMV8_EXCEPTION_VECTORS=n
- CONFIG_ARMV8_SWITCH_TO_EL1=y
- CONFIG_ARMV8_DISABLE_HVC=n
-+CONFIG_OF_LIBFDT_OVERLAY=y
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch
deleted file mode 100644
index 61bdf92..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 665ab8253a0e3e17db54a1682bbee0f5659939a2 Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Wed, 18 May 2022 15:24:19 +0100
-Subject: [PATCH] armv8: Allow PRBAR MPU attributes to be configured
-
-In a previous patch, support was added to initialize an S-EL2 MPU on
-armv8r64 machines. This implementation allowed the PRLAR attribute
-index to be configured, but not the shareability and access permission
-attributes in PRBAR. These attributes were hard-coded as "outer
-shareable" and "read/write at EL1 and EL0".
-
-Add separate prlar_attrs and prbar_attrs to the MPU region struct so
-that these attributes can be configured on a per-region basis.
-
-For the BASER_FVP, ensure the MPU memory attributes match those in the
-existing vexpress64 board MMU configuration ("non shareable" for device
-memory and "inner shareable" for normal memory).
-
-Issue-Id: SCM-4641
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Change-Id: I6b72aead91ad12412262aa32c61a53e12eab3984
-
----
- arch/arm/cpu/armv8/cache_v8.c        | 12 ++++++++----
- arch/arm/include/asm/armv8/mpu.h     |  3 ++-
- board/armltd/vexpress64/vexpress64.c |  9 ++++++---
- 3 files changed, 16 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
-index 8611a35eb3..f7de952187 100644
---- a/arch/arm/cpu/armv8/cache_v8.c
-+++ b/arch/arm/cpu/armv8/cache_v8.c
-@@ -390,7 +390,9 @@ static void mpu_clear_regions(void)
- {
- 	int i;
- 
--	for (i = 0; mpu_mem_map[i].end || mpu_mem_map[i].attrs; i++) {
-+	for (i = 0; mpu_mem_map[i].end ||
-+	     mpu_mem_map[i].prbar_attrs ||
-+	     mpu_mem_map[i].prlar_attrs; i++) {
- 		setup_el2_mpu_region(i, 0, 0);
- 	}
- }
-@@ -410,12 +412,14 @@ static void mpu_setup(void)
- 
- 	asm volatile("msr MAIR_EL2, %0" : : "r" MEMORY_ATTRIBUTES);
- 
--	for (i = 0; mpu_mem_map[i].end || mpu_mem_map[i].attrs; i++) {
-+	for (i = 0; mpu_mem_map[i].end ||
-+	     mpu_mem_map[i].prbar_attrs ||
-+	     mpu_mem_map[i].prlar_attrs; i++) {
- 		setup_el2_mpu_region(i,
- 			PRBAR_ADDRESS(mpu_mem_map[i].start)
--				| PRBAR_OUTER_SH | PRBAR_AP_RW_ANY,
-+				| mpu_mem_map[i].prbar_attrs,
- 			PRLAR_ADDRESS(mpu_mem_map[i].end)
--				| mpu_mem_map[i].attrs | PRLAR_EN_BIT
-+				| mpu_mem_map[i].prlar_attrs | PRLAR_EN_BIT
- 			);
- 	}
- 
-diff --git a/arch/arm/include/asm/armv8/mpu.h b/arch/arm/include/asm/armv8/mpu.h
-index 8de627cafd..dd4c689ea6 100644
---- a/arch/arm/include/asm/armv8/mpu.h
-+++ b/arch/arm/include/asm/armv8/mpu.h
-@@ -51,7 +51,8 @@ static inline void setup_el2_mpu_region(uint8_t region, uint64_t base, uint64_t
- struct mpu_region {
- 	u64 start;
- 	u64 end;
--	u64 attrs;
-+	u64 prbar_attrs;
-+	u64 prlar_attrs;
- };
- 
- extern struct mpu_region *mpu_mem_map;
-diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
-index 2310d18eb7..531fa4d618 100644
---- a/board/armltd/vexpress64/vexpress64.c
-+++ b/board/armltd/vexpress64/vexpress64.c
-@@ -42,15 +42,18 @@ static struct mpu_region vexpress64_aemv8r_mem_map[] = {
- 	{
- 		.start = 0x0UL,
- 		.end = 0x7fffffffUL,
--		.attrs = PRLAR_ATTRIDX(MT_NORMAL)
-+		.prbar_attrs = PRBAR_INNER_SH | PRBAR_AP_RW_ANY,
-+		.prlar_attrs = PRLAR_ATTRIDX(MT_NORMAL)
- 	}, {
- 		.start = 0x80000000UL,
- 		.end = 0xffffffffUL,
--		.attrs = PRLAR_ATTRIDX(MT_DEVICE_NGNRNE)
-+		.prbar_attrs = PRBAR_OUTER_SH | PRBAR_AP_RW_ANY,
-+		.prlar_attrs = PRLAR_ATTRIDX(MT_DEVICE_NGNRNE)
- 	}, {
- 		.start = 0x100000000UL,
- 		.end = 0xffffffffffUL,
--		.attrs = PRLAR_ATTRIDX(MT_NORMAL)
-+		.prbar_attrs = PRBAR_INNER_SH | PRBAR_AP_RW_ANY,
-+		.prlar_attrs = PRLAR_ATTRIDX(MT_NORMAL)
- 	}, {
- 		/* List terminator */
- 		0,
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0009-armv8-Enable-icache-when-switching-exception-levels-.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0009-armv8-Enable-icache-when-switching-exception-levels-.patch
deleted file mode 100644
index a4bc746..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0009-armv8-Enable-icache-when-switching-exception-levels-.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From c7301588a3aec9ebf36749da601d0d6e3d807bfc Mon Sep 17 00:00:00 2001
-From: Peter Hoyes <Peter.Hoyes@arm.com>
-Date: Thu, 19 May 2022 09:02:32 +0100
-Subject: [PATCH] armv8: Enable icache when switching exception levels in
- bootefi
-
-bootefi calls the function switch_to_non_secure_mode before calling the
-UEFI payload to handle the case where U-Boot is running at EL3.
-
-For AArch64, the UEFI specification states that:
-   The core will be configured as follows:
-     * MMU enabled
-     * Instruction and data caches enabled
-
-These requirements should be followed when switching exception levels
-for EFI applications.
-
-This function already disables and re-enables the data cache prior to
-switching exception levels, but omits the instruction cache, meaning
-the function returns with the instruction cache disabled at the new
-exception level. Fix this by calling icache_disable prior to switching
-exception levels and icache_enable afterwards.
-
-Issue-Id: SCM-4641
-Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
-Upstream-Status: Inappropriate [other]
-  Implementation pending further discussion
-Change-Id: I678cd5ba39b56e124ab7854608289cd14651ce65
-
----
- arch/arm/cpu/armv8/exception_level.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/arch/arm/cpu/armv8/exception_level.c b/arch/arm/cpu/armv8/exception_level.c
-index 4aad1550f4..0a3e5428e7 100644
---- a/arch/arm/cpu/armv8/exception_level.c
-+++ b/arch/arm/cpu/armv8/exception_level.c
-@@ -27,6 +27,7 @@
- static void entry_non_secure(struct jmp_buf_data *non_secure_jmp)
- {
- 	dcache_enable();
-+	icache_enable();
- 	debug("Reached non-secure mode\n");
- 
- 	/* Restore stack and registers saved in switch_to_non_secure_mode() */
-@@ -61,6 +62,7 @@ void switch_to_non_secure_mode(void)
- 		if (setjmp(&non_secure_jmp))
- 			return;
- 		dcache_disable();	/* flush cache before switch to EL2 */
-+		icache_disable();
- 		/* Move into EL2 and keep running there */
- 		armv8_switch_to_el2((uintptr_t)&non_secure_jmp, 0, 0, 0,
- 				    (uintptr_t)entry_non_secure, ES_TO_AARCH64);
-@@ -68,6 +70,7 @@ void switch_to_non_secure_mode(void)
- 		if (setjmp(&non_secure_jmp))
- 			return;
- 		dcache_disable();	/* flush cache before switch to EL1 */
-+		icache_disable();
- 		/* Move into EL1 and keep running there */
- 		armv8_switch_to_el1((uintptr_t)&non_secure_jmp, 0, 0, 0,
- 				    (uintptr_t)entry_non_secure, ES_TO_AARCH64);
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
index d1dcd74..c2916a5 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -3,7 +3,7 @@
 #
 # Corstone1000 64-bit machines
 #
-DEPENDS:append:corstone1000 = " gnutls-native"
+DEPENDS:append:corstone1000 = " gnutls-native openssl-native efitools-native"
 CORSTONE1000_DEVICE_TREE:corstone1000-mps3 = "corstone1000-mps3"
 CORSTONE1000_DEVICE_TREE:corstone1000-fvp = "corstone1000-fvp"
 EXTRA_OEMAKE:append:corstone1000 = ' DEVICE_TREE=${CORSTONE1000_DEVICE_TREE}'
@@ -45,31 +45,30 @@
 	file://0032-Enable-EFI-set-get-time-services.patch			  \
 	file://0033-corstone1000-detect-inflated-kernel-size.patch			  \
 	file://0034-corstone1000-ESRT-add-unique-firmware-GUID.patch		\
+	file://0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch \
+	file://0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch \
+	file://0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch \
+	file://0038-corstone1000-add-signature-device-tree-overlay.patch	  \
+	file://0039-corstone1000-enable-authenticated-capsule-config.patch	  \
+	file://0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch	  \
         "
 
+do_configure:append:corstone1000(){
+    openssl req -x509 -sha256 -newkey rsa:2048 -subj /CN=CRT/ -keyout ${B}/CRT.key -out ${B}/CRT.crt -nodes -days 365
+    cert-to-efi-sig-list ${B}/CRT.crt ${B}/corstone1000_defconfig/CRT.esl
+}
+
+do_install:append:corstone1000() {
+   install -D -p -m 0644 ${B}/CRT.crt ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_cert.crt
+   install -D -p -m 0644 ${B}/CRT.key ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_key.key
+}
+
 #
 # FVP BASE
 #
 SRC_URI:append:fvp-base = " file://bootargs.cfg \
 	file://0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch \
 	"
-
-#
-# FVP BASER
-#
-SRC_URI:append:fvp-baser-aemv8r64 = " \
-    file://0001-armv8-Add-ARMv8-MPU-configuration-logic.patch \
-    file://0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch \
-    file://0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch \
-    file://0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch \
-    file://0005-armv8-Make-disabling-HVC-configurable-when-switching.patch \
-    file://0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch \
-    file://0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch \
-    file://0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch \
-    file://0009-armv8-Enable-icache-when-switching-exception-levels-.patch \
-    "
-
-
 #
 # Juno Machines
 #
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202305.bb b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202305.bb
new file mode 100644
index 0000000..2332550
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202305.bb
@@ -0,0 +1,7 @@
+SRCREV_edk2           ?= "ba91d0292e593df8528b66f99c1b0b14fadc8e16"
+SRCREV_edk2-platforms ?= "be2af02a3fb202756ed9855173e0d0ed878ab6be"
+
+# FIXME - clang is having issues with antlr
+TOOLCHAIN:aarch64 = "gcc"
+
+require recipes-bsp/uefi/edk2-firmware.inc
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-preempt-rt.scc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-preempt-rt.scc
deleted file mode 100644
index e8fea0b..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-preempt-rt.scc
+++ /dev/null
@@ -1,6 +0,0 @@
-define KMACHINE fvp-baser-aemv8r64
-define KTYPE preempt-rt
-define KARCH arm64
-
-include ktypes/preempt-rt/preempt-rt.scc
-include fvp-baser-aemv8r64.scc
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-standard.scc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-standard.scc
deleted file mode 100644
index fd1fb28..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64-standard.scc
+++ /dev/null
@@ -1,7 +0,0 @@
-define KMACHINE fvp-baser-aemv8r64
-define KTYPE standard
-define KARCH arm64
-
-include ktypes/standard/standard.scc
-
-include fvp-baser-aemv8r64.scc
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64.scc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64.scc
deleted file mode 100644
index a8d7967..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/arm-platforms-kmeta/bsp/arm-platforms/fvp-baser-aemv8r64.scc
+++ /dev/null
@@ -1,4 +0,0 @@
-kconf hardware arm64.cfg
-kconf hardware fvp-common-peripherals.cfg
-include cfg/virtio.scc
-include virtio-9p.scc
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch
index 5af041e..d8d9488 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch
@@ -1,7 +1,7 @@
-From 19eabe2a5fb97530820dd2a22fe6bc143a8d693f Mon Sep 17 00:00:00 2001
+From 9eac502eacd36a4975ec34a3f076594fa4364032 Mon Sep 17 00:00:00 2001
 From: Emekcan <emekcan.aras@arm.com>
 Date: Fri, 19 Aug 2022 14:51:08 +0100
-Subject: [PATCH 2/6] Add external system driver
+Subject: [PATCH] Add external system driver
 
 Adds external system driver to control it
 from user-space. It provides run and reset
@@ -22,24 +22,26 @@
  create mode 100644 drivers/misc/arm/extsys_ctrl.c
 
 diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index 358ad56f6524..fd8654ffdab0 100644
+index 433aa4197785..912986abc46c 100644
 --- a/drivers/misc/Kconfig
 +++ b/drivers/misc/Kconfig
-@@ -514,4 +514,5 @@ source "drivers/misc/habanalabs/Kconfig"
+@@ -555,4 +555,5 @@ source "drivers/misc/cardreader/Kconfig"
  source "drivers/misc/uacce/Kconfig"
  source "drivers/misc/pvpanic/Kconfig"
  source "drivers/misc/mchp_pci1xxxx/Kconfig"
 +source "drivers/misc/arm/Kconfig"
  endmenu
 diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index ac9b3e757ba1..f7852e4fd63d 100644
+index 56de43943cd5..22e6561b8192 100644
 --- a/drivers/misc/Makefile
 +++ b/drivers/misc/Makefile
-@@ -62,3 +62,4 @@ obj-$(CONFIG_HI6421V600_IRQ)	+= hi6421v600-irq.o
+@@ -63,5 +63,6 @@ obj-$(CONFIG_HI6421V600_IRQ)	+= hi6421v600-irq.o
  obj-$(CONFIG_OPEN_DICE)		+= open-dice.o
  obj-$(CONFIG_GP_PCI1XXXX)	+= mchp_pci1xxxx/
  obj-$(CONFIG_VCPU_STALL_DETECTOR)	+= vcpu_stall_detector.o
 +obj-y				+= arm/
+ obj-$(CONFIG_TMR_MANAGER)      += xilinx_tmr_manager.o
+ obj-$(CONFIG_TMR_INJECT)	+= xilinx_tmr_inject.o
 diff --git a/drivers/misc/arm/Kconfig b/drivers/misc/arm/Kconfig
 new file mode 100644
 index 000000000000..9f1eb284e530
@@ -216,6 +218,3 @@
 +MODULE_DESCRIPTION("Arm External System Control Driver");
 +MODULE_AUTHOR("Morten Borup Petersen");
 +MODULE_AUTHOR("Rui Miguel Silva <rui.silva@arm.com>");
--- 
-2.39.0
-
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch
index 3490429..cd9cec2 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch
@@ -1,7 +1,7 @@
-From 9fb971c23d423f593620ed82fb69a7e2cd35986a Mon Sep 17 00:00:00 2001
+From a834f4e143ff647e7677dc60ab57ee5883f3ac8f Mon Sep 17 00:00:00 2001
 From: Emekcan <emekcan.aras@arm.com>
 Date: Wed, 17 Aug 2022 14:21:42 +0100
-Subject: [PATCH 3/6] Add rpmsg driver for corstone1000
+Subject: [PATCH] Add rpmsg driver for corstone1000
 
 Adds rpmsg driver to communicate with external
 system in corstone1000 platform.
@@ -216,6 +216,3 @@
 +MODULE_LICENSE("GPL v2");
 +MODULE_DESCRIPTION("ARM RPMSG Driver");
 +MODULE_AUTHOR("Tushar Khandelwal <tushar.khandelwal@arm.com>");
--- 
-2.39.0
-
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch
index 5e70c00..516dbd7 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch
@@ -1,7 +1,7 @@
-From ce77351c8ae6b04070135fdaedaad337bb0b4ef5 Mon Sep 17 00:00:00 2001
+From c1ffd793062a13afdcc07d4bc1a8007188bfca5f Mon Sep 17 00:00:00 2001
 From: Rui Miguel Silva <rui.silva@linaro.org>
 Date: Tue, 27 Sep 2022 10:05:27 +0100
-Subject: [PATCH 4/6] rpmsg: arm: fix return value
+Subject: [PATCH] rpmsg: arm: fix return value
 
 The creation of and endpoint returns a pointer, fix the return
 value to the right type.
@@ -28,6 +28,3 @@
  	}
  
  	return &channel->ept;
--- 
-2.39.0
-
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch
index 852572a..ef2eb7c 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch
@@ -1,7 +1,7 @@
-From 590bf152e18b3cf7166c7accfc32ed3b2d07bf09 Mon Sep 17 00:00:00 2001
+From a8c295e1ff1d2b1032cc7495f212c56ba9f3e874 Mon Sep 17 00:00:00 2001
 From: Rui Miguel Silva <rui.silva@linaro.org>
 Date: Tue, 27 Sep 2022 10:07:21 +0100
-Subject: [PATCH 5/6] rpmsg: arm: update chrdev to ctrldev registration
+Subject: [PATCH] rpmsg: arm: update chrdev to ctrldev registration
 
 Since "rpmsg: Update rpmsg_chrdev_register_device function",
 there was a replacement of the chrdev driver to ctrldev
@@ -26,6 +26,3 @@
  }
  
  static const struct of_device_id client_of_match[] = {
--- 
-2.39.0
-
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch
index 9956f26..4fbeb23 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch
@@ -1,7 +1,7 @@
-From 00851c43f4d00e7451550660ab652e9ac9128e02 Mon Sep 17 00:00:00 2001
+From 555ac46f6f5157741a6fd8f21f74beb1340ed941 Mon Sep 17 00:00:00 2001
 From: Emekcan <emekcan.aras@arm.com>
 Date: Thu, 13 Oct 2022 20:53:42 +0100
-Subject: [PATCH 6/6] Adds workaround for cs1k specific bug
+Subject: [PATCH] Adds workaround for cs1k specific bug
 
 Adds a temporary workaround to solve a possible
 race-conditioning issue in the tee driver
@@ -15,7 +15,7 @@
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
-index d5e86ef40b89..cbb944f63321 100644
+index 2109cd178ff7..c15b3a83c720 100644
 --- a/drivers/firmware/arm_ffa/driver.c
 +++ b/drivers/firmware/arm_ffa/driver.c
 @@ -32,6 +32,7 @@
@@ -26,7 +26,7 @@
  
  #include "common.h"
  
-@@ -362,7 +363,7 @@ static int ffa_msg_send_direct_req(u16 src_id, u16 dst_id, bool mode_32bit,
+@@ -282,7 +283,7 @@ static int ffa_msg_send_direct_req(u16 src_id, u16 dst_id, bool mode_32bit,
  {
  	u32 req_id, resp_id, src_dst_ids = PACK_TARGET_INFO(src_id, dst_id);
  	ffa_value_t ret;
@@ -35,6 +35,3 @@
  	if (mode_32bit) {
  		req_id = FFA_MSG_SEND_DIRECT_REQ;
  		resp_id = FFA_MSG_SEND_DIRECT_RESP;
--- 
-2.39.0
-
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/fvp-baser-aemv8r64/fvp-baser-aemv8r64.dts b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/fvp-baser-aemv8r64/fvp-baser-aemv8r64.dts
deleted file mode 100644
index 6911a59..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/fvp-baser-aemv8r64/fvp-baser-aemv8r64.dts
+++ /dev/null
@@ -1,212 +0,0 @@
-/dts-v1/;
-
-/ {
-
-        #address-cells = <0x2>;
-        #size-cells = <0x2>;
-        interrupt-parent = <0x1>;
-        model = "Generated";
-        compatible = "arm,base";
-
-        memory@0 {
-                #address-cells = <0x2>;
-                #size-cells = <0x2>;
-                device_type = "memory";
-                reg = <0x0        0x0        0x0 0x80000000>,
-                      <0x00000008 0x80000000 0x0 0x80000000>;
-        };
-
-        cpus {
-                #address-cells = <0x2>;
-                #size-cells = <0x0>;
-
-                cpu-map {
-                        cluster0 {
-                                core0 { thread0 { cpu = <&CPU_0>; }; };
-                                core1 { thread0 { cpu = <&CPU_1>; }; };
-                                core2 { thread0 { cpu = <&CPU_2>; }; };
-                                core3 { thread0 { cpu = <&CPU_3>; }; };
-                        };
-                };
-
-                CPU_0: cpu@0 {
-                        device_type = "cpu";
-                        compatible = "arm,armv8";
-                        reg = <0x0 0x0>;
-                        enable-method = "spin-table";
-                        cpu-release-addr = <0x0 0x7f800>;
-                };
-
-                CPU_1: cpu@1 {
-                        device_type = "cpu";
-                        compatible = "arm,armv8";
-                        reg = <0x0 0x1>;
-                        enable-method = "spin-table";
-                        cpu-release-addr = <0x0 0x7f808>;
-                };
-
-                CPU_2: cpu@2 {
-                        device_type = "cpu";
-                        compatible = "arm,armv8";
-                        reg = <0x0 0x2>;
-                        enable-method = "spin-table";
-                        cpu-release-addr = <0x0 0x7f810>;
-                };
-
-                CPU_3: cpu@3 {
-                        device_type = "cpu";
-                        compatible = "arm,armv8";
-                        reg = <0x0 0x3>;
-                        enable-method = "spin-table";
-                        cpu-release-addr = <0x0 0x7f818>;
-                };
-        };
-
-        interrupt-controller@af000000 {
-                compatible = "arm,gic-v3";
-                #interrupt-cells = <0x3>;
-                #address-cells = <0x2>;
-                #size-cells = <0x2>;
-                ranges;
-                interrupt-controller;
-                #redistributor-regions = <0x1>;
-                reg = <0x0 0xaf000000 0x0 0x10000>,     // GICD
-                      <0x0 0xaf100000 0x0 0x100000>,    // GICR
-                      <0x0 0xac000000 0x0 0x2000>,      // GICC
-                      <0x0 0xac010000 0x0 0x2000>,      // GICH
-                      <0x0 0xac02f000 0x0 0x2000>;      // GICV
-                interrupts = <0x1 9 0x4>;
-                linux,phandle = <0x1>;
-                phandle = <0x1>;
-
-                its: msi-controller@2f020000 {
-                        #msi-cells = <1>;
-                        compatible = "arm,gic-v3-its";
-                        reg = <0x0 0xaf020000 0x0 0x20000>; // GITS
-                        msi-controller;
-                };
-
-        };
-
-        refclk100mhz: refclk100mhz {
-                compatible = "fixed-clock";
-                #clock-cells = <0>;
-                clock-frequency = <100000000>;
-                clock-output-names = "apb_pclk";
-        };
-
-        refclk24mhz: refclk24mhz {
-                compatible = "fixed-clock";
-                #clock-cells = <0>;
-                clock-frequency = <24000000>;
-                clock-output-names = "refclk24mhz";
-        };
-
-        refclk1hz: refclk1hz {
-                compatible = "fixed-clock";
-                #clock-cells = <0>;
-                clock-frequency = <1>;
-                clock-output-names = "refclk1hz";
-        };
-
-        uart@9c090000 {
-                compatible = "arm,pl011", "arm,primecell";
-                reg = <0x0 0x9c090000 0x0 0x1000>;
-                interrupts = <0x0 5 0x4>;
-                clocks = <&refclk24mhz>, <&refclk100mhz>;
-                clock-names = "uartclk", "apb_pclk";
-        };
-
-        uart@9c0a0000 {
-                compatible = "arm,pl011", "arm,primecell";
-                reg = <0x0 0x9c0a0000 0x0 0x1000>;
-                interrupts = <0x0 6 0x4>;
-                clocks = <&refclk24mhz>, <&refclk100mhz>;
-                clock-names = "uartclk", "apb_pclk";
-        };
-
-        uart@9c0b0000 {
-                compatible = "arm,pl011", "arm,primecell";
-                reg = <0x0 0x9c0b0000 0x0 0x1000>;
-                interrupts = <0x0 7 0x4>;
-                clocks = <&refclk24mhz>, <&refclk100mhz>;
-                clock-names = "uartclk", "apb_pclk";
-        };
-
-        uart@9c0c0000 {
-                compatible = "arm,pl011", "arm,primecell";
-                reg = <0x0 0x9c0c0000 0x0 0x1000>;
-                interrupts = <0x0 8 0x4>;
-                clocks = <&refclk24mhz>, <&refclk100mhz>;
-                clock-names = "uartclk", "apb_pclk";
-        };
-
-        wdt@9c0f0000 {
-                compatible = "arm,sp805", "arm,primecell";
-                reg = <0x0 0x9c0f0000 0x0 0x1000>;
-                interrupts = <0x0 0 0x4>;
-                clocks = <&refclk24mhz>, <&refclk100mhz>;
-                clock-names = "wdog_clk", "apb_pclk";
-        };
-
-        rtc@9c170000 {
-                compatible = "arm,pl031", "arm,primecell";
-                reg = <0x0 0x9c170000 0x0 0x1000>;
-                interrupts = <0x0 4 0x4>;
-                clocks = <&refclk1hz>;
-                clock-names = "apb_pclk";
-        };
-
-        virtio-block@9c130000 {
-                compatible = "virtio,mmio";
-                reg = <0 0x9c130000 0 0x200>;
-                interrupts = <0x0 42 0x4>;
-        };
-
-        virtio-p9@9c140000{
-                compatible = "virtio,mmio";
-                reg = <0x0 0x9c140000 0x0 0x1000>;
-                interrupts = <0x0 43 0x4>;
-        };
-
-        virtio-net@9c150000 {
-                compatible = "virtio,mmio";
-                reg = <0 0x9c150000 0 0x200>;
-                interrupts = <0x0 44 0x4>;
-        };
-
-        virtio-rng@9c200000 {
-                compatible = "virtio,mmio";
-                reg = <0 0x9c200000 0 0x200>;
-                interrupts = <0x0 46 0x4>;
-        };
-
-        timer {
-                compatible = "arm,armv8-timer";
-                interrupts = <0x1 13 0xff08>,
-                             <0x1 14 0xff08>,
-                             <0x1 11 0xff08>,
-                             <0x1  4 0xff08>;
-                clock-frequency = <100000000>;
-        };
-
-        aliases {
-                serial0 = "/uart@9c090000";
-                serial1 = "/uart@9c0a0000";
-                serial2 = "/uart@9c0b0000";
-                serial3 = "/uart@9c0c0000";
-        };
-
-        pmu {
-                compatible = "arm,armv8-pmuv3";
-                interrupts = <0 60 4>,
-                             <0 61 4>,
-                             <0 62 4>,
-                             <0 63 4>;
-        };
-
-        chosen {
-                bootargs = "earlycon console=ttyAMA0 loglevel=8 rootfstype=ext4 root=/dev/vda1 rw";
-                stdout-path = "serial0";
-        };
-};
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
index b49ac80..4028cf3 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
@@ -14,7 +14,6 @@
 # Arm platforms kmeta
 SRC_URI_KMETA = "file://arm-platforms-kmeta;type=kmeta;name=arm-platforms-kmeta;destsuffix=arm-platforms-kmeta"
 SRC_URI:append:fvp-base = " ${SRC_URI_KMETA}"
-SRC_URI:append:fvp-baser-aemv8r64 = " ${SRC_URI_KMETA}"
 SRC_URI:append:juno = " ${SRC_URI_KMETA}"
 SRC_URI:append:n1sdp = " ${SRC_URI_KMETA}"
 SRCREV:arm-platforms-kmeta = "6147e82375aa9df8f2a162d42ea6406c79c854c5"
@@ -59,13 +58,6 @@
 SRC_URI:append:fvp-base = " file://0001-arm64-dts-fvp-Enable-virtio-rng-support.patch"
 
 #
-# FVP BaseR AEMv8r64 Machine
-#
-COMPATIBLE_MACHINE:fvp-baser-aemv8r64 = "fvp-baser-aemv8r64"
-FILESEXTRAPATHS:prepend:fvp-baser-aemv8r64 := "${ARMBSPFILESPATHS}"
-SRC_URI:append:fvp-baser-aemv8r64 = " file://fvp-baser-aemv8r64.dts;subdir=git/arch/arm64/boot/dts/arm"
-
-#
 # Juno KMACHINE
 #
 COMPATIBLE_MACHINE:juno = "juno"
@@ -80,7 +72,7 @@
 #
 # N1SDP KMACHINE
 #
-FILESEXTRAPATHS:prepend:n1sdp := "${THISDIR}/linux-yocto-6.1/n1sdp:"
+FILESEXTRAPATHS:prepend:n1sdp := "${THISDIR}/linux-yocto-6.4/n1sdp:"
 COMPATIBLE_MACHINE:n1sdp = "n1sdp"
 KBUILD_DEFCONFIG:n1sdp = "defconfig"
 KCONFIG_MODE:n1sdp = "--alldefconfig"
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
deleted file mode 100644
index d7a47c6..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 32ae4539865e64bcfb0c6955bdac8db5904e493d Mon Sep 17 00:00:00 2001
-From: Manoj Kumar <manoj.kumar3@arm.com>
-Date: Mon, 1 Feb 2021 21:36:43 +0530
-Subject: [PATCH] iommu/arm-smmu-v3: workaround for ATC_INV_SIZE_ALL in N1SDP
-
-ATC_INV_SIZE_ALL request should automatically translate to ATS
-address which is not happening in SMMUv3 version gone into
-N1SDP platform. This workaround manually sets the ATS address
-field to proper value for ATC_INV_SIZE_ALL command.
-
-Change-Id: If89465be94720a62be85e1e6612f17e93fa9b8a5
-Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
-
-Upstream-Status: Inappropriate [Workaround]
-Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
----
- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 1 +
- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
-index d4d8bfee9feb..0524bf2ec021 100644
---- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
-+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
-@@ -1738,6 +1738,7 @@ arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
- 	};
- 
- 	if (!size) {
-+		cmd->atc.addr = ATC_INV_ADDR_ALL;
- 		cmd->atc.size = ATC_INV_SIZE_ALL;
- 		return;
- 	}
-diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
-index cd48590ada30..20892b2bfe1d 100644
---- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
-+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
-@@ -472,6 +472,7 @@ struct arm_smmu_cmdq_ent {
- 
- 		#define CMDQ_OP_ATC_INV		0x40
- 		#define ATC_INV_SIZE_ALL	52
-+		#define ATC_INV_ADDR_ALL        0x7FFFFFFFFFFFF000UL
- 		struct {
- 			u32			sid;
- 			u32			ssid;
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
deleted file mode 100644
index cb72ed0..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From fc8605e74b51d9e0ab8efd0489eca2e11d807f07 Mon Sep 17 00:00:00 2001
-From: Manoj Kumar <manoj.kumar3@arm.com>
-Date: Tue, 31 Aug 2021 16:15:38 +0000
-Subject: [PATCH] n1sdp: pci_quirk: add acs override for PCI devices
-
-Patch taken from:
-https://gitlab.com/Queuecumber/linux-acs-override/raw/master/workspaces/5.4/acso.patch
-
-Change-Id: Ib926bf50524ce9990fbaa2f2f8670fe84bd571f9
-Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-
-Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
-Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
----
- .../admin-guide/kernel-parameters.txt         |   8 ++
- drivers/pci/quirks.c                          | 102 ++++++++++++++++++
- 2 files changed, 110 insertions(+)
-
-diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 963cdaecabcb..8e94af513b9f 100644
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4162,6 +4162,14 @@
- 		nomsi		[MSI] If the PCI_MSI kernel config parameter is
- 				enabled, this kernel boot option can be used to
- 				disable the use of MSI interrupts system-wide.
-+		pcie_acs_override [PCIE] Override missing PCIe ACS support for
-+				downstream
-+				All downstream ports - full ACS capabilities
-+				multfunction
-+				All multifunction devices - multifunction ACS subset
-+				id:nnnn:nnnn
-+				Specfic device - full ACS capabilities
-+				Specified as vid:did (vendor/device ID) in hex
- 		noioapicquirk	[APIC] Disable all boot interrupt quirks.
- 				Safety option to keep boot IRQs enabled. This
- 				should never be necessary.
-diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index 285acc4aaccc..d6ebef1f30db 100644
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -3612,6 +3612,107 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
- 	dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
- }
- 
-+static bool acs_on_downstream;
-+static bool acs_on_multifunction;
-+
-+#define NUM_ACS_IDS 16
-+struct acs_on_id {
-+	unsigned short vendor;
-+	unsigned short device;
-+};
-+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
-+static u8 max_acs_id;
-+
-+static __init int pcie_acs_override_setup(char *p)
-+{
-+	if (!p)
-+		return -EINVAL;
-+
-+	while (*p) {
-+		if (!strncmp(p, "downstream", 10))
-+			acs_on_downstream = true;
-+		if (!strncmp(p, "multifunction", 13))
-+			acs_on_multifunction = true;
-+		if (!strncmp(p, "id:", 3)) {
-+			char opt[5];
-+			int ret;
-+			long val;
-+
-+			if (max_acs_id >= NUM_ACS_IDS - 1) {
-+				pr_warn("Out of PCIe ACS override slots (%d)\n",
-+						NUM_ACS_IDS);
-+				goto next;
-+			}
-+
-+			p += 3;
-+			snprintf(opt, 5, "%s", p);
-+			ret = kstrtol(opt, 16, &val);
-+			if (ret) {
-+				pr_warn("PCIe ACS ID parse error %d\n", ret);
-+				goto next;
-+			}
-+			acs_on_ids[max_acs_id].vendor = val;
-+
-+			p += strcspn(p, ":");
-+			if (*p != ':') {
-+				pr_warn("PCIe ACS invalid ID\n");
-+				goto next;
-+			}
-+
-+			p++;
-+			snprintf(opt, 5, "%s", p);
-+			ret = kstrtol(opt, 16, &val);
-+			if (ret) {
-+				pr_warn("PCIe ACS ID parse error %d\n", ret);
-+				goto next;
-+			}
-+			acs_on_ids[max_acs_id].device = val;
-+			max_acs_id++;
-+		}
-+next:
-+		p += strcspn(p, ",");
-+		if (*p == ',')
-+			p++;
-+	}
-+
-+	if (acs_on_downstream || acs_on_multifunction || max_acs_id)
-+		pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
-+
-+	return 0;
-+}
-+early_param("pcie_acs_override", pcie_acs_override_setup);
-+
-+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
-+{
-+	int i;
-+
-+	/* Never override ACS for legacy devices or devices with ACS caps */
-+	if (!pci_is_pcie(dev) ||
-+		pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
-+			return -ENOTTY;
-+
-+	for (i = 0; i < max_acs_id; i++)
-+		if (acs_on_ids[i].vendor == dev->vendor &&
-+			acs_on_ids[i].device == dev->device)
-+				return 1;
-+
-+	switch (pci_pcie_type(dev)) {
-+	case PCI_EXP_TYPE_DOWNSTREAM:
-+	case PCI_EXP_TYPE_ROOT_PORT:
-+		if (acs_on_downstream)
-+			return 1;
-+		break;
-+	case PCI_EXP_TYPE_ENDPOINT:
-+	case PCI_EXP_TYPE_UPSTREAM:
-+	case PCI_EXP_TYPE_LEG_END:
-+	case PCI_EXP_TYPE_RC_END:
-+		if (acs_on_multifunction && dev->multifunction)
-+			return 1;
-+	}
-+
-+	return -ENOTTY;
-+}
-+
- /*
-  * Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
-  * prevented for those affected devices.
-@@ -4980,6 +5081,7 @@ static const struct pci_dev_acs_enabled {
- 	{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
- 	/* Wangxun nics */
- 	{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
-+	{ PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
- 	{ 0 }
- };
- 
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
deleted file mode 100644
index 9b439e4..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
+++ /dev/null
@@ -1,324 +0,0 @@
-From 5aa5769af625c79589fd84b8afc06149c2362218 Mon Sep 17 00:00:00 2001
-From: Deepak Pandey <Deepak.Pandey@arm.com>
-Date: Fri, 31 May 2019 16:42:43 +0100
-Subject: [PATCH] pcie: Add quirk for the Arm Neoverse N1SDP platform
-
-The Arm N1SDP SoC suffers from some PCIe integration issues, most
-prominently config space accesses to not existing BDFs being answered
-with a bus abort, resulting in an SError.
-To mitigate this, the firmware scans the bus before boot (catching the
-SErrors) and creates a table with valid BDFs, which acts as a filter for
-Linux' config space accesses.
-
-Add code consulting the table as an ACPI PCIe quirk, also register the
-corresponding device tree based description of the host controller.
-Also fix the other two minor issues on the way, namely not being fully
-ECAM compliant and config space accesses being restricted to 32-bit
-accesses only.
-
-This allows the Arm Neoverse N1SDP board to boot Linux without crashing
-and to access *any* devices (there are no platform devices except UART).
-
-Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
-[Sudipto: extend to cover the CCIX root port as well]
-Signed-off-by: Sudipto Paul <sudipto.paul@arm.com>
-[Andre: fix coding style issues, rewrite some parts, add DT support]
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-
-Change-Id: I1d3a4b9bf6b3b883d262e3c4ff1f88a0eb81c1fe
-Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
-Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
----
- arch/arm64/configs/defconfig        |   1 +
- drivers/acpi/pci_mcfg.c             |   7 +
- drivers/pci/controller/Kconfig      |  11 ++
- drivers/pci/controller/Makefile     |   2 +-
- drivers/pci/controller/pcie-n1sdp.c | 198 ++++++++++++++++++++++++++++
- include/linux/pci-ecam.h            |   2 +
- 6 files changed, 220 insertions(+), 1 deletion(-)
- create mode 100644 drivers/pci/controller/pcie-n1sdp.c
-
-diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
-index bbbc31391a65..973aa3b4d407 100644
---- a/arch/arm64/configs/defconfig
-+++ b/arch/arm64/configs/defconfig
-@@ -214,6 +214,7 @@ CONFIG_NFC_S3FWRN5_I2C=m
- CONFIG_PCI=y
- CONFIG_PCIEPORTBUS=y
- CONFIG_PCIEAER=y
-+CONFIG_PCI_QUIRKS=y
- CONFIG_PCI_IOV=y
- CONFIG_PCI_PASID=y
- CONFIG_HOTPLUG_PCI=y
-diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
-index 860014b89b8e..2d4c1c699ffe 100644
---- a/drivers/acpi/pci_mcfg.c
-+++ b/drivers/acpi/pci_mcfg.c
-@@ -171,6 +171,13 @@ static struct mcfg_fixup mcfg_quirks[] = {
- 	ALTRA_ECAM_QUIRK(1, 13),
- 	ALTRA_ECAM_QUIRK(1, 14),
- 	ALTRA_ECAM_QUIRK(1, 15),
-+
-+#define N1SDP_ECAM_MCFG(rev, seg, ops) \
-+	{"ARMLTD", "ARMN1SDP", rev, seg, MCFG_BUS_ANY, ops }
-+
-+	/* N1SDP SoC with v1 PCIe controller */
-+	N1SDP_ECAM_MCFG(0x20181101, 0, &pci_n1sdp_pcie_ecam_ops),
-+	N1SDP_ECAM_MCFG(0x20181101, 1, &pci_n1sdp_ccix_ecam_ops),
- #endif /* ARM64 */
- 
- #ifdef CONFIG_LOONGARCH
-diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
-index bfd9bac37e24..7a65799dded7 100644
---- a/drivers/pci/controller/Kconfig
-+++ b/drivers/pci/controller/Kconfig
-@@ -50,6 +50,17 @@ config PCI_IXP4XX
- 	  Say Y here if you want support for the PCI host controller found
- 	  in the Intel IXP4xx XScale-based network processor SoC.
- 
-+config PCIE_HOST_N1SDP_ECAM
-+	bool "ARM N1SDP PCIe Controller"
-+	depends on ARM64
-+	depends on OF || (ACPI && PCI_QUIRKS)
-+	select PCI_HOST_COMMON
-+	default y if ARCH_VEXPRESS
-+	help
-+	  Say Y here if you want PCIe support for the Arm N1SDP platform.
-+	  The controller is ECAM compliant, but needs a quirk to workaround
-+	  an integration issue.
-+
- config PCI_TEGRA
- 	bool "NVIDIA Tegra PCIe controller"
- 	depends on ARCH_TEGRA || COMPILE_TEST
-diff --git a/drivers/pci/controller/Makefile b/drivers/pci/controller/Makefile
-index 37c8663de7fe..08e5afcf6e86 100644
---- a/drivers/pci/controller/Makefile
-+++ b/drivers/pci/controller/Makefile
-@@ -39,7 +39,7 @@ obj-$(CONFIG_PCI_LOONGSON) += pci-loongson.o
- obj-$(CONFIG_PCIE_HISI_ERR) += pcie-hisi-error.o
- obj-$(CONFIG_PCIE_APPLE) += pcie-apple.o
- obj-$(CONFIG_PCIE_MT7621) += pcie-mt7621.o
--
-+obj-$(CONFIG_PCIE_HOST_N1SDP_ECAM) += pcie-n1sdp.o
- # pcie-hisi.o quirks are needed even without CONFIG_PCIE_DW
- obj-y				+= dwc/
- obj-y				+= mobiveil/
-diff --git a/drivers/pci/controller/pcie-n1sdp.c b/drivers/pci/controller/pcie-n1sdp.c
-new file mode 100644
-index 000000000000..408699b9dcb1
---- /dev/null
-+++ b/drivers/pci/controller/pcie-n1sdp.c
-@@ -0,0 +1,198 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Copyright (C) 2018/2019 ARM Ltd.
-+ *
-+ * This quirk is to mask the following issues:
-+ * - PCIE SLVERR: config space accesses to invalid PCIe BDFs cause a bus
-+ *		  error (signalled as an asynchronous SError)
-+ * - MCFG BDF mapping: the root complex is mapped separately from the device
-+ *		       config space
-+ * - Non 32-bit accesses to config space are not supported.
-+ *
-+ * At boot time the SCP board firmware creates a discovery table with
-+ * the root complex' base address and the valid BDF values, discovered while
-+ * scanning the config space and catching the SErrors.
-+ * Linux responds only to the EPs listed in this table, returning NULL
-+ * for the rest.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/sizes.h>
-+#include <linux/of_pci.h>
-+#include <linux/of.h>
-+#include <linux/pci-ecam.h>
-+#include <linux/platform_device.h>
-+#include <linux/module.h>
-+
-+#include "../pci.h"
-+
-+/* Platform specific values as hardcoded in the firmware. */
-+#define AP_NS_SHARED_MEM_BASE	0x06000000
-+#define MAX_SEGMENTS		2		/* Two PCIe root complexes. */
-+#define BDF_TABLE_SIZE		SZ_16K
-+
-+/*
-+ * Shared memory layout as written by the SCP upon boot time:
-+ *  ----
-+ *  Discover data header --> RC base address
-+ *                       \-> BDF Count
-+ *  Discover data        --> BDF 0...n
-+ *  ----
-+ */
-+struct pcie_discovery_data {
-+	u32 rc_base_addr;
-+	u32 nr_bdfs;
-+	u32 valid_bdfs[0];
-+} *pcie_discovery_data[MAX_SEGMENTS];
-+
-+void __iomem *rc_remapped_addr[MAX_SEGMENTS];
-+
-+/*
-+ * map_bus() is called before we do a config space access for a certain
-+ * device. We use this to check whether this device is valid, avoiding
-+ * config space accesses which would result in an SError otherwise.
-+ */
-+static void __iomem *pci_n1sdp_map_bus(struct pci_bus *bus, unsigned int devfn,
-+				       int where)
-+{
-+	struct pci_config_window *cfg = bus->sysdata;
-+	unsigned int devfn_shift = cfg->ops->bus_shift - 8;
-+	unsigned int busn = bus->number;
-+	unsigned int segment = bus->domain_nr;
-+	unsigned int bdf_addr;
-+	unsigned int table_count, i;
-+	struct pci_dev *dev;
-+
-+	if (segment >= MAX_SEGMENTS ||
-+	    busn < cfg->busr.start || busn > cfg->busr.end)
-+		return NULL;
-+
-+	/* The PCIe root complex has a separate config space mapping. */
-+	if (busn == 0 && devfn == 0)
-+		return rc_remapped_addr[segment] + where;
-+
-+	dev = pci_get_domain_bus_and_slot(segment, busn, devfn);
-+	if (dev && dev->is_virtfn)
-+		return pci_ecam_map_bus(bus, devfn, where);
-+
-+	/* Accesses beyond the vendor ID always go to existing devices. */
-+	if (where > 0)
-+		return pci_ecam_map_bus(bus, devfn, where);
-+
-+	busn -= cfg->busr.start;
-+	bdf_addr = (busn << cfg->ops->bus_shift) + (devfn << devfn_shift);
-+	table_count = pcie_discovery_data[segment]->nr_bdfs;
-+	for (i = 0; i < table_count; i++) {
-+		if (bdf_addr == pcie_discovery_data[segment]->valid_bdfs[i])
-+			return pci_ecam_map_bus(bus, devfn, where);
-+	}
-+
-+	return NULL;
-+}
-+
-+static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
-+{
-+	phys_addr_t table_base;
-+	struct device *dev = cfg->parent;
-+	struct pcie_discovery_data *shared_data;
-+	size_t bdfs_size;
-+
-+	if (segment >= MAX_SEGMENTS)
-+		return -ENODEV;
-+
-+	table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
-+
-+	if (!request_mem_region(table_base, BDF_TABLE_SIZE,
-+				"PCIe valid BDFs")) {
-+		dev_err(dev, "PCIe BDF shared region request failed\n");
-+		return -ENOMEM;
-+	}
-+
-+	shared_data = devm_ioremap(dev,
-+				   table_base, BDF_TABLE_SIZE);
-+	if (!shared_data)
-+		return -ENOMEM;
-+
-+	/* Copy the valid BDFs structure to allocated normal memory. */
-+	bdfs_size = sizeof(struct pcie_discovery_data) +
-+		    sizeof(u32) * shared_data->nr_bdfs;
-+	pcie_discovery_data[segment] = devm_kmalloc(dev, bdfs_size, GFP_KERNEL);
-+	if (!pcie_discovery_data[segment])
-+		return -ENOMEM;
-+
-+	memcpy_fromio(pcie_discovery_data[segment], shared_data, bdfs_size);
-+
-+	rc_remapped_addr[segment] = devm_ioremap(dev,
-+						 shared_data->rc_base_addr,
-+						 PCI_CFG_SPACE_EXP_SIZE);
-+	if (!rc_remapped_addr[segment]) {
-+		dev_err(dev, "Cannot remap root port base\n");
-+		return -ENOMEM;
-+	}
-+
-+	devm_iounmap(dev, shared_data);
-+
-+	return 0;
-+}
-+
-+/* Called for ACPI segment 0, and for all segments when using DT. */
-+static int pci_n1sdp_pcie_init(struct pci_config_window *cfg)
-+{
-+	struct platform_device *pdev = to_platform_device(cfg->parent);
-+	int segment = 0;
-+
-+	if (pdev->dev.of_node)
-+		segment = of_get_pci_domain_nr(pdev->dev.of_node);
-+	if (segment < 0 || segment > MAX_SEGMENTS) {
-+		dev_err(&pdev->dev, "N1SDP PCI controllers require linux,pci-domain property\n");
-+		dev_err(&pdev->dev, "Or invalid segment number, must be smaller than %d\n",
-+			MAX_SEGMENTS);
-+		return -EINVAL;
-+	}
-+
-+	return pci_n1sdp_init(cfg, segment);
-+}
-+
-+/* Called for ACPI segment 1. */
-+static int pci_n1sdp_ccix_init(struct pci_config_window *cfg)
-+{
-+	return pci_n1sdp_init(cfg, 1);
-+}
-+
-+const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops = {
-+	.bus_shift	= 20,
-+	.init		= pci_n1sdp_pcie_init,
-+	.pci_ops	= {
-+		.map_bus        = pci_n1sdp_map_bus,
-+		.read           = pci_generic_config_read32,
-+		.write          = pci_generic_config_write32,
-+	}
-+};
-+
-+const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops = {
-+	.bus_shift	= 20,
-+	.init		= pci_n1sdp_ccix_init,
-+	.pci_ops	= {
-+		.map_bus        = pci_n1sdp_map_bus,
-+		.read           = pci_generic_config_read32,
-+		.write          = pci_generic_config_write32,
-+	}
-+};
-+
-+static const struct of_device_id n1sdp_pcie_of_match[] = {
-+	{ .compatible = "arm,n1sdp-pcie", .data = &pci_n1sdp_pcie_ecam_ops },
-+	{ },
-+};
-+MODULE_DEVICE_TABLE(of, n1sdp_pcie_of_match);
-+
-+static struct platform_driver n1sdp_pcie_driver = {
-+	.driver = {
-+		.name = KBUILD_MODNAME,
-+		.of_match_table = n1sdp_pcie_of_match,
-+		.suppress_bind_attrs = true,
-+	},
-+	.probe = pci_host_common_probe,
-+};
-+builtin_platform_driver(n1sdp_pcie_driver);
-diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
-index 6b1301e2498e..b3cf3adeab28 100644
---- a/include/linux/pci-ecam.h
-+++ b/include/linux/pci-ecam.h
-@@ -88,6 +88,8 @@ extern const struct pci_ecam_ops xgene_v2_pcie_ecam_ops; /* APM X-Gene PCIe v2.x
- extern const struct pci_ecam_ops al_pcie_ops;	/* Amazon Annapurna Labs PCIe */
- extern const struct pci_ecam_ops tegra194_pcie_ops; /* Tegra194 PCIe */
- extern const struct pci_ecam_ops loongson_pci_ecam_ops; /* Loongson PCIe */
-+extern const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops; /* Arm N1SDP PCIe */
-+extern const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops; /* Arm N1SDP PCIe */
- #endif
- 
- #if IS_ENABLED(CONFIG_PCI_HOST_COMMON)
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
deleted file mode 100644
index b804658..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From b59e0d6c6035db80fc9044df0333f96ede53ad7a Mon Sep 17 00:00:00 2001
-From: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
-Date: Wed, 9 Feb 2022 20:37:43 +0530
-Subject: [PATCH] n1sdp: pcie: add quirk support enabling remote chip PCIe
-
-Base address mapping for remote chip Root PCIe ECAM space.
-
-When two N1SDP boards are coupled via the CCIX connection, the PCI host
-complex of the remote board appears as PCIe segment 2 on the primary board.
-The resources of the secondary board, including the host complex, are
-mapped at offset 0x40000000000 into the address space of the primary
-board, so take that into account when accessing the remote PCIe segment.
-
-Change-Id: I0e8d1eb119aef6444b9df854a39b24441c12195a
-Signed-off-by: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
-Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Signed-off-by: sahil <sahil@arm.com>
-
-Upstream-Status: Inappropriate [will not be submitted as its an hack required to fix the hardware issue]
-Signed-off-by: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
----
- drivers/acpi/pci_mcfg.c             |  1 +
- drivers/pci/controller/pcie-n1sdp.c | 32 +++++++++++++++++++++++++----
- include/linux/pci-ecam.h            |  1 +
- 3 files changed, 30 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
-index 2d4c1c699ffe..27f1e9a45c17 100644
---- a/drivers/acpi/pci_mcfg.c
-+++ b/drivers/acpi/pci_mcfg.c
-@@ -178,6 +178,7 @@ static struct mcfg_fixup mcfg_quirks[] = {
- 	/* N1SDP SoC with v1 PCIe controller */
- 	N1SDP_ECAM_MCFG(0x20181101, 0, &pci_n1sdp_pcie_ecam_ops),
- 	N1SDP_ECAM_MCFG(0x20181101, 1, &pci_n1sdp_ccix_ecam_ops),
-+	N1SDP_ECAM_MCFG(0x20181101, 2, &pci_n1sdp_remote_pcie_ecam_ops),
- #endif /* ARM64 */
- 
- #ifdef CONFIG_LOONGARCH
-diff --git a/drivers/pci/controller/pcie-n1sdp.c b/drivers/pci/controller/pcie-n1sdp.c
-index 408699b9dcb1..b3b02417fd7d 100644
---- a/drivers/pci/controller/pcie-n1sdp.c
-+++ b/drivers/pci/controller/pcie-n1sdp.c
-@@ -30,8 +30,10 @@
- 
- /* Platform specific values as hardcoded in the firmware. */
- #define AP_NS_SHARED_MEM_BASE	0x06000000
--#define MAX_SEGMENTS		2		/* Two PCIe root complexes. */
-+/* Two PCIe root complexes in One Chip + One PCIe RC in Remote Chip */
-+#define MAX_SEGMENTS		3
- #define BDF_TABLE_SIZE		SZ_16K
-+#define REMOTE_CHIP_ADDR_OFFSET	0x40000000000
- 
- /*
-  * Shared memory layout as written by the SCP upon boot time:
-@@ -97,12 +99,17 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
- 	phys_addr_t table_base;
- 	struct device *dev = cfg->parent;
- 	struct pcie_discovery_data *shared_data;
--	size_t bdfs_size;
-+	size_t bdfs_size, rc_base_addr = 0;
- 
- 	if (segment >= MAX_SEGMENTS)
- 		return -ENODEV;
- 
--	table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
-+	if (segment > 1) {
-+		rc_base_addr = REMOTE_CHIP_ADDR_OFFSET;
-+		table_base = AP_NS_SHARED_MEM_BASE + REMOTE_CHIP_ADDR_OFFSET;
-+	} else {
-+		table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
-+	}
- 
- 	if (!request_mem_region(table_base, BDF_TABLE_SIZE,
- 				"PCIe valid BDFs")) {
-@@ -114,6 +121,7 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
- 				   table_base, BDF_TABLE_SIZE);
- 	if (!shared_data)
- 		return -ENOMEM;
-+	rc_base_addr += shared_data->rc_base_addr;
- 
- 	/* Copy the valid BDFs structure to allocated normal memory. */
- 	bdfs_size = sizeof(struct pcie_discovery_data) +
-@@ -125,7 +133,7 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
- 	memcpy_fromio(pcie_discovery_data[segment], shared_data, bdfs_size);
- 
- 	rc_remapped_addr[segment] = devm_ioremap(dev,
--						 shared_data->rc_base_addr,
-+						 rc_base_addr,
- 						 PCI_CFG_SPACE_EXP_SIZE);
- 	if (!rc_remapped_addr[segment]) {
- 		dev_err(dev, "Cannot remap root port base\n");
-@@ -161,6 +169,12 @@ static int pci_n1sdp_ccix_init(struct pci_config_window *cfg)
- 	return pci_n1sdp_init(cfg, 1);
- }
- 
-+/* Called for ACPI segment 2. */
-+static int pci_n1sdp_remote_pcie_init(struct pci_config_window *cfg)
-+{
-+	return pci_n1sdp_init(cfg, 2);
-+}
-+
- const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops = {
- 	.bus_shift	= 20,
- 	.init		= pci_n1sdp_pcie_init,
-@@ -181,6 +195,16 @@ const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops = {
- 	}
- };
- 
-+const struct pci_ecam_ops pci_n1sdp_remote_pcie_ecam_ops = {
-+	.bus_shift	= 20,
-+	.init		= pci_n1sdp_remote_pcie_init,
-+	.pci_ops	= {
-+		.map_bus        = pci_n1sdp_map_bus,
-+		.read           = pci_generic_config_read32,
-+		.write          = pci_generic_config_write32,
-+	}
-+};
-+
- static const struct of_device_id n1sdp_pcie_of_match[] = {
- 	{ .compatible = "arm,n1sdp-pcie", .data = &pci_n1sdp_pcie_ecam_ops },
- 	{ },
-diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
-index b3cf3adeab28..d4316795c00d 100644
---- a/include/linux/pci-ecam.h
-+++ b/include/linux/pci-ecam.h
-@@ -90,6 +90,7 @@ extern const struct pci_ecam_ops tegra194_pcie_ops; /* Tegra194 PCIe */
- extern const struct pci_ecam_ops loongson_pci_ecam_ops; /* Loongson PCIe */
- extern const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops; /* Arm N1SDP PCIe */
- extern const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops; /* Arm N1SDP PCIe */
-+extern const struct pci_ecam_ops pci_n1sdp_remote_pcie_ecam_ops; /* Arm N1SDP PCIe */
- #endif
- 
- #if IS_ENABLED(CONFIG_PCI_HOST_COMMON)
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
deleted file mode 100644
index cc9d871..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From ff02f77788f8c01e9d675912c063e89415804b7d Mon Sep 17 00:00:00 2001
-From: Andre Przywara <andre.przywara@arm.com>
-Date: Fri, 17 May 2019 17:39:27 +0100
-Subject: [PATCH] arm64: kpti: Whitelist early Arm Neoverse N1 revisions
-
-Early revisions (r1p0) of the Neoverse N1 core did not feature the
-CSV3 field in ID_AA64PFR0_EL1 to advertise they are not affected by
-the Spectre variant 3 (aka Meltdown) vulnerability.
-
-Add this particular revision to the whitelist to avoid enabling KPTI.
-
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Change-Id: I78df055a3e674aefd195d41cc6dc4ee08b0af099
-Upstream-Status: Inappropriate
-Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
----
- arch/arm64/kernel/cpufeature.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
-index b3f37e2209ad..b74210f38cd8 100644
---- a/arch/arm64/kernel/cpufeature.c
-+++ b/arch/arm64/kernel/cpufeature.c
-@@ -1646,6 +1646,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
- 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_2XX_SILVER),
- 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_3XX_SILVER),
- 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_SILVER),
-+		MIDR_REV(MIDR_NEOVERSE_N1, 1, 0),	/* missing CSV3 */
- 		{ /* sentinel */ }
- 	};
- 	char const *str = "kpti command line option";
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
deleted file mode 100644
index 8aea1f6..0000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 330a620b5c73505e62a2e0accc155fbc78859cee Mon Sep 17 00:00:00 2001
-From: Vishnu Banavath <vishnu.banavath@arm.com>
-Date: Wed, 21 Sep 2022 15:54:14 +0100
-Subject: [PATCH] arm64: defconfig: disable config options that does not apply
- anymore
-
-Following config options should be not set to be more accurate and
-works with build system like yocto
-CONFIG_BT_HCIUART_MRVL
-CONFIG_BT_MRVL
-CONFIG_BT_MRVL_SDIO
-CONFIG_BT_QCOMSMD
-
-Upstream-Status: Pending [not submitted upstream yet]
-Signed-off-by: Adam Johnston <adam.johnston@arm.com>
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
----
- arch/arm64/configs/defconfig | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
-index 973aa3b4d407..61f040394a2d 100644
---- a/arch/arm64/configs/defconfig
-+++ b/arch/arm64/configs/defconfig
-@@ -198,10 +198,10 @@ CONFIG_BT_HCIUART=m
- CONFIG_BT_HCIUART_LL=y
- CONFIG_BT_HCIUART_BCM=y
- CONFIG_BT_HCIUART_QCA=y
--CONFIG_BT_HCIUART_MRVL=y
--CONFIG_BT_MRVL=m
--CONFIG_BT_MRVL_SDIO=m
--CONFIG_BT_QCOMSMD=m
-+# CONFIG_BT_HCIUART_MRVL is not set
-+# CONFIG_BT_MRVL is not set
-+# CONFIG_BT_MRVL_SDIO is not set
-+# CONFIG_BT_QCOMSMD is not set
- CONFIG_CFG80211=m
- CONFIG_MAC80211=m
- CONFIG_MAC80211_LEDS=y
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
new file mode 100644
index 0000000..869ca6f
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
@@ -0,0 +1,47 @@
+From ec84afa8e74bc5df8b5794eef8f29b097adc7cb3 Mon Sep 17 00:00:00 2001
+From: Manoj Kumar <manoj.kumar3@arm.com>
+Date: Mon, 1 Feb 2021 21:36:43 +0530
+Subject: [PATCH] iommu/arm-smmu-v3: workaround for ATC_INV_SIZE_ALL in N1SDP
+
+ATC_INV_SIZE_ALL request should automatically translate to ATS
+address which is not happening in SMMUv3 version gone into
+N1SDP platform. This workaround manually sets the ATS address
+field to proper value for ATC_INV_SIZE_ALL command.
+
+Change-Id: If89465be94720a62be85e1e6612f17e93fa9b8a5
+Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
+Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
+
+Upstream-Status: Inappropriate [Workaround]
+Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+---
+ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 1 +
+ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+index 3fd83fb75722..852ed05b14a3 100644
+--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
++++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+@@ -1747,6 +1747,7 @@ arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
+ 	};
+ 
+ 	if (!size) {
++		cmd->atc.addr = ATC_INV_ADDR_ALL;
+ 		cmd->atc.size = ATC_INV_SIZE_ALL;
+ 		return;
+ 	}
+diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
+index b574c58a3487..018086b65381 100644
+--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
++++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
+@@ -472,6 +472,7 @@ struct arm_smmu_cmdq_ent {
+ 
+ 		#define CMDQ_OP_ATC_INV		0x40
+ 		#define ATC_INV_SIZE_ALL	52
++		#define ATC_INV_ADDR_ALL        0x7FFFFFFFFFFFF000UL
+ 		struct {
+ 			u32			sid;
+ 			u32			ssid;
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
new file mode 100644
index 0000000..9bf8112
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
@@ -0,0 +1,159 @@
+From 9761e48b2d6904a58996fcaadcf25684482a72c8 Mon Sep 17 00:00:00 2001
+From: Manoj Kumar <manoj.kumar3@arm.com>
+Date: Tue, 31 Aug 2021 16:15:38 +0000
+Subject: [PATCH] n1sdp: pci_quirk: add acs override for PCI devices
+
+Patch taken from:
+https://gitlab.com/Queuecumber/linux-acs-override/raw/master/workspaces/5.4/acso.patch
+
+Change-Id: Ib926bf50524ce9990fbaa2f2f8670fe84bd571f9
+Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
+
+Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
+Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+---
+ .../admin-guide/kernel-parameters.txt         |   8 ++
+ drivers/pci/quirks.c                          | 102 ++++++++++++++++++
+ 2 files changed, 110 insertions(+)
+
+diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
+index 9e5bab29685f..7ee740a37e5d 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -4235,6 +4235,14 @@
+ 		nomsi		[MSI] If the PCI_MSI kernel config parameter is
+ 				enabled, this kernel boot option can be used to
+ 				disable the use of MSI interrupts system-wide.
++		pcie_acs_override [PCIE] Override missing PCIe ACS support for
++				downstream
++				All downstream ports - full ACS capabilities
++				multfunction
++				All multifunction devices - multifunction ACS subset
++				id:nnnn:nnnn
++				Specfic device - full ACS capabilities
++				Specified as vid:did (vendor/device ID) in hex
+ 		noioapicquirk	[APIC] Disable all boot interrupt quirks.
+ 				Safety option to keep boot IRQs enabled. This
+ 				should never be necessary.
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+index b7c65193e786..16b81d1ccafa 100644
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -3625,6 +3625,107 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
+ 	dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
+ }
+ 
++static bool acs_on_downstream;
++static bool acs_on_multifunction;
++
++#define NUM_ACS_IDS 16
++struct acs_on_id {
++	unsigned short vendor;
++	unsigned short device;
++};
++static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
++static u8 max_acs_id;
++
++static __init int pcie_acs_override_setup(char *p)
++{
++	if (!p)
++		return -EINVAL;
++
++	while (*p) {
++		if (!strncmp(p, "downstream", 10))
++			acs_on_downstream = true;
++		if (!strncmp(p, "multifunction", 13))
++			acs_on_multifunction = true;
++		if (!strncmp(p, "id:", 3)) {
++			char opt[5];
++			int ret;
++			long val;
++
++			if (max_acs_id >= NUM_ACS_IDS - 1) {
++				pr_warn("Out of PCIe ACS override slots (%d)\n",
++						NUM_ACS_IDS);
++				goto next;
++			}
++
++			p += 3;
++			snprintf(opt, 5, "%s", p);
++			ret = kstrtol(opt, 16, &val);
++			if (ret) {
++				pr_warn("PCIe ACS ID parse error %d\n", ret);
++				goto next;
++			}
++			acs_on_ids[max_acs_id].vendor = val;
++
++			p += strcspn(p, ":");
++			if (*p != ':') {
++				pr_warn("PCIe ACS invalid ID\n");
++				goto next;
++			}
++
++			p++;
++			snprintf(opt, 5, "%s", p);
++			ret = kstrtol(opt, 16, &val);
++			if (ret) {
++				pr_warn("PCIe ACS ID parse error %d\n", ret);
++				goto next;
++			}
++			acs_on_ids[max_acs_id].device = val;
++			max_acs_id++;
++		}
++next:
++		p += strcspn(p, ",");
++		if (*p == ',')
++			p++;
++	}
++
++	if (acs_on_downstream || acs_on_multifunction || max_acs_id)
++		pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
++
++	return 0;
++}
++early_param("pcie_acs_override", pcie_acs_override_setup);
++
++static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
++{
++	int i;
++
++	/* Never override ACS for legacy devices or devices with ACS caps */
++	if (!pci_is_pcie(dev) ||
++		pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
++			return -ENOTTY;
++
++	for (i = 0; i < max_acs_id; i++)
++		if (acs_on_ids[i].vendor == dev->vendor &&
++			acs_on_ids[i].device == dev->device)
++				return 1;
++
++	switch (pci_pcie_type(dev)) {
++	case PCI_EXP_TYPE_DOWNSTREAM:
++	case PCI_EXP_TYPE_ROOT_PORT:
++		if (acs_on_downstream)
++			return 1;
++		break;
++	case PCI_EXP_TYPE_ENDPOINT:
++	case PCI_EXP_TYPE_UPSTREAM:
++	case PCI_EXP_TYPE_LEG_END:
++	case PCI_EXP_TYPE_RC_END:
++		if (acs_on_multifunction && dev->multifunction)
++			return 1;
++	}
++
++	return -ENOTTY;
++}
++
+ /*
+  * Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
+  * prevented for those affected devices.
+@@ -5017,6 +5118,7 @@ static const struct pci_dev_acs_enabled {
+ 	{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
+ 	/* Wangxun nics */
+ 	{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
++	{ PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
+ 	{ 0 }
+ };
+ 
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
new file mode 100644
index 0000000..96d55ad
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
@@ -0,0 +1,324 @@
+From 268bfbcd8f16660bf5fc8e31b18b4090743c6dbe Mon Sep 17 00:00:00 2001
+From: Deepak Pandey <Deepak.Pandey@arm.com>
+Date: Fri, 31 May 2019 16:42:43 +0100
+Subject: [PATCH] pcie: Add quirk for the Arm Neoverse N1SDP platform
+
+The Arm N1SDP SoC suffers from some PCIe integration issues, most
+prominently config space accesses to not existing BDFs being answered
+with a bus abort, resulting in an SError.
+To mitigate this, the firmware scans the bus before boot (catching the
+SErrors) and creates a table with valid BDFs, which acts as a filter for
+Linux' config space accesses.
+
+Add code consulting the table as an ACPI PCIe quirk, also register the
+corresponding device tree based description of the host controller.
+Also fix the other two minor issues on the way, namely not being fully
+ECAM compliant and config space accesses being restricted to 32-bit
+accesses only.
+
+This allows the Arm Neoverse N1SDP board to boot Linux without crashing
+and to access *any* devices (there are no platform devices except UART).
+
+Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
+[Sudipto: extend to cover the CCIX root port as well]
+Signed-off-by: Sudipto Paul <sudipto.paul@arm.com>
+[Andre: fix coding style issues, rewrite some parts, add DT support]
+Signed-off-by: Andre Przywara <andre.przywara@arm.com>
+
+Change-Id: I1d3a4b9bf6b3b883d262e3c4ff1f88a0eb81c1fe
+Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
+Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+---
+ arch/arm64/configs/defconfig        |   1 +
+ drivers/acpi/pci_mcfg.c             |   7 +
+ drivers/pci/controller/Kconfig      |  11 ++
+ drivers/pci/controller/Makefile     |   2 +-
+ drivers/pci/controller/pcie-n1sdp.c | 198 ++++++++++++++++++++++++++++
+ include/linux/pci-ecam.h            |   2 +
+ 6 files changed, 220 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/pci/controller/pcie-n1sdp.c
+
+diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
+index a24609e14d50..cd73d1704dd2 100644
+--- a/arch/arm64/configs/defconfig
++++ b/arch/arm64/configs/defconfig
+@@ -203,6 +203,7 @@ CONFIG_NFC_S3FWRN5_I2C=m
+ CONFIG_PCI=y
+ CONFIG_PCIEPORTBUS=y
+ CONFIG_PCIEAER=y
++CONFIG_PCI_QUIRKS=y
+ CONFIG_PCI_IOV=y
+ CONFIG_PCI_PASID=y
+ CONFIG_HOTPLUG_PCI=y
+diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
+index 860014b89b8e..2d4c1c699ffe 100644
+--- a/drivers/acpi/pci_mcfg.c
++++ b/drivers/acpi/pci_mcfg.c
+@@ -171,6 +171,13 @@ static struct mcfg_fixup mcfg_quirks[] = {
+ 	ALTRA_ECAM_QUIRK(1, 13),
+ 	ALTRA_ECAM_QUIRK(1, 14),
+ 	ALTRA_ECAM_QUIRK(1, 15),
++
++#define N1SDP_ECAM_MCFG(rev, seg, ops) \
++	{"ARMLTD", "ARMN1SDP", rev, seg, MCFG_BUS_ANY, ops }
++
++	/* N1SDP SoC with v1 PCIe controller */
++	N1SDP_ECAM_MCFG(0x20181101, 0, &pci_n1sdp_pcie_ecam_ops),
++	N1SDP_ECAM_MCFG(0x20181101, 1, &pci_n1sdp_ccix_ecam_ops),
+ #endif /* ARM64 */
+ 
+ #ifdef CONFIG_LOONGARCH
+diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
+index 8d49bad7f847..7bb49afbcd5b 100644
+--- a/drivers/pci/controller/Kconfig
++++ b/drivers/pci/controller/Kconfig
+@@ -21,6 +21,17 @@ config PCIE_ALTERA
+ 	  Say Y here if you want to enable PCIe controller support on Altera
+ 	  FPGA.
+ 
++config PCIE_HOST_N1SDP_ECAM
++	bool "ARM N1SDP PCIe Controller"
++	depends on ARM64
++	depends on OF || (ACPI && PCI_QUIRKS)
++	select PCI_HOST_COMMON
++	default y if ARCH_VEXPRESS
++	help
++	  Say Y here if you want PCIe support for the Arm N1SDP platform.
++	  The controller is ECAM compliant, but needs a quirk to workaround
++	  an integration issue.
++
+ config PCIE_ALTERA_MSI
+ 	tristate "Altera PCIe MSI feature"
+ 	depends on PCIE_ALTERA
+diff --git a/drivers/pci/controller/Makefile b/drivers/pci/controller/Makefile
+index 37c8663de7fe..08e5afcf6e86 100644
+--- a/drivers/pci/controller/Makefile
++++ b/drivers/pci/controller/Makefile
+@@ -39,7 +39,7 @@ obj-$(CONFIG_PCI_LOONGSON) += pci-loongson.o
+ obj-$(CONFIG_PCIE_HISI_ERR) += pcie-hisi-error.o
+ obj-$(CONFIG_PCIE_APPLE) += pcie-apple.o
+ obj-$(CONFIG_PCIE_MT7621) += pcie-mt7621.o
+-
++obj-$(CONFIG_PCIE_HOST_N1SDP_ECAM) += pcie-n1sdp.o
+ # pcie-hisi.o quirks are needed even without CONFIG_PCIE_DW
+ obj-y				+= dwc/
+ obj-y				+= mobiveil/
+diff --git a/drivers/pci/controller/pcie-n1sdp.c b/drivers/pci/controller/pcie-n1sdp.c
+new file mode 100644
+index 000000000000..408699b9dcb1
+--- /dev/null
++++ b/drivers/pci/controller/pcie-n1sdp.c
+@@ -0,0 +1,198 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Copyright (C) 2018/2019 ARM Ltd.
++ *
++ * This quirk is to mask the following issues:
++ * - PCIE SLVERR: config space accesses to invalid PCIe BDFs cause a bus
++ *		  error (signalled as an asynchronous SError)
++ * - MCFG BDF mapping: the root complex is mapped separately from the device
++ *		       config space
++ * - Non 32-bit accesses to config space are not supported.
++ *
++ * At boot time the SCP board firmware creates a discovery table with
++ * the root complex' base address and the valid BDF values, discovered while
++ * scanning the config space and catching the SErrors.
++ * Linux responds only to the EPs listed in this table, returning NULL
++ * for the rest.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/sizes.h>
++#include <linux/of_pci.h>
++#include <linux/of.h>
++#include <linux/pci-ecam.h>
++#include <linux/platform_device.h>
++#include <linux/module.h>
++
++#include "../pci.h"
++
++/* Platform specific values as hardcoded in the firmware. */
++#define AP_NS_SHARED_MEM_BASE	0x06000000
++#define MAX_SEGMENTS		2		/* Two PCIe root complexes. */
++#define BDF_TABLE_SIZE		SZ_16K
++
++/*
++ * Shared memory layout as written by the SCP upon boot time:
++ *  ----
++ *  Discover data header --> RC base address
++ *                       \-> BDF Count
++ *  Discover data        --> BDF 0...n
++ *  ----
++ */
++struct pcie_discovery_data {
++	u32 rc_base_addr;
++	u32 nr_bdfs;
++	u32 valid_bdfs[0];
++} *pcie_discovery_data[MAX_SEGMENTS];
++
++void __iomem *rc_remapped_addr[MAX_SEGMENTS];
++
++/*
++ * map_bus() is called before we do a config space access for a certain
++ * device. We use this to check whether this device is valid, avoiding
++ * config space accesses which would result in an SError otherwise.
++ */
++static void __iomem *pci_n1sdp_map_bus(struct pci_bus *bus, unsigned int devfn,
++				       int where)
++{
++	struct pci_config_window *cfg = bus->sysdata;
++	unsigned int devfn_shift = cfg->ops->bus_shift - 8;
++	unsigned int busn = bus->number;
++	unsigned int segment = bus->domain_nr;
++	unsigned int bdf_addr;
++	unsigned int table_count, i;
++	struct pci_dev *dev;
++
++	if (segment >= MAX_SEGMENTS ||
++	    busn < cfg->busr.start || busn > cfg->busr.end)
++		return NULL;
++
++	/* The PCIe root complex has a separate config space mapping. */
++	if (busn == 0 && devfn == 0)
++		return rc_remapped_addr[segment] + where;
++
++	dev = pci_get_domain_bus_and_slot(segment, busn, devfn);
++	if (dev && dev->is_virtfn)
++		return pci_ecam_map_bus(bus, devfn, where);
++
++	/* Accesses beyond the vendor ID always go to existing devices. */
++	if (where > 0)
++		return pci_ecam_map_bus(bus, devfn, where);
++
++	busn -= cfg->busr.start;
++	bdf_addr = (busn << cfg->ops->bus_shift) + (devfn << devfn_shift);
++	table_count = pcie_discovery_data[segment]->nr_bdfs;
++	for (i = 0; i < table_count; i++) {
++		if (bdf_addr == pcie_discovery_data[segment]->valid_bdfs[i])
++			return pci_ecam_map_bus(bus, devfn, where);
++	}
++
++	return NULL;
++}
++
++static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
++{
++	phys_addr_t table_base;
++	struct device *dev = cfg->parent;
++	struct pcie_discovery_data *shared_data;
++	size_t bdfs_size;
++
++	if (segment >= MAX_SEGMENTS)
++		return -ENODEV;
++
++	table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
++
++	if (!request_mem_region(table_base, BDF_TABLE_SIZE,
++				"PCIe valid BDFs")) {
++		dev_err(dev, "PCIe BDF shared region request failed\n");
++		return -ENOMEM;
++	}
++
++	shared_data = devm_ioremap(dev,
++				   table_base, BDF_TABLE_SIZE);
++	if (!shared_data)
++		return -ENOMEM;
++
++	/* Copy the valid BDFs structure to allocated normal memory. */
++	bdfs_size = sizeof(struct pcie_discovery_data) +
++		    sizeof(u32) * shared_data->nr_bdfs;
++	pcie_discovery_data[segment] = devm_kmalloc(dev, bdfs_size, GFP_KERNEL);
++	if (!pcie_discovery_data[segment])
++		return -ENOMEM;
++
++	memcpy_fromio(pcie_discovery_data[segment], shared_data, bdfs_size);
++
++	rc_remapped_addr[segment] = devm_ioremap(dev,
++						 shared_data->rc_base_addr,
++						 PCI_CFG_SPACE_EXP_SIZE);
++	if (!rc_remapped_addr[segment]) {
++		dev_err(dev, "Cannot remap root port base\n");
++		return -ENOMEM;
++	}
++
++	devm_iounmap(dev, shared_data);
++
++	return 0;
++}
++
++/* Called for ACPI segment 0, and for all segments when using DT. */
++static int pci_n1sdp_pcie_init(struct pci_config_window *cfg)
++{
++	struct platform_device *pdev = to_platform_device(cfg->parent);
++	int segment = 0;
++
++	if (pdev->dev.of_node)
++		segment = of_get_pci_domain_nr(pdev->dev.of_node);
++	if (segment < 0 || segment > MAX_SEGMENTS) {
++		dev_err(&pdev->dev, "N1SDP PCI controllers require linux,pci-domain property\n");
++		dev_err(&pdev->dev, "Or invalid segment number, must be smaller than %d\n",
++			MAX_SEGMENTS);
++		return -EINVAL;
++	}
++
++	return pci_n1sdp_init(cfg, segment);
++}
++
++/* Called for ACPI segment 1. */
++static int pci_n1sdp_ccix_init(struct pci_config_window *cfg)
++{
++	return pci_n1sdp_init(cfg, 1);
++}
++
++const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops = {
++	.bus_shift	= 20,
++	.init		= pci_n1sdp_pcie_init,
++	.pci_ops	= {
++		.map_bus        = pci_n1sdp_map_bus,
++		.read           = pci_generic_config_read32,
++		.write          = pci_generic_config_write32,
++	}
++};
++
++const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops = {
++	.bus_shift	= 20,
++	.init		= pci_n1sdp_ccix_init,
++	.pci_ops	= {
++		.map_bus        = pci_n1sdp_map_bus,
++		.read           = pci_generic_config_read32,
++		.write          = pci_generic_config_write32,
++	}
++};
++
++static const struct of_device_id n1sdp_pcie_of_match[] = {
++	{ .compatible = "arm,n1sdp-pcie", .data = &pci_n1sdp_pcie_ecam_ops },
++	{ },
++};
++MODULE_DEVICE_TABLE(of, n1sdp_pcie_of_match);
++
++static struct platform_driver n1sdp_pcie_driver = {
++	.driver = {
++		.name = KBUILD_MODNAME,
++		.of_match_table = n1sdp_pcie_of_match,
++		.suppress_bind_attrs = true,
++	},
++	.probe = pci_host_common_probe,
++};
++builtin_platform_driver(n1sdp_pcie_driver);
+diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
+index 6b1301e2498e..b3cf3adeab28 100644
+--- a/include/linux/pci-ecam.h
++++ b/include/linux/pci-ecam.h
+@@ -88,6 +88,8 @@ extern const struct pci_ecam_ops xgene_v2_pcie_ecam_ops; /* APM X-Gene PCIe v2.x
+ extern const struct pci_ecam_ops al_pcie_ops;	/* Amazon Annapurna Labs PCIe */
+ extern const struct pci_ecam_ops tegra194_pcie_ops; /* Tegra194 PCIe */
+ extern const struct pci_ecam_ops loongson_pci_ecam_ops; /* Loongson PCIe */
++extern const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops; /* Arm N1SDP PCIe */
++extern const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops; /* Arm N1SDP PCIe */
+ #endif
+ 
+ #if IS_ENABLED(CONFIG_PCI_HOST_COMMON)
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
new file mode 100644
index 0000000..ce28499
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
@@ -0,0 +1,136 @@
+From 553801193c173711e9f7f6c56a44b5fac2385c1e Mon Sep 17 00:00:00 2001
+From: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
+Date: Wed, 9 Feb 2022 20:37:43 +0530
+Subject: [PATCH] n1sdp: pcie: add quirk support enabling remote chip PCIe
+
+Base address mapping for remote chip Root PCIe ECAM space.
+
+When two N1SDP boards are coupled via the CCIX connection, the PCI host
+complex of the remote board appears as PCIe segment 2 on the primary board.
+The resources of the secondary board, including the host complex, are
+mapped at offset 0x40000000000 into the address space of the primary
+board, so take that into account when accessing the remote PCIe segment.
+
+Change-Id: I0e8d1eb119aef6444b9df854a39b24441c12195a
+Signed-off-by: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
+Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
+Signed-off-by: Andre Przywara <andre.przywara@arm.com>
+Signed-off-by: sahil <sahil@arm.com>
+
+Upstream-Status: Inappropriate [will not be submitted as its an hack required to fix the hardware issue]
+Signed-off-by: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+---
+ drivers/acpi/pci_mcfg.c             |  1 +
+ drivers/pci/controller/pcie-n1sdp.c | 32 +++++++++++++++++++++++++----
+ include/linux/pci-ecam.h            |  1 +
+ 3 files changed, 30 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
+index 2d4c1c699ffe..27f1e9a45c17 100644
+--- a/drivers/acpi/pci_mcfg.c
++++ b/drivers/acpi/pci_mcfg.c
+@@ -178,6 +178,7 @@ static struct mcfg_fixup mcfg_quirks[] = {
+ 	/* N1SDP SoC with v1 PCIe controller */
+ 	N1SDP_ECAM_MCFG(0x20181101, 0, &pci_n1sdp_pcie_ecam_ops),
+ 	N1SDP_ECAM_MCFG(0x20181101, 1, &pci_n1sdp_ccix_ecam_ops),
++	N1SDP_ECAM_MCFG(0x20181101, 2, &pci_n1sdp_remote_pcie_ecam_ops),
+ #endif /* ARM64 */
+ 
+ #ifdef CONFIG_LOONGARCH
+diff --git a/drivers/pci/controller/pcie-n1sdp.c b/drivers/pci/controller/pcie-n1sdp.c
+index 408699b9dcb1..b3b02417fd7d 100644
+--- a/drivers/pci/controller/pcie-n1sdp.c
++++ b/drivers/pci/controller/pcie-n1sdp.c
+@@ -30,8 +30,10 @@
+ 
+ /* Platform specific values as hardcoded in the firmware. */
+ #define AP_NS_SHARED_MEM_BASE	0x06000000
+-#define MAX_SEGMENTS		2		/* Two PCIe root complexes. */
++/* Two PCIe root complexes in One Chip + One PCIe RC in Remote Chip */
++#define MAX_SEGMENTS		3
+ #define BDF_TABLE_SIZE		SZ_16K
++#define REMOTE_CHIP_ADDR_OFFSET	0x40000000000
+ 
+ /*
+  * Shared memory layout as written by the SCP upon boot time:
+@@ -97,12 +99,17 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
+ 	phys_addr_t table_base;
+ 	struct device *dev = cfg->parent;
+ 	struct pcie_discovery_data *shared_data;
+-	size_t bdfs_size;
++	size_t bdfs_size, rc_base_addr = 0;
+ 
+ 	if (segment >= MAX_SEGMENTS)
+ 		return -ENODEV;
+ 
+-	table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
++	if (segment > 1) {
++		rc_base_addr = REMOTE_CHIP_ADDR_OFFSET;
++		table_base = AP_NS_SHARED_MEM_BASE + REMOTE_CHIP_ADDR_OFFSET;
++	} else {
++		table_base = AP_NS_SHARED_MEM_BASE + segment * BDF_TABLE_SIZE;
++	}
+ 
+ 	if (!request_mem_region(table_base, BDF_TABLE_SIZE,
+ 				"PCIe valid BDFs")) {
+@@ -114,6 +121,7 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
+ 				   table_base, BDF_TABLE_SIZE);
+ 	if (!shared_data)
+ 		return -ENOMEM;
++	rc_base_addr += shared_data->rc_base_addr;
+ 
+ 	/* Copy the valid BDFs structure to allocated normal memory. */
+ 	bdfs_size = sizeof(struct pcie_discovery_data) +
+@@ -125,7 +133,7 @@ static int pci_n1sdp_init(struct pci_config_window *cfg, unsigned int segment)
+ 	memcpy_fromio(pcie_discovery_data[segment], shared_data, bdfs_size);
+ 
+ 	rc_remapped_addr[segment] = devm_ioremap(dev,
+-						 shared_data->rc_base_addr,
++						 rc_base_addr,
+ 						 PCI_CFG_SPACE_EXP_SIZE);
+ 	if (!rc_remapped_addr[segment]) {
+ 		dev_err(dev, "Cannot remap root port base\n");
+@@ -161,6 +169,12 @@ static int pci_n1sdp_ccix_init(struct pci_config_window *cfg)
+ 	return pci_n1sdp_init(cfg, 1);
+ }
+ 
++/* Called for ACPI segment 2. */
++static int pci_n1sdp_remote_pcie_init(struct pci_config_window *cfg)
++{
++	return pci_n1sdp_init(cfg, 2);
++}
++
+ const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops = {
+ 	.bus_shift	= 20,
+ 	.init		= pci_n1sdp_pcie_init,
+@@ -181,6 +195,16 @@ const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops = {
+ 	}
+ };
+ 
++const struct pci_ecam_ops pci_n1sdp_remote_pcie_ecam_ops = {
++	.bus_shift	= 20,
++	.init		= pci_n1sdp_remote_pcie_init,
++	.pci_ops	= {
++		.map_bus        = pci_n1sdp_map_bus,
++		.read           = pci_generic_config_read32,
++		.write          = pci_generic_config_write32,
++	}
++};
++
+ static const struct of_device_id n1sdp_pcie_of_match[] = {
+ 	{ .compatible = "arm,n1sdp-pcie", .data = &pci_n1sdp_pcie_ecam_ops },
+ 	{ },
+diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
+index b3cf3adeab28..d4316795c00d 100644
+--- a/include/linux/pci-ecam.h
++++ b/include/linux/pci-ecam.h
+@@ -90,6 +90,7 @@ extern const struct pci_ecam_ops tegra194_pcie_ops; /* Tegra194 PCIe */
+ extern const struct pci_ecam_ops loongson_pci_ecam_ops; /* Loongson PCIe */
+ extern const struct pci_ecam_ops pci_n1sdp_pcie_ecam_ops; /* Arm N1SDP PCIe */
+ extern const struct pci_ecam_ops pci_n1sdp_ccix_ecam_ops; /* Arm N1SDP PCIe */
++extern const struct pci_ecam_ops pci_n1sdp_remote_pcie_ecam_ops; /* Arm N1SDP PCIe */
+ #endif
+ 
+ #if IS_ENABLED(CONFIG_PCI_HOST_COMMON)
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
new file mode 100644
index 0000000..e4f15bb
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
@@ -0,0 +1,33 @@
+From d2e55d92eefd99ede330270b00c01b734a6b61c0 Mon Sep 17 00:00:00 2001
+From: Andre Przywara <andre.przywara@arm.com>
+Date: Fri, 17 May 2019 17:39:27 +0100
+Subject: [PATCH] arm64: kpti: Whitelist early Arm Neoverse N1 revisions
+
+Early revisions (r1p0) of the Neoverse N1 core did not feature the
+CSV3 field in ID_AA64PFR0_EL1 to advertise they are not affected by
+the Spectre variant 3 (aka Meltdown) vulnerability.
+
+Add this particular revision to the whitelist to avoid enabling KPTI.
+
+Signed-off-by: Andre Przywara <andre.przywara@arm.com>
+Change-Id: I78df055a3e674aefd195d41cc6dc4ee08b0af099
+Upstream-Status: Inappropriate
+Signed-off-by: Andre Przywara <andre.przywara@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+---
+ arch/arm64/kernel/cpufeature.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
+index 7d7128c65161..77e109ddd981 100644
+--- a/arch/arm64/kernel/cpufeature.c
++++ b/arch/arm64/kernel/cpufeature.c
+@@ -1674,6 +1674,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
+ 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_2XX_SILVER),
+ 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_3XX_SILVER),
+ 		MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_SILVER),
++		MIDR_REV(MIDR_NEOVERSE_N1, 1, 0),	/* missing CSV3 */
+ 		{ /* sentinel */ }
+ 	};
+ 	char const *str = "kpti command line option";
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
new file mode 100644
index 0000000..dae3243
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
@@ -0,0 +1,50 @@
+From d59c5c17d3345f923d66fc85a7681fc6c4fd657d Mon Sep 17 00:00:00 2001
+From: Vishnu Banavath <vishnu.banavath@arm.com>
+Date: Wed, 21 Sep 2022 15:54:14 +0100
+Subject: [PATCH] arm64: defconfig: disable config options that does not apply
+ anymore
+
+Following config options should be not set to be more accurate and
+works with build system like yocto
+CONFIG_BT_HCIBTUSB
+CONFIG_BT_HCIBTUSB_MTK
+CONFIG_BT_HCIUART_MRVL
+CONFIG_BT_MRVL
+CONFIG_BT_MRVL_SDIO
+CONFIG_BT_QCOMSMD
+
+Upstream-Status: Pending [not submitted upstream yet]
+Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Xueliang Zhong <xueliang.zhong@arm.com>
+---
+ arch/arm64/configs/defconfig | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
+index cd73d1704dd2..958a43bd00e6 100644
+--- a/arch/arm64/configs/defconfig
++++ b/arch/arm64/configs/defconfig
+@@ -181,16 +181,16 @@ CONFIG_BT_HIDP=m
+ # CONFIG_BT_LE is not set
+ CONFIG_BT_LEDS=y
+ # CONFIG_BT_DEBUGFS is not set
+-CONFIG_BT_HCIBTUSB=m
+-CONFIG_BT_HCIBTUSB_MTK=y
++# CONFIG_BT_HCIBTUSB is not set
++# CONFIG_BT_HCIBTUSB_MTK is not set
+ CONFIG_BT_HCIUART=m
+ CONFIG_BT_HCIUART_LL=y
+ CONFIG_BT_HCIUART_BCM=y
+ CONFIG_BT_HCIUART_QCA=y
+-CONFIG_BT_HCIUART_MRVL=y
+-CONFIG_BT_MRVL=m
+-CONFIG_BT_MRVL_SDIO=m
+-CONFIG_BT_QCOMSMD=m
++# CONFIG_BT_HCIUART_MRVL is not set
++# CONFIG_BT_MRVL is not set
++# CONFIG_BT_MRVL_SDIO is not set
++# CONFIG_BT_QCOMSMD is not set
+ CONFIG_CFG80211=m
+ CONFIG_MAC80211=m
+ CONFIG_MAC80211_LEDS=y
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-nvme.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-nvme.cfg
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-nvme.cfg
rename to meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-nvme.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-realtek-R8169.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-realtek-R8169.cfg
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-realtek-R8169.cfg
rename to meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-realtek-R8169.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-usb_conn_gpio.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-usb_conn_gpio.cfg
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/enable-usb_conn_gpio.cfg
rename to meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-usb_conn_gpio.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/usb_xhci_pci_renesas.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/usb_xhci_pci_renesas.cfg
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.1/n1sdp/usb_xhci_pci_renesas.cfg
rename to meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/usb_xhci_pci_renesas.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-rt_%.bbappend b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-rt_%.bbappend
index 8994c24..b1efabf 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-rt_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-rt_%.bbappend
@@ -1,6 +1,5 @@
 # Only enable linux-yocto-rt for n1sdp and the Armv8-R AArch64 AEM FVP
 LINUX_YOCTO_RT_REQUIRE ?= ""
 LINUX_YOCTO_RT_REQUIRE:n1sdp = "linux-arm-platforms.inc"
-LINUX_YOCTO_RT_REQUIRE:fvp-baser-aemv8r64 = "linux-arm-platforms.inc"
 
 require ${LINUX_YOCTO_RT_REQUIRE}
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch
new file mode 100644
index 0000000..9c1d781
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch
@@ -0,0 +1,32 @@
+From d6ee50f581b43b16733b8731369b071d609d5048 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Thu, 31 Aug 2023 10:51:54 +0100
+Subject: [PATCH] Handle logging syscall
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status:  Inappropriate [Other]
+---
+ core/arch/arm/kernel/spmc_sp_handler.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/core/arch/arm/kernel/spmc_sp_handler.c b/core/arch/arm/kernel/spmc_sp_handler.c
+index 1f218a0df..0676e8898 100644
+--- a/core/arch/arm/kernel/spmc_sp_handler.c
++++ b/core/arch/arm/kernel/spmc_sp_handler.c
+@@ -1276,7 +1276,12 @@ void spmc_sp_msg_handler(struct thread_smc_args *args,
+ 			handle_console_log(args);
+ 			sp_enter(args, caller_sp);
+ 			break;
+-
++		case 0xdeadbeef:
++			ts_push_current_session(&caller_sp->ts_sess);
++			IMSG("%s", (char *)args->a1);
++			ts_pop_current_session();
++			sp_enter(args, caller_sp);
++			break;
+ 		default:
+ 			EMSG("Unhandled FFA function ID %#"PRIx32,
+ 			     (uint32_t)args->a0);
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
index db195ab..50283db 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
@@ -1,14 +1,15 @@
-Upstream-Status: Pending [Not submitted to upstream yet]
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-
-From 22ba7c7789082dbc179921962cdcadece4499c89 Mon Sep 17 00:00:00 2001
+From 33d86d23bcf2bbcb191e33e3130c3429650b9204 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Thu, 30 Jun 2022 18:36:26 +0100
 Subject: [PATCH] plat-n1sdp: add N1SDP platform support
 
+Upstream-Status: Pending [Not submitted to upstream yet]
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+
 These changes are to add N1SDP platform to optee-os
 
 Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Mariam Elshakfy <mariam.elshakfy@arm.com>
 
 diff --git a/core/arch/arm/plat-n1sdp/conf.mk b/core/arch/arm/plat-n1sdp/conf.mk
 new file mode 100644
@@ -59,10 +60,10 @@
 +$(call force,CFG_CORE_ARM64_PA_BITS,36)
 diff --git a/core/arch/arm/plat-n1sdp/main.c b/core/arch/arm/plat-n1sdp/main.c
 new file mode 100644
-index 00000000..cfb7f19b
+index 00000000..39360711
 --- /dev/null
 +++ b/core/arch/arm/plat-n1sdp/main.c
-@@ -0,0 +1,63 @@
+@@ -0,0 +1,53 @@
 +// SPDX-License-Identifier: BSD-2-Clause
 +/*
 + * Copyright (c) 2022, Arm Limited.
@@ -72,8 +73,6 @@
 +#include <console.h>
 +#include <drivers/gic.h>
 +#include <drivers/pl011.h>
-+#include <drivers/tpm2_mmio.h>
-+#include <drivers/tpm2_ptp_fifo.h>
 +#include <drivers/tzc400.h>
 +#include <initcall.h>
 +#include <keep.h>
@@ -92,7 +91,6 @@
 +#include <string.h>
 +#include <trace.h>
 +
-+static struct gic_data gic_data __nex_bss;
 +static struct pl011_data console_data __nex_bss;
 +
 +register_phys_mem_pgdir(MEM_AREA_IO_SEC, CONSOLE_UART_BASE, PL011_REG_SIZE);
@@ -105,19 +103,12 @@
 +
 +void main_init_gic(void)
 +{
-+	gic_init_base_addr(&gic_data, GICC_BASE,
-+			   GICD_BASE);
-+	itr_init(&gic_data.chip);
++	gic_init(GICC_BASE, GICD_BASE);
 +}
 +
 +void main_secondary_init_gic(void)
 +{
-+	gic_cpu_init(&gic_data);
-+}
-+
-+void itr_core_handler(void)
-+{
-+	gic_it_handle(&gic_data);
++	gic_cpu_init();
 +}
 +
 +void console_init(void)
@@ -230,4 +221,3 @@
 +srcs-y	+= n1sdp_core_pos.S
 -- 
 2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch
index ca4405d..9d305ad 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch
@@ -14,19 +14,19 @@
 index e0fa0aa6..c7a45387 100644
 --- a/core/arch/arm/kernel/spmc_sp_handler.c
 +++ b/core/arch/arm/kernel/spmc_sp_handler.c
-@@ -1132,6 +1132,12 @@ void spmc_sp_msg_handler(struct thread_smc_args *args,
- 			handle_mem_perm_set(args, caller_sp);
+@@ -1277,6 +1277,13 @@ void spmc_sp_msg_handler(struct thread_smc_args *args,
  			sp_enter(args, caller_sp);
  			break;
+ 
 +		case 0xdeadbeef:
 +			ts_push_current_session(&caller_sp->ts_sess);
 +			IMSG("%s", (char *)args->a1);
 +			ts_pop_current_session();
 +			sp_enter(args, caller_sp);
 +			break;
++
  		default:
  			EMSG("Unhandled FFA function ID %#"PRIx32,
  			     (uint32_t)args->a0);
 -- 
 2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant.service b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant.service
deleted file mode 100644
index 6b00df7..0000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=TEE Supplicant
-ConditionPathExistsGlob=/dev/teepriv[0-9]*
-
-[Service]
-User=root
-EnvironmentFile=-@sysconfdir@/default/tee-supplicant
-ExecStart=@sbindir@/tee-supplicant $OPTARGS
-
-[Install]
-WantedBy=basic.target
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant@.service b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant@.service
new file mode 100644
index 0000000..72c0b9a
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client/tee-supplicant@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=TEE Supplicant on %i
+
+[Service]
+User=root
+EnvironmentFile=-@sysconfdir@/default/tee-supplicant
+ExecStart=@sbindir@/tee-supplicant $OPTARGS
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-corstone1000-common.inc b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-corstone1000-common.inc
index eaee7ae..a883c34 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-corstone1000-common.inc
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-corstone1000-common.inc
@@ -1,3 +1,8 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files/optee-os/corstone1000:"
+SRC_URI:append = " \
+                  file://0001-Handle-logging-syscall.patch \
+		  "
+
 COMPATIBLE_MACHINE = "corstone1000"
 
 OPTEEMACHINE = "corstone1000"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.20.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.22.0.bbappend
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.20.0.bbappend
rename to meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.22.0.bbappend
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend
index bc933dd..e276fb8 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend
@@ -1,7 +1,6 @@
 # Machine specific configurations
 
 MACHINE_OPTEE_OS_REQUIRE ?= ""
-MACHINE_OPTEE_OS_REQUIRE:n1sdp = "optee-os-n1sdp.inc"
 MACHINE_OPTEE_OS_REQUIRE:tc = "optee-os-tc.inc"
 
 require ${MACHINE_OPTEE_OS_REQUIRE}
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
index e732c80..b5493e5 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
@@ -2,5 +2,6 @@
 
 MACHINE_OPTEE_OS_REQUIRE ?= ""
 MACHINE_OPTEE_OS_REQUIRE:corstone1000 = "optee-os-corstone1000-common.inc"
+MACHINE_OPTEE_OS_REQUIRE:n1sdp = "optee-os-n1sdp.inc"
 
 require ${MACHINE_OPTEE_OS_REQUIRE}
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bbappend
similarity index 100%
rename from meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bbappend
rename to meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bbappend
diff --git a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
index 29e33ff..551a67d 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
+++ b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
@@ -2,14 +2,14 @@
 
 COMPATIBLE_MACHINE:corstone1000 = "corstone1000"
 SRC_URI:append:corstone1000  = " \
-    file://0001-Add-stub-capsule-update-service-components.patch;patchdir=../trusted-services \
-    file://0002-Fixes-in-AEAD-for-psa-arch-test-54-and-58.patch;patchdir=../trusted-services \
-    file://0003-FMP-Support-in-Corstone1000.patch;patchdir=../trusted-services \
-    file://0004-GetNextVariableName-Fix.patch;patchdir=../trusted-services     \
-    file://0005-plat-corstone1000-add-compile-definitions-for-ECP_DP.patch;patchdir=../trusted-services \
-    file://0006-plat-corstone1000-Use-the-stateless-platform-service.patch;patchdir=../trusted-services \
-    file://0007-plat-corstone1000-Initialize-capsule-update-provider.patch;patchdir=../trusted-services \
-    file://0008-plat-corstone1000-change-ns-interrupt-action.patch;patchdir=../trusted-services \
+    file://0001-Add-stub-capsule-update-service-components.patch \
+    file://0002-Fixes-in-AEAD-for-psa-arch-test-54-and-58.patch \
+    file://0003-FMP-Support-in-Corstone1000.patch \
+    file://0004-GetNextVariableName-Fix.patch     \
+    file://0005-plat-corstone1000-add-compile-definitions-for-ECP_DP.patch \
+    file://0006-plat-corstone1000-Use-the-stateless-platform-service.patch \
+    file://0007-plat-corstone1000-Initialize-capsule-update-provider.patch \
+    file://0008-plat-corstone1000-change-ns-interrupt-action.patch \
     "
 
 
diff --git a/meta-arm/meta-arm-toolchain/conf/layer.conf b/meta-arm/meta-arm-toolchain/conf/layer.conf
index a6f403e..bce70da 100644
--- a/meta-arm/meta-arm-toolchain/conf/layer.conf
+++ b/meta-arm/meta-arm-toolchain/conf/layer.conf
@@ -9,4 +9,4 @@
 BBFILE_PRIORITY_arm-toolchain = "5"
 
 LAYERDEPENDS_arm-toolchain = "core"
-LAYERSERIES_COMPAT_arm-toolchain = "mickledore"
+LAYERSERIES_COMPAT_arm-toolchain = "nanbield"
diff --git a/meta-arm/meta-arm/classes/apply_local_src_patches.bbclass b/meta-arm/meta-arm/classes/apply_local_src_patches.bbclass
index e193935..0897b51 100644
--- a/meta-arm/meta-arm/classes/apply_local_src_patches.bbclass
+++ b/meta-arm/meta-arm/classes/apply_local_src_patches.bbclass
@@ -17,8 +17,8 @@
 
 apply_local_src_patches() {
 
-    input_dir="${LOCAL_SRC_PATCHES_INPUT_DIR}"
-    dest_dir="${LOCAL_SRC_PATCHES_DEST_DIR}"
+    input_dir="$1"
+    dest_dir="$2"
 
     if [ ! -d "$input_dir" ] ; then
         bbfatal "LOCAL_SRC_PATCHES_INPUT_DIR=$input_dir not found."
@@ -32,6 +32,7 @@
     export QUILT_PATCHES=./patches-extra
     mkdir -p patches-extra
 
+    bbdebug 1 "Looking for patches in $input_dir"
     for patch in $(find $input_dir -type f -name *.patch -or -name *.diff | sort)
     do
         patch_basename=`basename $patch`
@@ -45,4 +46,8 @@
         fi
     done
 }
-do_patch[postfuncs] += "apply_local_src_patches"
+
+do_apply_local_src_patches() {
+    apply_local_src_patches "${LOCAL_SRC_PATCHES_INPUT_DIR}" "${LOCAL_SRC_PATCHES_DEST_DIR}"
+}
+do_patch[postfuncs] += "do_apply_local_src_patches"
diff --git a/meta-arm/meta-arm/conf/layer.conf b/meta-arm/meta-arm/conf/layer.conf
index 2b35437..b506af8 100644
--- a/meta-arm/meta-arm/conf/layer.conf
+++ b/meta-arm/meta-arm/conf/layer.conf
@@ -13,7 +13,7 @@
     core \
     arm-toolchain \
 "
-LAYERSERIES_COMPAT_meta-arm = "mickledore"
+LAYERSERIES_COMPAT_meta-arm = "nanbield"
 
 # runfvp --console needs telnet, so pull this in for testimage.
 HOSTTOOLS_NONFATAL += "telnet"
diff --git a/meta-arm/meta-arm/conf/machine/generic-arm64.conf b/meta-arm/meta-arm/conf/machine/generic-arm64.conf
index 2ee7805..2e82e86 100644
--- a/meta-arm/meta-arm/conf/machine/generic-arm64.conf
+++ b/meta-arm/meta-arm/conf/machine/generic-arm64.conf
@@ -16,3 +16,11 @@
 EFI_PROVIDER ?= "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boot", "grub-efi", d)}"
 
 MACHINE_FEATURES:append = " alsa bluetooth efi qemu-usermode rtc screen usbhost vfat wifi"
+
+SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
+SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+
+XSERVER ?= "xserver-xorg \
+            xf86-video-fbdev \
+            xf86-video-modesetting \
+            "
diff --git a/meta-arm/meta-arm/conf/machine/qemu-generic-arm64.conf b/meta-arm/meta-arm/conf/machine/qemu-generic-arm64.conf
index 717a45c..6925854 100644
--- a/meta-arm/meta-arm/conf/machine/qemu-generic-arm64.conf
+++ b/meta-arm/meta-arm/conf/machine/qemu-generic-arm64.conf
@@ -8,9 +8,6 @@
 require conf/machine/generic-arm64.conf
 require conf/machine/include/qemu.inc
 
-SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
-SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
-
 EXTRA_IMAGEDEPENDS += "edk2-firmware"
 
 # This unique WIC file is necessary because kernel boot args cannot be passed
@@ -33,3 +30,5 @@
 QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd -pflash @DEPLOY_DIR_IMAGE@/SBSA_FLASH0.fd -pflash @DEPLOY_DIR_IMAGE@/SBSA_FLASH1.fd"
 QB_SERIAL_OPT = "-device virtio-serial-pci -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
 QB_TCPSERIAL_OPT = "-device virtio-serial-pci -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
+# sbsa-ref is a true virtual machine so can't use KVM
+QEMU_USE_KVM = "0"
diff --git a/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.12.0.bb b/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.12.0.bb
deleted file mode 100644
index 9a16de7..0000000
--- a/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.12.0.bb
+++ /dev/null
@@ -1,118 +0,0 @@
-SUMMARY = "SCP and MCP Firmware"
-DESCRIPTION = "Firmware for SCP and MCP software reference implementation"
-HOMEPAGE = "https://github.com/ARM-software/SCP-firmware"
-
-LICENSE = "BSD-3-Clause & Apache-2.0"
-LIC_FILES_CHKSUM = "file://license.md;beginline=5;md5=9db9e3d2fb8d9300a6c3d15101b19731 \
-                    file://contrib/cmsis/git/LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e"
-
-SRC_URI_SCP_FIRMWARE ?= "gitsm://github.com/ARM-software/SCP-firmware.git;protocol=https"
-SRC_URI = "${SRC_URI_SCP_FIRMWARE};branch=${SRCBRANCH} \
-           file://0001-OPTEE-Private-Includes.patch \
-          "
-
-SRCBRANCH = "master"
-SRCREV  = "0c7236b1851d90124210a0414fd982dc55322c7c"
-
-PROVIDES += "virtual/control-processor-firmware"
-
-CMAKE_BUILD_TYPE    ?= "RelWithDebInfo"
-SCP_PLATFORM        ?= "${MACHINE}"
-SCP_LOG_LEVEL       ?= "WARN"
-SCP_PLATFORM_FEATURE_SET ?= "0"
-
-INHIBIT_DEFAULT_DEPS = "1"
-DEPENDS = "gcc-arm-none-eabi-native \
-           cmake-native \
-           ninja-native \
-          "
-
-# For now we only build with GCC, so stop meta-clang trying to get involved
-TOOLCHAIN = "gcc"
-
-# remove once arm-none-eabi-gcc updates to 13 or newer like poky
-DEBUG_PREFIX_MAP:remove = "-fcanon-prefix-map"
-
-inherit deploy
-
-B = "${WORKDIR}/build"
-S = "${WORKDIR}/git"
-
-# Allow platform specific copying of only scp or both scp & mcp, default to both
-FW_TARGETS ?= "scp mcp"
-FW_INSTALL ?= "ramfw romfw"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-COMPATIBLE_MACHINE ?= "invalid"
-
-export CFLAGS = "${DEBUG_PREFIX_MAP}"
-export ASMFLAGS = "${DEBUG_PREFIX_MAP}"
-
-LDFLAGS[unexport] = "1"
-
-EXTRA_OECMAKE = "-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
-                 -D SCP_LOG_LEVEL=${SCP_LOG_LEVEL} \
-                 -D SCP_PLATFORM_FEATURE_SET=${SCP_PLATFORM_FEATURE_SET} \
-                 -D DISABLE_CPPCHECK=1 \
-                 -D SCP_TOOLCHAIN=GNU \
-                "
-
-do_configure() {
-    for FW in ${FW_TARGETS}; do
-        for TYPE in ${FW_INSTALL}; do
-            bbnote Configuring ${SCP_PLATFORM}/${FW}_${TYPE}...
-            cmake -GNinja ${EXTRA_OECMAKE} -S ${S} -B "${B}/${TYPE}/${FW}" -D SCP_FIRMWARE_SOURCE_DIR:PATH="${SCP_PLATFORM}/${FW}_${TYPE}"
-        done
-    done
-}
-
-do_configure[cleandirs] += "${B}"
-
-do_compile() {
-    for FW in ${FW_TARGETS}; do
-        for TYPE in ${FW_INSTALL}; do
-            bbnote Building ${SCP_PLATFORM}/${FW}_${TYPE}...
-            VERBOSE=1 cmake --build ${B}/${TYPE}/${FW} --target all
-        done
-    done
-}
-
-do_install() {
-    install -d ${D}/firmware
-    for TYPE in ${FW_INSTALL}; do
-        for FW in ${FW_TARGETS}; do
-           if [ "$TYPE" = "romfw" ]; then
-               if [ "$FW" = "scp" ]; then
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl1.bin" "${D}/firmware/${FW}_${TYPE}.bin"
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl1.elf" "${D}/firmware/${FW}_${TYPE}.elf"
-               else
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl1.bin" "${D}/firmware/${FW}_${TYPE}.bin"
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl1.elf" "${D}/firmware/${FW}_${TYPE}.elf"
-               fi
-           elif [ "$TYPE" = "ramfw" ]; then
-               if [ "$FW" = "scp" ]; then
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl2.bin" "${D}/firmware/${FW}_${TYPE}.bin"
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl2.elf" "${D}/firmware/${FW}_${TYPE}.elf"
-               else
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl2.bin" "${D}/firmware/${FW}_${TYPE}.bin"
-                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl2.elf" "${D}/firmware/${FW}_${TYPE}.elf"
-               fi
-           fi
-       done
-    done
-}
-
-FILES:${PN} = "/firmware"
-SYSROOT_DIRS += "/firmware"
-
-FILES:${PN}-dbg += "/firmware/*.elf"
-# These binaries are specifically for 32-bit arm
-INSANE_SKIP:${PN}-dbg += "arch"
-INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
-INHIBIT_PACKAGE_STRIP = "1"
-
-do_deploy() {
-    # Copy the images to deploy directory
-    cp -rf ${D}/firmware/* ${DEPLOYDIR}/
-}
-addtask deploy after do_install
diff --git a/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.13.0.bb b/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.13.0.bb
new file mode 100644
index 0000000..7ca78f3
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/scp-firmware/scp-firmware_2.13.0.bb
@@ -0,0 +1,118 @@
+SUMMARY = "SCP and MCP Firmware"
+DESCRIPTION = "Firmware for SCP and MCP software reference implementation"
+HOMEPAGE = "https://github.com/ARM-software/SCP-firmware"
+
+LICENSE = "BSD-3-Clause & Apache-2.0"
+LIC_FILES_CHKSUM = "file://license.md;beginline=5;md5=9db9e3d2fb8d9300a6c3d15101b19731 \
+                    file://contrib/cmsis/git/LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SRC_URI_SCP_FIRMWARE ?= "gitsm://github.com/ARM-software/SCP-firmware.git;protocol=https"
+SRC_URI = "${SRC_URI_SCP_FIRMWARE};branch=${SRCBRANCH} \
+           file://0001-OPTEE-Private-Includes.patch \
+          "
+
+SRCBRANCH = "master"
+SRCREV  = "cc4c9e017348d92054f74026ee1beb081403c168"
+
+PROVIDES += "virtual/control-processor-firmware"
+
+CMAKE_BUILD_TYPE    ?= "RelWithDebInfo"
+SCP_PLATFORM        ?= "${MACHINE}"
+SCP_LOG_LEVEL       ?= "WARN"
+SCP_PLATFORM_FEATURE_SET ?= "0"
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = "gcc-arm-none-eabi-native \
+           cmake-native \
+           ninja-native \
+          "
+
+# For now we only build with GCC, so stop meta-clang trying to get involved
+TOOLCHAIN = "gcc"
+
+# remove once arm-none-eabi-gcc updates to 13 or newer like poky
+DEBUG_PREFIX_MAP:remove = "-fcanon-prefix-map"
+
+inherit deploy
+
+B = "${WORKDIR}/build"
+S = "${WORKDIR}/git"
+
+# Allow platform specific copying of only scp or both scp & mcp, default to both
+FW_TARGETS ?= "scp mcp"
+FW_INSTALL ?= "ramfw romfw"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+COMPATIBLE_MACHINE ?= "invalid"
+
+export CFLAGS = "${DEBUG_PREFIX_MAP}"
+export ASMFLAGS = "${DEBUG_PREFIX_MAP}"
+
+LDFLAGS[unexport] = "1"
+
+EXTRA_OECMAKE = "-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
+                 -D SCP_LOG_LEVEL=${SCP_LOG_LEVEL} \
+                 -D SCP_PLATFORM_FEATURE_SET=${SCP_PLATFORM_FEATURE_SET} \
+                 -D DISABLE_CPPCHECK=1 \
+                 -D SCP_TOOLCHAIN=GNU \
+                "
+
+do_configure() {
+    for FW in ${FW_TARGETS}; do
+        for TYPE in ${FW_INSTALL}; do
+            bbnote Configuring ${SCP_PLATFORM}/${FW}_${TYPE}...
+            cmake -GNinja ${EXTRA_OECMAKE} -S ${S} -B "${B}/${TYPE}/${FW}" -D SCP_FIRMWARE_SOURCE_DIR:PATH="${SCP_PLATFORM}/${FW}_${TYPE}"
+        done
+    done
+}
+
+do_configure[cleandirs] += "${B}"
+
+do_compile() {
+    for FW in ${FW_TARGETS}; do
+        for TYPE in ${FW_INSTALL}; do
+            bbnote Building ${SCP_PLATFORM}/${FW}_${TYPE}...
+            VERBOSE=1 cmake --build ${B}/${TYPE}/${FW} --target all
+        done
+    done
+}
+
+do_install() {
+    install -d ${D}/firmware
+    for TYPE in ${FW_INSTALL}; do
+        for FW in ${FW_TARGETS}; do
+           if [ "$TYPE" = "romfw" ]; then
+               if [ "$FW" = "scp" ]; then
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl1.bin" "${D}/firmware/${FW}_${TYPE}.bin"
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl1.elf" "${D}/firmware/${FW}_${TYPE}.elf"
+               else
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl1.bin" "${D}/firmware/${FW}_${TYPE}.bin"
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl1.elf" "${D}/firmware/${FW}_${TYPE}.elf"
+               fi
+           elif [ "$TYPE" = "ramfw" ]; then
+               if [ "$FW" = "scp" ]; then
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl2.bin" "${D}/firmware/${FW}_${TYPE}.bin"
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-bl2.elf" "${D}/firmware/${FW}_${TYPE}.elf"
+               else
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl2.bin" "${D}/firmware/${FW}_${TYPE}.bin"
+                   install -D "${B}/${TYPE}/${FW}/bin/${SCP_PLATFORM}-${FW}-bl2.elf" "${D}/firmware/${FW}_${TYPE}.elf"
+               fi
+           fi
+       done
+    done
+}
+
+FILES:${PN} = "/firmware"
+SYSROOT_DIRS += "/firmware"
+
+FILES:${PN}-dbg += "/firmware/*.elf"
+# These binaries are specifically for 32-bit arm
+INSANE_SKIP:${PN}-dbg += "arch"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+INHIBIT_PACKAGE_STRIP = "1"
+
+do_deploy() {
+    # Copy the images to deploy directory
+    cp -rf ${D}/firmware/* ${DEPLOYDIR}/
+}
+addtask deploy after do_install
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.0-src.inc b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.0-src.inc
deleted file mode 100644
index 393ce43..0000000
--- a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.0-src.inc
+++ /dev/null
@@ -1,46 +0,0 @@
-# Common src definitions for trusted-firmware-m and trusted-firmware-m-scripts
-
-LICENSE = "BSD-2-Clause & BSD-3-Clause & Apache-2.0"
-
-LIC_FILES_CHKSUM = "file://license.rst;md5=07f368487da347f3c7bd0fc3085f3afa \
-                    file://../tf-m-tests/license.rst;md5=4481bae2221b0cfca76a69fb3411f390 \
-                    file://../mbedtls/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
-                    file://../mcuboot/LICENSE;md5=b6ee33f1d12a5e6ee3de1e82fb51eeb8"
-
-SRC_URI_TRUSTED_FIRMWARE_M ?= "git://git.trustedfirmware.org/TF-M/trusted-firmware-m.git;protocol=https"
-SRC_URI_TRUSTED_FIRMWARE_M_TESTS ?= "git://git.trustedfirmware.org/TF-M/tf-m-tests.git;protocol=https"
-SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS ?= "git://github.com/ARMmbed/mbedtls.git;protocol=https"
-SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT ?= "git://github.com/mcu-tools/mcuboot.git;protocol=https"
-SRC_URI_TRUSTED_FIRMWARE_M_QCBOR ?= "git://github.com/laurencelundblade/QCBOR.git;protocol=https"
-SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS ?= "git://git.trustedfirmware.org/TF-M/tf-m-extras.git;protocol=https"
-SRC_URI  = "${SRC_URI_TRUSTED_FIRMWARE_M};branch=${SRCBRANCH_tfm};name=tfm;destsuffix=git/tfm \
-            ${SRC_URI_TRUSTED_FIRMWARE_M_TESTS};branch=${SRCBRANCH_tfm-tests};name=tfm-tests;destsuffix=git/tf-m-tests \
-            ${SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS};branch=${SRCBRANCH_mbedtls};name=mbedtls;destsuffix=git/mbedtls \
-            ${SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT};branch=${SRCBRANCH_mcuboot};name=mcuboot;destsuffix=git/mcuboot \
-            ${SRC_URI_TRUSTED_FIRMWARE_M_QCBOR};branch=${SRCBRANCH_qcbor};name=qcbor;destsuffix=git/qcbor \
-            ${SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS};branch=${SRCBRANCH_tfm-extras};name=tfm-extras;destsuffix=git/tfm-extras \
-            "
-
-# The required dependencies are documented in tf-m/config/config_default.cmake
-# TF-Mv1.8.0
-SRCBRANCH_tfm ?= "master"
-SRCREV_tfm = "35ac80c8581d483da7d18cb8bcd20aaed096550c"
-# TF-Mv1.8.0
-SRCBRANCH_tfm-tests ?= "master"
-SRCREV_tfm-tests = "1273c5bcd3d8ade60d51524797e0b22b6fd7eea1"
-# mbedtls-3.4.0
-SRCBRANCH_mbedtls ?= "master"
-SRCREV_mbedtls = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
-# mcuboot v1.10.0
-SRCBRANCH_mcuboot ?= "main"
-SRCREV_mcuboot = "23d28832f02dcdc18687782c6cd8ba99e9b274d2"
-# QCBOR v1.2
-SRCBRANCH_qcbor ?= "master"
-SRCREV_qcbor = "b0e7033268e88c9f27146fa9a1415ef4c19ebaff"
-# TF-Mv1.8.0
-SRCBRANCH_tfm-extras ?= "master"
-SRCREV_tfm-extras = "504ae9a9a50981e9dd4d8accec8261a1dba9e965"
-
-SRCREV_FORMAT = "tfm"
-
-S = "${WORKDIR}/git/tfm"
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.1-src.inc b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.1-src.inc
new file mode 100644
index 0000000..f7e202a
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.1-src.inc
@@ -0,0 +1,46 @@
+# Common src definitions for trusted-firmware-m and trusted-firmware-m-scripts
+
+LICENSE = "BSD-2-Clause & BSD-3-Clause & Apache-2.0"
+
+LIC_FILES_CHKSUM = "file://license.rst;md5=07f368487da347f3c7bd0fc3085f3afa \
+                    file://../tf-m-tests/license.rst;md5=4481bae2221b0cfca76a69fb3411f390 \
+                    file://../mbedtls/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
+                    file://../mcuboot/LICENSE;md5=b6ee33f1d12a5e6ee3de1e82fb51eeb8"
+
+SRC_URI_TRUSTED_FIRMWARE_M ?= "git://git.trustedfirmware.org/TF-M/trusted-firmware-m.git;protocol=https"
+SRC_URI_TRUSTED_FIRMWARE_M_TESTS ?= "git://git.trustedfirmware.org/TF-M/tf-m-tests.git;protocol=https"
+SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS ?= "git://github.com/ARMmbed/mbedtls.git;protocol=https"
+SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT ?= "git://github.com/mcu-tools/mcuboot.git;protocol=https"
+SRC_URI_TRUSTED_FIRMWARE_M_QCBOR ?= "git://github.com/laurencelundblade/QCBOR.git;protocol=https"
+SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS ?= "git://git.trustedfirmware.org/TF-M/tf-m-extras.git;protocol=https"
+SRC_URI  = "${SRC_URI_TRUSTED_FIRMWARE_M};branch=${SRCBRANCH_tfm};name=tfm;destsuffix=git/tfm \
+            ${SRC_URI_TRUSTED_FIRMWARE_M_TESTS};branch=${SRCBRANCH_tfm-tests};name=tfm-tests;destsuffix=git/tf-m-tests \
+            ${SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS};branch=${SRCBRANCH_mbedtls};name=mbedtls;destsuffix=git/mbedtls \
+            ${SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT};branch=${SRCBRANCH_mcuboot};name=mcuboot;destsuffix=git/mcuboot \
+            ${SRC_URI_TRUSTED_FIRMWARE_M_QCBOR};branch=${SRCBRANCH_qcbor};name=qcbor;destsuffix=git/qcbor \
+            ${SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS};branch=${SRCBRANCH_tfm-extras};name=tfm-extras;destsuffix=git/tfm-extras \
+            "
+
+# The required dependencies are documented in tf-m/config/config_default.cmake
+# TF-Mv1.8.1
+SRCBRANCH_tfm ?= "master"
+SRCREV_tfm = "53aa78efef274b9e46e63b429078ae1863609728"
+# TF-Mv1.8.1
+SRCBRANCH_tfm-tests ?= "master"
+SRCREV_tfm-tests = "1273c5bcd3d8ade60d51524797e0b22b6fd7eea1"
+# mbedtls-3.4.1
+SRCBRANCH_mbedtls ?= "master"
+SRCREV_mbedtls = "72718dd87e087215ce9155a826ee5a66cfbe9631"
+# mcuboot v1.10.0
+SRCBRANCH_mcuboot ?= "main"
+SRCREV_mcuboot = "23d28832f02dcdc18687782c6cd8ba99e9b274d2"
+# QCBOR v1.2
+SRCBRANCH_qcbor ?= "master"
+SRCREV_qcbor = "b0e7033268e88c9f27146fa9a1415ef4c19ebaff"
+# TF-Mv1.8.1
+SRCBRANCH_tfm-extras ?= "master"
+SRCREV_tfm-extras = "504ae9a9a50981e9dd4d8accec8261a1dba9e965"
+
+SRCREV_FORMAT = "tfm"
+
+S = "${WORKDIR}/git/tfm"
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.0.bb b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.0.bb
deleted file mode 100644
index 10b141d..0000000
--- a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.0-src.inc
-require recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.1.bb b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.1.bb
new file mode 100644
index 0000000..d50d886
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native_1.8.1.bb
@@ -0,0 +1,2 @@
+require recipes-bsp/trusted-firmware-m/trusted-firmware-m-${PV}-src.inc
+require recipes-bsp/trusted-firmware-m/trusted-firmware-m-scripts-native.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.0.bb b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.0.bb
deleted file mode 100644
index 5794c1e..0000000
--- a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.8.0-src.inc
-require recipes-bsp/trusted-firmware-m/trusted-firmware-m.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.1.bb b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.1.bb
new file mode 100644
index 0000000..3464f49
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.1.bb
@@ -0,0 +1,2 @@
+require recipes-bsp/trusted-firmware-m/trusted-firmware-m-${PV}-src.inc
+require recipes-bsp/trusted-firmware-m/trusted-firmware-m.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202305.bb b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202305.bb
deleted file mode 100644
index 3a48ea5..0000000
--- a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202305.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-# Install EDK2 Base Tools in native sysroot. Currently the BaseTools are not
-# built, they are just copied to native sysroot. This is sufficient for
-# generating UEFI capsules as it only depends on some python scripts. Other
-# tools need to be built first before adding to sysroot.
-
-SUMMARY = "EDK2 Base Tools"
-LICENSE = "BSD-2-Clause-Patent"
-
-# EDK2
-SRC_URI = "git://github.com/tianocore/edk2.git;branch=master;protocol=https"
-LIC_FILES_CHKSUM = "file://License.txt;md5=2b415520383f7964e96700ae12b4570a"
-
-SRCREV = "ba91d0292e593df8528b66f99c1b0b14fadc8e16"
-
-S = "${WORKDIR}/git"
-
-inherit native
-
-RDEPENDS:${PN} += "python3-core"
-
-do_install () {
-    mkdir -p ${D}${bindir}/edk2-BaseTools
-    cp -r ${WORKDIR}/git/BaseTools/* ${D}${bindir}/edk2-BaseTools/
-}
diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202308.bb b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202308.bb
new file mode 100644
index 0000000..31b8fb0
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-basetools-native_202308.bb
@@ -0,0 +1,24 @@
+# Install EDK2 Base Tools in native sysroot. Currently the BaseTools are not
+# built, they are just copied to native sysroot. This is sufficient for
+# generating UEFI capsules as it only depends on some python scripts. Other
+# tools need to be built first before adding to sysroot.
+
+SUMMARY = "EDK2 Base Tools"
+LICENSE = "BSD-2-Clause-Patent"
+
+# EDK2
+SRC_URI = "git://github.com/tianocore/edk2.git;branch=master;protocol=https"
+LIC_FILES_CHKSUM = "file://License.txt;md5=2b415520383f7964e96700ae12b4570a"
+
+SRCREV = "819cfc6b42a68790a23509e4fcc58ceb70e1965e"
+
+S = "${WORKDIR}/git"
+
+inherit native
+
+RDEPENDS:${PN} += "python3-core"
+
+do_install () {
+    mkdir -p ${D}${bindir}/edk2-BaseTools
+    cp -r ${WORKDIR}/git/BaseTools/* ${D}${bindir}/edk2-BaseTools/
+}
diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202305.bb b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202305.bb
deleted file mode 100644
index fe153f4..0000000
--- a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202305.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-SRCREV_edk2           ?= "ba91d0292e593df8528b66f99c1b0b14fadc8e16"
-SRCREV_edk2-platforms ?= "be2af02a3fb202756ed9855173e0d0ed878ab6be"
-
-# FIXME - clang is having issues with antlr
-TOOLCHAIN:aarch64 = "gcc"
-
-require edk2-firmware.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202308.bb b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202308.bb
new file mode 100644
index 0000000..8620a67
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-bsp/uefi/edk2-firmware_202308.bb
@@ -0,0 +1,7 @@
+SRCREV_edk2           ?= "819cfc6b42a68790a23509e4fcc58ceb70e1965e"
+SRCREV_edk2-platforms ?= "bb6841e3fd1c60b3f8510b4fc0a380784e05d326"
+
+# FIXME - clang is having issues with antlr
+TOOLCHAIN:aarch64 = "gcc"
+
+require recipes-bsp/uefi/edk2-firmware.inc
diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0001-Patch-in-the-paths-to-the-SBSA-test-suite.patch b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0001-Patch-in-the-paths-to-the-SBSA-test-suite.patch
index 7b0b9b3..236245f 100644
--- a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0001-Patch-in-the-paths-to-the-SBSA-test-suite.patch
+++ b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0001-Patch-in-the-paths-to-the-SBSA-test-suite.patch
@@ -1,25 +1,24 @@
-From 97eb384fcc66326f93813ff14b998bb7336a4422 Mon Sep 17 00:00:00 2001
+From 3a164d9f17591a545d1eafa629b486d4a1563722 Mon Sep 17 00:00:00 2001
 From: Ross Burton <ross.burton@arm.com>
 Date: Thu, 16 Feb 2023 21:53:25 +0000
 Subject: [PATCH] Patch in the paths to the SBSA test suite
 
 Upstream-Status: Inappropriate (required action)
 Signed-off-by: Ross Burton <ross.burton@arm.com>
-
 ---
  ShellPkg/ShellPkg.dsc | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc
-index dd0d88603f..7367c052fc 100644
+index dd0d88603f11..91710c0795dc 100644
 --- a/ShellPkg/ShellPkg.dsc
 +++ b/ShellPkg/ShellPkg.dsc
 @@ -23,6 +23,8 @@
  !include MdePkg/MdeLibs.dsc.inc

  

  [LibraryClasses.common]

-+  SbsaValLib|ShellPkg/Application/sbsa-acs/val/SbsaValLib.inf

-+  SbsaPalLib|ShellPkg/Application/sbsa-acs/platform/pal_uefi/SbsaPalLib.inf

++  SbsaValLib|ShellPkg/Application/sbsa-acs/val/SbsaValLib.inf
++  SbsaPalLib|ShellPkg/Application/sbsa-acs/platform/pal_uefi/SbsaPalLib.inf
    UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf

    UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf

    UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf

@@ -27,7 +26,7 @@
    # Build all the libraries when building this package.

    # This helps developers test changes and how they affect the package.

    #

-+  ShellPkg/Application/sbsa-acs/uefi_app/SbsaAvs.inf

++  ShellPkg/Application/sbsa-acs/uefi_app/SbsaAvs.inf
    ShellPkg/Library/UefiShellLib/UefiShellLib.inf

    ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.inf

    ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf

diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0002-Enforce-using-good-old-BFD-linker.patch b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0002-Enforce-using-good-old-BFD-linker.patch
index 154ff0e..284191d 100644
--- a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0002-Enforce-using-good-old-BFD-linker.patch
+++ b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs/0002-Enforce-using-good-old-BFD-linker.patch
@@ -1,4 +1,4 @@
-From 8ce56a02fd722833931d356c372d374845f4c626 Mon Sep 17 00:00:00 2001
+From 6c403e3ccaae3bb3fd9d0ad220ed8ea98b2b1354 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 7 Apr 2021 00:16:07 -0700
 Subject: [PATCH] Enforce using good old BFD linker
@@ -12,18 +12,17 @@
 
 Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
 ---
  BaseTools/Conf/tools_def.template | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
-index 503a6687c1..5cbc5c92a5 100755
+index 1bf62362b611..2b41be8d5a44 100755
 --- a/BaseTools/Conf/tools_def.template
 +++ b/BaseTools/Conf/tools_def.template
-@@ -746,7 +746,7 @@ DEFINE GCC_ARM_CC_XIPFLAGS         = -mno-unaligned-access
- DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char  -ffunction-sections -fdata-sections -Wno-address -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-pic -fno-pie -ffixed-x18

+@@ -747,7 +747,7 @@ DEFINE GCC_AARCH64_CC_FLAGS        = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-
  DEFINE GCC_AARCH64_CC_XIPFLAGS     = -mstrict-align -mgeneral-regs-only

+ DEFINE GCC_RISCV64_CC_XIPFLAGS     = -mstrict-align -mgeneral-regs-only

  DEFINE GCC_DLINK_FLAGS_COMMON      = -nostdlib --pie

 -DEFINE GCC_DLINK2_FLAGS_COMMON     = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds

 +DEFINE GCC_DLINK2_FLAGS_COMMON     = -fuse-ld=bfd -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds

diff --git a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs_7.1.2.bb b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs_7.1.2.bb
index b6c6468..781d6e0 100644
--- a/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs_7.1.2.bb
+++ b/meta-arm/meta-arm/recipes-bsp/uefi/sbsa-acs_7.1.2.bb
@@ -1,4 +1,4 @@
-require recipes-bsp/uefi/edk2-firmware_202305.bb
+require recipes-bsp/uefi/edk2-firmware_202308.bb
 PROVIDES:remove = "virtual/bootloader"
 
 LICENSE += "& Apache-2.0"
diff --git a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-r-aem_11.22.14.bb b/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-r-aem_11.22.14.bb
deleted file mode 100644
index 89c83ea..0000000
--- a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-r-aem_11.22.14.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require fvp-envelope.inc
-
-SUMMARY = "Arm Fixed Virtual Platform - Armv8-R Base Architecture Envelope Model FVP"
-LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
-                    file://license_terms/third_party_licenses/third_party_licenses.txt;md5=34a1ba318d745f05e6197def68ea5411 \
-                    file://license_terms/third_party_licenses/arm_license_management_utilities/third_party_licenses.txt;md5=c09526c02e631abb95ad61528892552d"
-
-SRC_URI[fvp-x86_64.sha256sum] = "e819bfbccd91749345e3c7c6db22cbe41e02223118eb6395a4307ca81b175f7a"
-
-MODEL_CODE = "FVP_Base_AEMv8R"
diff --git a/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.0.bb b/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.0.bb
deleted file mode 100644
index 59c4f9c..0000000
--- a/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.0.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "OpenCSD - An open source CoreSight(tm) Trace Decode library"
-HOMEPAGE = "https://github.com/Linaro/OpenCSD"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ad8cb685eb324d2fa2530b985a43f3e5"
-
-SRC_URI = "git://github.com/Linaro/OpenCSD;protocol=https;branch=master"
-SRCREV = "78ce8ef47c55a489b0ca575b981cd4856d03f44b"
-
-S = "${WORKDIR}/git"
-
-COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
-
-EXTRA_OEMAKE = "ARCH='${TARGET_ARCH}' \
-                CROSS_COMPILE='${TARGET_SYS}-' \
-                CC='${CC}' \
-                CXX='${CXX}' \
-                LIB='${AR}' \
-                LINKER='${CXX}' \
-                LINUX64=1 \
-                DEBUG=1 \
-                PREFIX=${D}/usr \
-                INSTALL_BIN_DIR=${D}${bindir} \
-                INSTALL_INCLUDE_DIR=${D}${includedir} \
-                INSTALL_LIB_DIR=${D}${libdir} \
-                INSTALL_MAN_DIR=${D}${mandir}/man1 \
-                "
-
-do_compile() {
-    oe_runmake -C ${S}/decoder/build/linux
-}
-
-do_install() {
-    oe_runmake -C ${S}/decoder/build/linux install install_man
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.1.bb b/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.1.bb
new file mode 100644
index 0000000..01b0f7b
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-devtools/opencsd/opencsd_1.4.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "OpenCSD - An open source CoreSight(tm) Trace Decode library"
+HOMEPAGE = "https://github.com/Linaro/OpenCSD"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ad8cb685eb324d2fa2530b985a43f3e5"
+
+SRC_URI = "git://github.com/Linaro/OpenCSD;protocol=https;branch=master"
+SRCREV = "553d74524332be146675980ef611153d1a1ab6f8"
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
+
+EXTRA_OEMAKE = "ARCH='${TARGET_ARCH}' \
+                CROSS_COMPILE='${TARGET_SYS}-' \
+                CC='${CC}' \
+                CXX='${CXX}' \
+                LIB='${AR}' \
+                LINKER='${CXX}' \
+                LINUX64=1 \
+                DEBUG=1 \
+                PREFIX=${D}/usr \
+                INSTALL_BIN_DIR=${D}${bindir} \
+                INSTALL_INCLUDE_DIR=${D}${includedir} \
+                INSTALL_LIB_DIR=${D}${libdir} \
+                INSTALL_MAN_DIR=${D}${mandir}/man1 \
+                "
+
+do_compile() {
+    oe_runmake -C ${S}/decoder/build/linux
+}
+
+do_install() {
+    oe_runmake -C ${S}/decoder/build/linux install install_man
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-client.inc b/meta-arm/meta-arm/recipes-security/optee/optee-client.inc
index 3b9943c..77f6a64 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-client.inc
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-client.inc
@@ -9,7 +9,7 @@
 
 SRC_URI = " \
     git://github.com/OP-TEE/optee_client.git;branch=master;protocol=https \
-    file://tee-supplicant.service \
+    file://tee-supplicant@.service \
     file://tee-supplicant.sh \
 "
 
@@ -24,16 +24,16 @@
 EXTRA_OECMAKE:append:toolchain-clang = " -DCFG_WERROR=0"
 
 do_install:append() {
-    install -D -p -m0644 ${WORKDIR}/tee-supplicant.service ${D}${systemd_system_unitdir}/tee-supplicant.service
+    install -D -p -m0644 ${WORKDIR}/tee-supplicant@.service ${D}${systemd_system_unitdir}/tee-supplicant@.service
     install -D -p -m0755 ${WORKDIR}/tee-supplicant.sh ${D}${sysconfdir}/init.d/tee-supplicant
 
     sed -i -e s:@sysconfdir@:${sysconfdir}:g \
            -e s:@sbindir@:${sbindir}:g \
-              ${D}${systemd_system_unitdir}/tee-supplicant.service \
+              ${D}${systemd_system_unitdir}/tee-supplicant@.service \
               ${D}${sysconfdir}/init.d/tee-supplicant
 }
 
-SYSTEMD_SERVICE:${PN} = "tee-supplicant.service"
+SYSTEMD_SERVICE:${PN} = "tee-supplicant@.service"
 
 INITSCRIPT_PACKAGES = "${PN}"
 INITSCRIPT_NAME:${PN} = "tee-supplicant"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant.service b/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant.service
deleted file mode 100644
index 6b00df7..0000000
--- a/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=TEE Supplicant
-ConditionPathExistsGlob=/dev/teepriv[0-9]*
-
-[Service]
-User=root
-EnvironmentFile=-@sysconfdir@/default/tee-supplicant
-ExecStart=@sbindir@/tee-supplicant $OPTARGS
-
-[Install]
-WantedBy=basic.target
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant@.service b/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant@.service
new file mode 100644
index 0000000..72c0b9a
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-client/tee-supplicant@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=TEE Supplicant on %i
+
+[Service]
+User=root
+EnvironmentFile=-@sysconfdir@/default/tee-supplicant
+ExecStart=@sbindir@/tee-supplicant $OPTARGS
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/files/0001-LazyFetch-allow-setting-the-cmake-generator.patch b/meta-arm/meta-arm/recipes-security/trusted-services/files/0001-LazyFetch-allow-setting-the-cmake-generator.patch
new file mode 100644
index 0000000..6664fd0
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/files/0001-LazyFetch-allow-setting-the-cmake-generator.patch
@@ -0,0 +1,46 @@
+From e62709f8e6f586ace7975b58b8a1c726d120759f Mon Sep 17 00:00:00 2001
+From: Gyorgy Szing <Gyorgy.Szing@arm.com>
+Date: Thu, 31 Aug 2023 18:24:50 +0200
+Subject: [PATCH] LazyFetch: allow setting the cmake generator
+
+Allow configuring the CMake generator used for external components. By
+default use the generator the main project is using.
+For details see the documentation in tools/cmake/common/LazyFetch.cmake.
+
+Change-Id: Ie01ea1ae533cf7a40c1f09808de2ad2e83a09db3
+Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ tools/cmake/common/LazyFetch.cmake | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/tools/cmake/common/LazyFetch.cmake b/tools/cmake/common/LazyFetch.cmake
+index 68e790e..7676201 100644
+--- a/tools/cmake/common/LazyFetch.cmake
++++ b/tools/cmake/common/LazyFetch.cmake
+@@ -87,11 +87,20 @@ function(LazyFetch_ConfigAndBuild)
+ 							"component specific. Pleas refer to the upstream documentation for more information.")
+ 	endif()
+ 
++	if(NOT DEFINED ${UC_DEP_NAME}_GENERATOR)
++		if(DEFINED ENV{${UC_DEP_NAME}_GENERATOR})
++			set(${UC_DEP_NAME}_GENERATOR ENV{${UC_DEP_NAME}_GENERATOR} CACHE STRING "CMake generator used for ${UC_DEP_NAME}.")
++		else()
++			set(${UC_DEP_NAME}_GENERATOR ${CMAKE_GENERATOR} CACHE STRING "CMake generator used for ${UC_DEP_NAME}.")
++		endif()
++	endif()
++
+ 	execute_process(COMMAND
+ 		${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}"
+ 		${CMAKE_COMMAND}
+ 			"-C${CONFIGURED_CACHE_FILE}"
+ 			-DCMAKE_BUILD_TYPE=${${UC_DEP_NAME}_BUILD_TYPE}
++			-G${${UC_DEP_NAME}_GENERATOR}
+ 			-S ${BUILD_SRC_DIR}
+ 			-B ${BUILD_BIN_DIR}
+ 		RESULT_VARIABLE
+-- 
+2.34.1
+
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/files/nanopb-upgrade.patch b/meta-arm/meta-arm/recipes-security/trusted-services/files/nanopb-upgrade.patch
new file mode 100644
index 0000000..3e21f55
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/files/nanopb-upgrade.patch
@@ -0,0 +1,112 @@
+Upgrade the nanopb checkout to 0.4.7 plus some important build fixes, and
+change the build/install process to be more reliable.
+
+This should be upstreamed, but some pieces of this are not upstreamable in their
+current state.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/external/nanopb/fix-pyhon-name.patch b/external/nanopb/fix-pyhon-name.patch
+deleted file mode 100644
+index ab0e84c..0000000
+--- a/external/nanopb/fix-pyhon-name.patch
++++ /dev/null
+@@ -1,41 +0,0 @@
+-This patch fixes two issues:
+-
+-1. On windows the python3 executable is not allways called "python3". As a result
+-    "protoc" execution can fail due to the shebang in the file. This patch fixes
+-    this by running protoc with the intepreter.
+-
+-2. In addition when not running from a virtualenv, the install path for python file
+-    is set to the "user site-packages" to avoid needing elevated access rights.
+-
+-diff --git a/CMakeLists.txt b/CMakeLists.txt
+-index 31c86e7..e827015 100644
+---- a/CMakeLists.txt
+-+++ b/CMakeLists.txt
+-@@ -54,13 +54,25 @@ if(nanopb_BUILD_GENERATOR)
+-         string(REGEX REPLACE "([^;]+)" "\\1_pb2.py" generator_proto_py_file "${generator_proto}")
+-         add_custom_command(
+-             OUTPUT ${generator_proto_py_file}
+--            COMMAND ${nanopb_PROTOC_PATH} --python_out=${PROJECT_BINARY_DIR} -I${PROJECT_SOURCE_DIR}/generator/proto ${generator_proto_file}
+-+            COMMAND ${Python_EXECUTABLE} ${nanopb_PROTOC_PATH} --python_out=${PROJECT_BINARY_DIR} -I${PROJECT_SOURCE_DIR}/generator/proto ${generator_proto_file}
+-             DEPENDS ${generator_proto_file}
+-         )
+-         add_custom_target("generate_${generator_proto_py_file}" ALL DEPENDS ${generator_proto_py_file})
+-+
+-+        if (DEFINED ENV{VIRTUAL_ENV})
+-+            set(PYTHON_INSTALL_DIR ${Python_SITELIB} CACHE PATH "Install location for generated python modules.")
+-+        else()
+-+            execute_process(
+-+                COMMAND ${Python_EXECUTABLE} -m site --user-site
+-+                OUTPUT_VARIABLE PYTHON_USER_SITE
+-+                OUTPUT_STRIP_TRAILING_WHITESPACE
+-+            )
+-+            set(PYTHON_INSTALL_DIR ${PYTHON_USER_SITE} CACHE PATH "Install location for generated python modules.")
+-+        endif()
+-+
+-         install(
+-             FILES ${PROJECT_BINARY_DIR}/${generator_proto_py_file}
+--            DESTINATION ${Python_SITELIB}
+-+            DESTINATION ${PYTHON_INSTALL_DIR}
+-         )
+-     endforeach()
+- endif()
+diff --git a/external/nanopb/nanopb-init-cache.cmake.in b/external/nanopb/nanopb-init-cache.cmake.in
+index fb8104d..8df41dd 100644
+--- a/external/nanopb/nanopb-init-cache.cmake.in
++++ b/external/nanopb/nanopb-init-cache.cmake.in
+@@ -12,11 +12,15 @@ set(BUILD_STATIC_LIBS On CACHE BOOL "")
+ set(nanopb_BUILD_RUNTIME On CACHE BOOL "")
+ set(nanopb_BUILD_GENERATOR On CACHE BOOL "")
+ set(nanopb_MSVC_STATIC_RUNTIME Off BOOL "")
+-set(nanopb_PROTOC_PATH ${CMAKE_SOURCE_DIR}/generator/protoc CACHE STRING "")
++
++set(Python_EXECUTABLE "@Python_EXECUTABLE@" CACHE PATH "Location of python3 executable")
+ 
+ string(TOUPPER @CMAKE_CROSSCOMPILING@ CMAKE_CROSSCOMPILING) # CMake expects TRUE
+ if (CMAKE_CROSSCOMPILING)
+ 	set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY CACHE STRING "")
+ endif()
+ 
++set(nanopb_PYTHON_INSTDIR_OVERRIDE "@BUILD_INSTALL_DIR@/lib/python" CACHE PATH "")
++set(NANOPB_GENERATOR_DIR "@BUILD_INSTALL_DIR@/lib/python" CACHE PATH "")
++
+ @_cmake_fragment@
+diff --git a/external/nanopb/nanopb.cmake b/external/nanopb/nanopb.cmake
+index 36465f6..57cf3d6 100644
+--- a/external/nanopb/nanopb.cmake
++++ b/external/nanopb/nanopb.cmake
+@@ -28,7 +28,7 @@ running this module.
+ 
+ set(NANOPB_URL "https://github.com/nanopb/nanopb.git"
+ 		CACHE STRING "nanopb repository URL")
+-set(NANOPB_REFSPEC "nanopb-0.4.2"
++set(NANOPB_REFSPEC "nanopb-0.4.7"
+ 		CACHE STRING "nanopb git refspec")
+ set(NANOPB_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/nanopb-src"
+ 		CACHE PATH "nanopb source-code")
+@@ -85,7 +85,7 @@ find_package(Python3 REQUIRED COMPONENTS Interpreter)
+ 
+ find_file(NANOPB_GENERATOR_PATH
+ 			NAMES nanopb_generator.py
+-			PATHS ${nanopb_SOURCE_DIR}/generator
++			PATHS ${NANOPB_INSTALL_DIR}/bin
+ 			DOC "nanopb protobuf compiler"
+ 			NO_DEFAULT_PATH
+ 		)
+@@ -186,11 +186,10 @@ function(protobuf_generate)
+ 		target_include_directories(${PARAMS_TGT} PRIVATE ${_OUT_DIR_BASE})
+ 	endif()
+ 
+-	get_filename_component(NANOPB_GENERATOR_DIR "${NANOPB_GENERATOR_PATH}" DIRECTORY CACHE "Location of nanopb generator.")
+ 	#Append a protobuf generator command to the nanopb_generate target.
+ 	add_custom_command(OUTPUT "${_OUT_C}" "${_OUT_H}"
+ 					   COMMAND
+-					   ${CMAKE_COMMAND} -E env PYTHONPATH=${NANOPB_GENERATOR_DIR}
++					   ${CMAKE_COMMAND} -E env PYTHONPATH=${NANOPB_INSTALL_DIR}/lib/python
+ 					   ${Python3_EXECUTABLE} ${NANOPB_GENERATOR_PATH}
+ 						  -I ${PARAMS_BASE_DIR}
+ 						  -D ${_OUT_DIR_BASE}
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/libts/tee-udev.rules b/meta-arm/meta-arm/recipes-security/trusted-services/libts/tee-udev.rules
index 216fe99..43fafd8 100644
--- a/meta-arm/meta-arm/recipes-security/trusted-services/libts/tee-udev.rules
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/libts/tee-udev.rules
@@ -1,2 +1,7 @@
 # tee devices can only be accessed by the teeclnt group members
 KERNEL=="tee[0-9]*", TAG+="systemd", MODE="0660", GROUP="teeclnt"
+
+# If a /dev/teepriv[0-9]* device is detected, start an instance of
+# tee-supplicant.service with the device name as parameter
+KERNEL=="teepriv[0-9]*", MODE="0660", OWNER="root", GROUP="tee", \
+    TAG+="systemd", ENV{SYSTEMD_WANTS}+="tee-supplicant@%k.service"
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services-src.inc b/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services-src.inc
index 86eb508..20a4621 100644
--- a/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services-src.inc
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services-src.inc
@@ -9,6 +9,8 @@
 
 SRC_URI:append = "\
 	file://0001-Limit-nanopb-build-to-single-process.patch \
+	file://0001-LazyFetch-allow-setting-the-cmake-generator.patch \
+	file://nanopb-upgrade.patch \
 "
 
 #Latest on 2023 April 28
@@ -28,9 +30,9 @@
 SRCREV_mbedtls = "8c89224991adff88d53cd380f42a2baa36f91454"
 LIC_FILES_CHKSUM += "file://../mbedtls/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-# Nanopb, tag "nanopb-0.4.2"
+# Nanopb, tag "nanopb-0.4.7" plus some further fixes
 SRC_URI += "git://github.com/nanopb/nanopb.git;name=nanopb;protocol=https;branch=master;destsuffix=git/nanopb"
-SRCREV_nanopb = "df0e92f474f9cca704fe2b31483f0b4d1b1715a4"
+SRCREV_nanopb = "dbbf5d8992295aae669b8071eadad02f87d5faf0"
 LIC_FILES_CHKSUM += "file://../nanopb/LICENSE.txt;md5=9db4b73a55a3994384112efcdb37c01f"
 
 # qcbor, tag "v1.0.0"
@@ -60,16 +62,17 @@
 
 SRCREV_FORMAT = "trusted-services_dtc_mbedtls_nanopb_qcbor_tcose_cpputest_libmetal_openamp"
 
-# TS ships patches for external dependencies that needs to be applied
-apply_ts_patches() {
-    ( cd ${WORKDIR}/git/qcbor;    git stash; git branch -f bf_am; git am ${S}/external/qcbor/*.patch; git reset bf_am )
-    ( cd ${WORKDIR}/git/tcose;    git stash; git branch -f bf_am; git am ${S}/external/t_cose/*.patch; git reset bf_am )
-    ( cd ${WORKDIR}/git/mbedtls;  git stash; git branch -f bf_am; git am ${S}/external/MbedTLS/*.patch; git reset bf_am )
-    ( cd ${WORKDIR}/git/cpputest; git stash; git apply ${S}/external/CppUTest/*.patch )
-    ( cd ${WORKDIR}/git/dtc;      git stash; git apply ${S}/external/libfdt/*.patch )
-    ( cd ${WORKDIR}/git/nanopb;   git stash; git apply ${S}/external/nanopb/*.patch )
+inherit apply_local_src_patches
+LOCAL_SRC_PATCHES_INPUT_DIR = "N/A"
+
+do_apply_local_src_patches() {
+    apply_local_src_patches ${S}/external/qcbor ${WORKDIR}/git/qcbor
+    apply_local_src_patches ${S}/external/t_cose ${WORKDIR}/git/tcose
+    apply_local_src_patches ${S}/external/MbedTLS ${WORKDIR}/git/mbedtls
+    apply_local_src_patches ${S}/external/CppUTest ${WORKDIR}/git/cpputest
+    apply_local_src_patches ${S}/external/libfdt ${WORKDIR}/git/dtc
+    apply_local_src_patches ${S}/external/nanopb ${WORKDIR}/git/nanopb
 }
-do_patch[postfuncs] += "apply_ts_patches"
 
 # Paths to dependencies required by some TS SPs/tools
 EXTRA_OECMAKE += "-DDTC_SOURCE_DIR=${WORKDIR}/git/dtc \
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services.inc b/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services.inc
index c64a1d4..b46cd49 100644
--- a/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services.inc
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/trusted-services.inc
@@ -3,7 +3,7 @@
 
 LICENSE = "Apache-2.0 & BSD-3-Clause & Zlib"
 
-inherit python3native cmake
+inherit python3native cmake pkgconfig
 
 COMPATIBLE_HOST = "aarch64.*-linux"
 COMPATIBLE_MACHINE ?= "invalid"
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/ts-psa-api-test-common_git.inc b/meta-arm/meta-arm/recipes-security/trusted-services/ts-psa-api-test-common_git.inc
index 8a7b0e5..c8b4e99 100644
--- a/meta-arm/meta-arm/recipes-security/trusted-services/ts-psa-api-test-common_git.inc
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/ts-psa-api-test-common_git.inc
@@ -16,15 +16,11 @@
 SRCREV_psatest = "38cb53a4d9e292435ddf7899960b15af62decfbe"
 LIC_FILES_CHKSUM += "file://../psatest/LICENSE.md;md5=2a944942e1496af1886903d274dedb13"
 
-EXTRA_OECMAKE += "\
-                  -DPSA_ARCH_TESTS_SOURCE_DIR=${WORKDIR}/git/psatest \
-                 "
+EXTRA_OECMAKE += "-DPSA_ARCH_TESTS_SOURCE_DIR=${WORKDIR}/git/psatest"
 
-# TS check if there are patches to apply to psa-arch-tests, if so apply them
-apply_ts_patch() {
-    find ${S}/external/psa_arch_tests -type f -name '*.patch' -exec patch -p1 -d ${WORKDIR}/git/psatest -i {} \;
+do_apply_local_src_patches:append() {
+    apply_local_src_patches ${S}/external/psa_arch_tests ${WORKDIR}/git/psatest
 }
-do_patch[postfuncs] += "apply_ts_patch"
 
 FILES:${PN} = "${bindir}/${PSA_TEST}"
 
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/ts-remote-test_git.bb b/meta-arm/meta-arm/recipes-security/trusted-services/ts-remote-test_git.bb
index 203defe..1633ecf 100644
--- a/meta-arm/meta-arm/recipes-security/trusted-services/ts-remote-test_git.bb
+++ b/meta-arm/meta-arm/recipes-security/trusted-services/ts-remote-test_git.bb
@@ -10,3 +10,10 @@
 OECMAKE_SOURCEPATH = "${S}/deployments/ts-remote-test/${TS_ENV}"
 
 FILES:${PN} = "${bindir}/ts-remote-test"
+
+do_install:append () {
+    install -d ${D}${bindir}
+    mv ${D}${TS_INSTALL}/bin/ts-remote-test ${D}${bindir}
+
+    rm -r --one-file-system ${D}${TS_INSTALL}
+}
diff --git a/meta-arm/meta-arm/recipes-security/trusted-services/ts-sp-env-test_git.bb b/meta-arm/meta-arm/recipes-security/trusted-services/ts-sp-env-test_git.bb
deleted file mode 100644
index 5551a4d..0000000
--- a/meta-arm/meta-arm/recipes-security/trusted-services/ts-sp-env-test_git.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Trusted Services test_runner service provider"
-
-require ts-sp-common.inc
-
-# Current version of env-test SP contains hard-coded values for FVP.
-COMPATIBLE_MACHINE ?= "invalid"
-
-SP_UUID = "${ENV_TEST_UUID}"
-TS_SP_ENVTEST_CONFIG ?= "baremetal-fvp_base_revc"
-
-OECMAKE_SOURCEPATH="${S}/deployments/env-test/config/${TS_SP_ENVTEST_CONFIG}-${TS_ENV}"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/zfs/zfs_2.2.0.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/zfs/zfs_2.2.0.bb
index a62a8a3..db6f725 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/zfs/zfs_2.2.0.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/zfs/zfs_2.2.0.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=7087caaf1dc8a2856585619f4a787faa"
 HOMEPAGE ="https://github.com/openzfs/zfs"
 
-SRCREV = "009d3288dea524c7ad373b04b65bee8bb6f0bfea"
+SRCREV = "229ca7d738ccbf4c55076977467ee93e20b6f01b"
 SRC_URI = "git://github.com/openzfs/zfs;protocol=https;branch=zfs-2.2-release \
            file://0001-Define-strndupa-if-it-does-not-exist.patch \
            file://aaf28a4630af60496c9d33db1d06a7d7d8983422.patch \
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/btrfsmaintenance/btrfsmaintenance_0.5.bb b/meta-openembedded/meta-filesystems/recipes-utils/btrfsmaintenance/btrfsmaintenance_0.5.bb
index 5761844..b4e5da6 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/btrfsmaintenance/btrfsmaintenance_0.5.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/btrfsmaintenance/btrfsmaintenance_0.5.bb
@@ -9,8 +9,6 @@
 
 SECTION = "base"
 
-DEPENDS = "btrfs-tools"
-
 SRC_URI = "git://github.com/kdave/${BPN};branch=master;protocol=https \
     file://0001-change-sysconfig-path-to-etc-default.patch \
     file://0002-add-WantedBy-directive-to-btrfsmaintenance-refresh.s.patch \
@@ -20,11 +18,9 @@
 UPSTREAM_CHECK_URI = "https://github.com/kdave/${BPN}/tags"
 UPSTREAM_CHECK_REGEX = "${BPN}/releases/tag/v(?P<pver>\d+(?:\.\d+)*)"
 
-RDEPENDS:${PN} = "bash"
+RDEPENDS:${PN} = "bash btrfs-tools"
 
-S="${WORKDIR}/git"
-
-inherit allarch
+S = "${WORKDIR}/git"
 
 do_configure[noexec] = "1"
 do_compile[noexec] = "1"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs/0001-Makefile-proper-location-of-LDFLAGS.patch b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs/0001-Makefile-proper-location-of-LDFLAGS.patch
deleted file mode 100644
index 2c00183..0000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs/0001-Makefile-proper-location-of-LDFLAGS.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 8eeaee82dcfdf47f16ad880e416b722827f41bdb Mon Sep 17 00:00:00 2001
-From: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
-Date: Mon, 23 May 2022 19:37:32 +0200
-Subject: [PATCH] Makefile: proper location of LDFLAGS
-
-Signed-off-by: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
----
-Upstream-Status: Pending
-
- Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index e3c5207..14b155e 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,5 +1,5 @@
- CFLAGS = -Wall -g
--LFLAGS = -lm
-+LDFLAGS = -lm
- CC = gcc
- 
- all: overlay
-@@ -7,7 +7,7 @@ all: overlay
- objects = fsck.o common.o lib.o check.o mount.o path.o overlayfs.o
- 
- overlay: $(objects)
--	$(CC) $(LFLAGS) $(objects) -o fsck.overlay
-+	$(CC) $(objects) -o fsck.overlay $(LDFLAGS) 
- 
- .c.o:
- 	$(CC) $(CFLAGS) -c $<
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs_git.bb b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs_git.bb
deleted file mode 100644
index 9d58b9a..0000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-progs_git.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "File system check utility for OverlayFS"
-HOMEPAGE = "https://github.com/hisilicon/overlayfs-progs"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/PD;md5=b3597d12946881e13cb3b548d1173851"
-
-SRC_URI = "\
-    git://github.com/hisilicon/overlayfs-progs.git;protocol=https;branch=master \
-    file://0001-Makefile-proper-location-of-LDFLAGS.patch \
-"
-
-PV = "1.0+git${SRCPV}"
-SRCREV = "e10ef686570d9c7eff42f52461593a5c15da56bd"
-
-S = "${WORKDIR}/git"
-B = "${S}"
-
-# Required to have the fts.h header for musl
-DEPENDS:append:libc-musl = " fts"
-# Fix the missing fts libs when using musl
-EXTRA_OEMAKE:append:libc-musl = " LDFLAGS='-lfts'"
-
-EXTRA_OEMAKE += "'CC=${CC} -O2' "
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-do_compile () {
-    oe_runmake
-}
-
-do_install () {
-    install -d ${D}${bindir}
-    install -m 0755 ${B}/fsck.overlay ${D}${bindir}
-}
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0001-Fixed-includes-so-that-it-compiles-on-Ubuntu-20.04.patch b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0001-Fixed-includes-so-that-it-compiles-on-Ubuntu-20.04.patch
deleted file mode 100644
index ed84d92..0000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0001-Fixed-includes-so-that-it-compiles-on-Ubuntu-20.04.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 81b4fbb5f52044cb348534c23f10b3884972b09b Mon Sep 17 00:00:00 2001
-From: Beat Schaer <beat.schaer@wabtec.com>
-Date: Fri, 19 Mar 2021 08:18:58 +0100
-Subject: [PATCH] Fixed includes so that it compiles on Ubuntu 20.04
-
----
-Upstream-Status: Pending
-
- logic.c | 3 +--
- main.c  | 3 ++-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/logic.c b/logic.c
-index 97767f5..47ebfaa 100644
---- a/logic.c
-+++ b/logic.c
-@@ -7,8 +7,7 @@
- #include <string.h>
- #include <errno.h>
- #include <unistd.h>
--#include <attr/xattr.h>
--#include <attr/attributes.h>
-+#include <sys/xattr.h>
- #include <fts.h>
- #include <libgen.h>
- #include "logic.h"
-diff --git a/main.c b/main.c
-index aa11239..f462b98 100644
---- a/main.c
-+++ b/main.c
-@@ -12,7 +12,8 @@
- #include <linux/limits.h>
- #include <stdbool.h>
- #include <sys/stat.h>
--#include <attr/xattr.h>
-+#include <sys/xattr.h>
-+#include <errno.h>
- #ifndef _SYS_STAT_H
-   #include <linux/stat.h>
- #endif
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0002-makefile-fix-linking-flags.patch b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0002-makefile-fix-linking-flags.patch
deleted file mode 100644
index 8fbb250..0000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools/0002-makefile-fix-linking-flags.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From b4ff5886797e72d1c21da43261ca7648412f3186 Mon Sep 17 00:00:00 2001
-From: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
-Date: Mon, 23 May 2022 19:53:21 +0200
-Subject: [PATCH] makefile: fix linking flags
-
-LDLIBS should be placed at the end according to
-https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html
-
-Signed-off-by: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
----
-Upstream-Status: Pending
-
- makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/makefile b/makefile
-index fb1bed4..038c7ce 100644
---- a/makefile
-+++ b/makefile
-@@ -1,11 +1,11 @@
- CFLAGS = -Wall -std=c99
--LFLAGS = -lm
-+LDLIBS = -lm
- CC = gcc
- 
- all: overlay
- 
- overlay: main.o logic.o sh.o
--	$(CC) $(LFLAGS) main.o logic.o sh.o -o overlay
-+	$(CC) main.o logic.o sh.o -o overlay $(LDLIBS) 
- 
- main.o: main.c logic.h
- 	$(CC) $(CFLAGS) -c main.c
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools_git.bb b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools_git.bb
index eb6e496..ca2ec9c 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools_git.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/overlayfs/overlayfs-tools_git.bb
@@ -5,17 +5,14 @@
 
 SRC_URI = "\
     git://github.com/kmxz/overlayfs-tools.git;protocol=https;branch=master \
-    file://0001-Fixed-includes-so-that-it-compiles-on-Ubuntu-20.04.patch \
-    file://0002-makefile-fix-linking-flags.patch \
 "
 
 PV = "1.0+git${SRCPV}"
-SRCREV = "291c7f4a3fb548d06c572700650c2e3bccb0cd27"
+SRCREV = "b5e5a829895ac98ccfe4629fbfbd8b819262bd00"
 
 S = "${WORKDIR}/git"
 B = "${S}"
 
-DEPENDS += "attr"
 # Required to have the fts.h header for musl
 DEPENDS:append:libc-musl = " fts"
 
@@ -24,11 +21,8 @@
 EXTRA_OEMAKE:append:libc-musl = " LDLIBS=-lfts"
 TARGET_CC_ARCH += "${LDFLAGS}"
 
-do_compile () {
-    oe_runmake
-}
-
 do_install () {
     install -d ${D}${bindir}
     install -m 0755 ${B}/overlay ${D}${bindir}
+    install -m 0755 ${B}/fsck.overlay ${D}${bindir}
 }
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb
index fdfe045..cfb6e4f 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb
@@ -28,7 +28,7 @@
     e2fsprogs-resize2fs \
     libaio \
     libcap-bin \
-    overlayfs-progs \
+    overlayfs-tools \
     perl \
     python3 \
     python3-core \
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_44.2.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_44.2.bb
deleted file mode 100644
index 2f7c021..0000000
--- a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_44.2.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "A simple GNOME application to access virtual machines."
-SECTION = "network"
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://copyright;md5=a65e9b0c9f78617732f09f68fc4ef79a"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
-
-DEPENDS = " \
-  glib-2.0 \
-  desktop-file-utils-native \
-  libarchive \
-  libgudev \
-  libhandy \
-  libosinfo \
-  libsecret \
-  libsoup \
-  libvirt-glib \
-  mtools \
-  spice-gtk \
-  tracker \
-  webkitgtk3 \
-  appstream-glib-native \
-  spice-protocol \
-  yelp-tools \
-"
-
-RDEPENDS:${PN} = "glib-2.0-dev libvirt-virsh qemu-common qemu-system-x86-64 genisoimage"
-
-inherit gnomebase gsettings pkgconfig mime-xdg gtk-icon-cache gobject-introspection vala features_check
-
-SRC_URI[archive.sha256sum] = "9dd389c149d0c0fa57456ec363d51a88255f945558fb9df42894ce78ef85df89"
-
-GIR_MESON_OPTION = ""
-
-FILES:${PN} += "${datadir}"
-
-INSANE_SKIP:${PN} = "dev-deps"
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb
new file mode 100644
index 0000000..f2aeb88
--- /dev/null
+++ b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A simple GNOME application to access virtual machines."
+SECTION = "network"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://copyright;md5=a65e9b0c9f78617732f09f68fc4ef79a"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
+
+DEPENDS = " \
+  glib-2.0 \
+  desktop-file-utils-native \
+  libarchive \
+  libgudev \
+  libhandy \
+  libosinfo \
+  libsecret \
+  libsoup \
+  libvirt-glib \
+  mtools \
+  spice-gtk \
+  tracker \
+  webkitgtk3 \
+  appstream-glib-native \
+  spice-protocol \
+  yelp-tools \
+"
+
+RDEPENDS:${PN} = "glib-2.0-dev libvirt-virsh qemu-common qemu-system-x86-64 genisoimage"
+
+inherit gnomebase gsettings pkgconfig mime-xdg gtk-icon-cache gobject-introspection vala features_check
+
+SRC_URI[archive.sha256sum] = "cc63080eefa147a8472ab1a5ff087b97a27ab723a4ee005ed41e8c9dd7798e41"
+
+GIR_MESON_OPTION = ""
+
+FILES:${PN} += "${datadir}"
+
+INSANE_SKIP:${PN} = "dev-deps"
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_44.2.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_44.2.bb
deleted file mode 100644
index 48e4d9f..0000000
--- a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_44.2.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Remote desktop daemon for GNOME using pipewire."
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gettext gsettings features_check
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-SRC_URI[archive.sha256sum] = "7a9ffd341b5fcb636d26675e9f6269650952163fff5295327618cc2d5cc87b8e"
-
-DEPENDS = " \
-    asciidoc-native \
-    libdrm \
-    libepoxy \
-    cairo \
-    glib-2.0 \
-    pipewire \
-    libnotify \
-    libsecret \
-    nv-codec-headers \
-    tpm2-tss \
-"
-
-PACKAGECONFIG ??= " \
-    vnc \
-    rdp \
-    ${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'fdk_aac', '', d)} \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-"
-
-PACKAGECONFIG[vnc] = "-Dvnc=true,-Dvnc=false,libvncserver"
-PACKAGECONFIG[rdp] = "-Drdp=true,-Drdp=false,freerdp fuse3 libxkbcommon"
-PACKAGECONFIG[fdk_aac] = "-Dfdk_aac=true,-Dfdk_aac=false,fdk-aac"
-PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
-
-FILES:${PN} += "${systemd_user_unitdir}"
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb
new file mode 100644
index 0000000..d308964
--- /dev/null
+++ b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Remote desktop daemon for GNOME using pipewire."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gettext gsettings features_check
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+SRC_URI[archive.sha256sum] = "cb993112d5a3ca21ec217df2d84068e4cad2a4aa6cab52f0e186fa1152f7a381"
+
+DEPENDS = " \
+    asciidoc-native \
+    libdrm \
+    libei \
+    libepoxy \
+    cairo \
+    glib-2.0 \
+    pipewire \
+    libnotify \
+    libsecret \
+    nv-codec-headers \
+    tpm2-tss \
+"
+
+PACKAGECONFIG ??= " \
+    vnc \
+    rdp \
+    ${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'fdk_aac', '', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,pipewire-native wireplumber-native dbus-native"
+PACKAGECONFIG[vnc] = "-Dvnc=true,-Dvnc=false,libvncserver"
+PACKAGECONFIG[rdp] = "-Drdp=true,-Drdp=false,freerdp fuse3 libxkbcommon"
+PACKAGECONFIG[fdk_aac] = "-Dfdk_aac=true,-Dfdk_aac=false,fdk-aac"
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
+
+FILES:${PN} += "${systemd_user_unitdir}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/amtk/amtk_5.6.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/amtk/amtk_5.6.1.bb
deleted file mode 100644
index fbc8f38..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/amtk/amtk_5.6.1.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Actions, Menus and Toolbars Kit"
-LICENSE = "LGPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://LICENSES/LGPL-3.0-or-later.txt;md5=c51d3eef3be114124d11349ca0d7e117"
-
-DEPENDS = " \
-    glib-2.0-native \
-    gtk+3 \
-    gtk-doc-native \
-    libxslt-native \
-    docbook-xsl-stylesheets-native \
-    python3-pygments-native \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-GIR_MESON_OPTION = ""
-
-inherit gnomebase gettext features_check gobject-introspection
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-SRC_URI[archive.sha256sum] = "d50115b85c872aac296934b5ee726a3fa156c6f5ad96d27e0edd0aa5ad173228"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_44.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_44.3.bb
deleted file mode 100644
index 06203fb..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_44.3.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "This is the Eye of GNOME, an image viewer program."
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = " \
-    librsvg \
-    gnome-desktop \
-    gsettings-desktop-schemas \
-    gdk-pixbuf \
-    gtk+3 \
-    libhandy \
-    libpeas \
-    libportal \
-    libexif \
-    lcms \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase pkgconfig gsettings gobject-introspection gettext mime-xdg features_check gtk-icon-cache
-
-# FIXME: whilst eog uses libpeas <2, g-i is needed. This can be removed when libpeas2 is used.
-REQUIRED_DISTRO_FEATURES = "opengl gobject-introspection-data"
-
-SRC_URI[archive.sha256sum] = "d6b2d70f4b432ff8cf494c8f9029b2621d08e7817938317d64063ae6c4da9d8c"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-EXTRA_OEMESON = "-Dxmp=false"
-
-FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb
new file mode 100644
index 0000000..eb3d07c
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "This is the Eye of GNOME, an image viewer program."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = " \
+    librsvg \
+    gnome-desktop \
+    gsettings-desktop-schemas \
+    gdk-pixbuf \
+    gtk+3 \
+    libhandy \
+    libpeas \
+    libportal \
+    libexif \
+    lcms \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase pkgconfig gsettings gobject-introspection gettext mime-xdg features_check gtk-icon-cache
+
+# FIXME: whilst eog uses libpeas <2, g-i is needed. This can be removed when libpeas2 is used.
+REQUIRED_DISTRO_FEATURES = "opengl gobject-introspection-data"
+
+SRC_URI[archive.sha256sum] = "05cb2c9a66ba15870f47358cd4c1ce670f17e4c8b22e050d627d728ff88b57ba"
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+EXTRA_OEMESON = "-Dxmp=false"
+
+FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_44.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_44.2.bb
deleted file mode 100644
index 67449be..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_44.2.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "Evince is a document viewer for document formats like pdf, ps, djvu"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=96f2f8d5ee576a2163977938ea36fa7b"
-SECTION = "x11/office"
-DEPENDS = " \
-    adwaita-icon-theme \
-    appstream-glib \
-    cairo \
-    desktop-file-utils-native \
-    dbus \
-    gdk-pixbuf \
-    glib-2.0 \
-    gnome-common-native \
-    gnome-desktop \
-    gsettings-desktop-schemas \
-    gspell \
-    gstreamer1.0-plugins-base \
-    gtk+3 \
-    libarchive \
-    libhandy \
-    libsecret \
-    libxml2 \
-    poppler \
-    yelp-tools-native \
-    zlib \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase itstool gnome-help pkgconfig gsettings gobject-introspection gettext mime-xdg gi-docgen features_check gtk-icon-cache
-
-REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'opengl', '', d)}"
-
-def gnome_verdir(v):
-    return oe.utils.trim_version(v, 1)
-
-SRC_URI[archive.sha256sum] = "9a75c7ff8f599218d070e09fb4082cb26f9b86370a9bfae98e1aacb564d675dd"
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[nautilus] = "-Dnautilus=true,-Dnautilus=false,nautilus"
-
-RDEPENDS:${PN} += "glib-2.0-utils"
-RRECOMMENDS:${PN} = "adwaita-icon-theme"
-
-PACKAGES =+ "${PN}-nautilus-extension"
-
-do_install:prepend() {
-    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libview/ev-view-type-builtins.c
-    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libdocument/ev-document-type-builtins.c
-}
-
-FILES:${PN} += "${datadir}/dbus-1 \
-                ${datadir}/metainfo \
-                ${datadir}/thumbnailers \
-                ${systemd_user_unitdir} \
-"
-FILES:${PN}-nautilus-extension = "${libdir}/nautilus/*/*so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb
new file mode 100644
index 0000000..d97a8a0
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Evince is a document viewer for document formats like pdf, ps, djvu"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=96f2f8d5ee576a2163977938ea36fa7b"
+SECTION = "x11/office"
+DEPENDS = " \
+    adwaita-icon-theme \
+    appstream-glib \
+    cairo \
+    desktop-file-utils-native \
+    dbus \
+    gdk-pixbuf \
+    glib-2.0 \
+    gnome-common-native \
+    gnome-desktop \
+    gsettings-desktop-schemas \
+    gspell \
+    gstreamer1.0-plugins-base \
+    gtk+3 \
+    libarchive \
+    libhandy \
+    libsecret \
+    libxml2 \
+    poppler \
+    yelp-tools-native \
+    zlib \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase itstool gnome-help pkgconfig gsettings gobject-introspection gettext mime-xdg gi-docgen features_check gtk-icon-cache
+
+REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'opengl', '', d)}"
+
+def gnome_verdir(v):
+    return oe.utils.trim_version(v, 1)
+
+SRC_URI[archive.sha256sum] = "d18647d4275cbddf0d32817b1d04e307342a85be914ec4dad2d8082aaf8aa4a8"
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[nautilus] = "-Dnautilus=true,-Dnautilus=false,nautilus"
+
+RDEPENDS:${PN} += "glib-2.0-utils"
+RRECOMMENDS:${PN} = "adwaita-icon-theme"
+
+PACKAGES =+ "${PN}-nautilus-extension"
+
+do_install:prepend() {
+    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libview/ev-view-type-builtins.c
+    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libdocument/ev-document-type-builtins.c
+}
+
+FILES:${PN} += "${datadir}/dbus-1 \
+                ${datadir}/metainfo \
+                ${datadir}/thumbnailers \
+                ${systemd_user_unitdir} \
+"
+FILES:${PN}-nautilus-extension = "${libdir}/nautilus/*/*so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc b/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
index 5452a2e..511cc04 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
@@ -9,5 +9,5 @@
 
 inherit gnomebase upstream-version-is-even
 
-SRC_URI[archive.sha256sum] = "b71e412e52f567c83394b5926df92b4f4f6d2cddebad384a517c720671fad996"
-PV = "3.48.3"
+SRC_URI[archive.sha256sum] = "c9f793d99ba188ef8cf2891b8062d7e570e3cba22b8cfc46eb561c6cecc81d3a"
+PV = "3.50.0"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_44.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_44.1.bb
deleted file mode 100644
index cd90133..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_44.1.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "GNOME Display Manager"
-LICENSE="GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = " \
-    accountsservice \
-    audit \
-    dconf-native \
-    gtk+3 \
-    keyutils \
-    libcanberra \
-    libgudev \
-    libpam \
-    xserver-xorg \
-"
-
-REQUIRED_DISTRO_FEATURES = "x11 systemd pam polkit gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings pkgconfig gobject-introspection gettext systemd useradd itstool gnome-help features_check
-
-SRC_URI[archive.sha256sum] = "68266b3abe7d28fc469d0067aac9c5dabb0ca7952cc1f7c238a04951f3dc5b0d"
-
-EXTRA_OEMESON = " \
-    -Dplymouth=disabled \
-    -Ddefault-pam-config=openembedded \
-    -Dpam-mod-dir=${base_libdir}/security \
-"
-
-do_install:prepend() {
-    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-worker-enum-types.c
-    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-worker-enum-types.h
-    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-enum-types.c
-    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-enum-types.h
-}
-
-do_install:append() {
-    rm -rf ${D}/run ${D}${localstatedir}/run
-}
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --home ${localstatedir}/lib/gdm --user-group gdm"
-
-SYSTEMD_SERVICE:${PN} = "${BPN}.service"
-
-# Some gnome components - as gnome-panel and gnome-shell (!!) - require gdm
-# components. To allow gnome-images using different display-manager, split them
-# out into a seperate package.
-PACKAGE_BEFORE_PN = "${PN}-base"
-FILES:${PN}-base = " \
-    ${datadir}/glib-2.0 \
-    ${datadir}/gnome-session \
-    ${libdir}/lib*${SOLIBS} \
-    ${libdir}/girepository-1.0 \
-"
-
-CONFFILES:${PN} += "${sysconfdir}/gdm/custom.conf"
-FILES:${PN} += " \
-    ${datadir}/dconf \
-    ${base_libdir}/security/pam_gdm.so \
-    ${localstatedir} \
-    ${systemd_unitdir} ${systemd_user_unitdir} \
-"
-
-RDEPENDS:${PN} += "${PN}-base"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb
new file mode 100644
index 0000000..311d283
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb
@@ -0,0 +1,67 @@
+SUMMARY = "GNOME Display Manager"
+LICENSE="GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = " \
+    accountsservice \
+    audit \
+    dconf-native \
+    gtk+3 \
+    keyutils \
+    libcanberra \
+    libgudev \
+    libpam \
+    xserver-xorg \
+"
+
+REQUIRED_DISTRO_FEATURES = "x11 systemd pam polkit gobject-introspection-data"
+GIR_MESON_OPTION = ""
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings pkgconfig gobject-introspection gettext systemd useradd itstool gnome-help features_check
+SRC_URI = "https://download.gnome.org/sources/gdm/${@oe.utils.trim_version("${PV}", 1)}/gdm-${PV}.tar.xz"
+SRC_URI[sha256sum] = "6572578c05e3c6569d6ed269f7de2aaf3a035657654586d8243907bb7a6ffa85"
+
+EXTRA_OEMESON = " \
+    -Dplymouth=disabled \
+    -Ddefault-pam-config=openembedded \
+    -Dpam-mod-dir=${base_libdir}/security \
+"
+
+do_install:prepend() {
+    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-worker-enum-types.c
+    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-worker-enum-types.h
+    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-enum-types.c
+    sed -i -e 's|${B}/||g' ${B}/daemon/gdm-session-enum-types.h
+}
+
+do_install:append() {
+    rm -rf ${D}/run ${D}${localstatedir}/run
+}
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --home ${localstatedir}/lib/gdm --user-group gdm"
+
+SYSTEMD_SERVICE:${PN} = "${BPN}.service"
+
+# Some gnome components - as gnome-panel and gnome-shell (!!) - require gdm
+# components. To allow gnome-images using different display-manager, split them
+# out into a seperate package.
+PACKAGE_BEFORE_PN = "${PN}-base"
+FILES:${PN}-base = " \
+    ${datadir}/glib-2.0 \
+    ${datadir}/gnome-session \
+    ${libdir}/lib*${SOLIBS} \
+    ${libdir}/girepository-1.0 \
+"
+
+CONFFILES:${PN} += "${sysconfdir}/gdm/custom.conf"
+FILES:${PN} += " \
+    ${datadir}/dconf \
+    ${base_libdir}/security/pam_gdm.so \
+    ${localstatedir} \
+    ${systemd_unitdir} ${systemd_user_unitdir} \
+"
+
+RDEPENDS:${PN} += "${PN}-base"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_44.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_44.2.bb
deleted file mode 100644
index 34c7822..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_44.2.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "GNOME editor"
-SECTION = "x11/gnome"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
-    gdk-pixbuf-native \
-    gtk+3 \
-    gsettings-desktop-schemas \
-    libpeas \
-    libsoup \
-    gspell \
-    gtksourceview4 \
-    tepl \
-"
-
-inherit gnomebase gsettings itstool gnome-help gobject-introspection gtk-doc vala gettext features_check mime-xdg python3targetconfig
-
-def gnome_verdir(v):
-    return oe.utils.trim_version(v, 1)
-
-SRC_URI[archive.sha256sum] = "3bbb1b3775d4c277daf54aaab44b0eb83a4eb1f09f0391800041c9e56893ec11"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-GIR_MESON_OPTION = ""
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-PACKAGES += "${PN}-python"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/metainfo \
-"
-
-FILES:${PN}-python += " \
-    ${PYTHON_SITEPACKAGES_DIR} \
-"
-
-RDEPENDS:${PN} += "gsettings-desktop-schemas"
-RRECOMMENDS:${PN} += "source-code-pro-fonts"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb
new file mode 100644
index 0000000..01d7a07
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb
@@ -0,0 +1,53 @@
+SUMMARY = "GNOME editor"
+SECTION = "x11/gnome"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    appstream-glib-native \
+    desktop-file-utils-native \
+    libgedit-amtk \
+    libgedit-gtksourceview \
+    gdk-pixbuf-native \
+    gtk+3 \
+    gsettings-desktop-schemas \
+    libpeas \
+    libsoup \
+    gspell \
+    tepl \
+"
+
+inherit gnomebase gsettings itstool gnome-help gobject-introspection gtk-doc vala gettext features_check mime-xdg gtk-icon-cache python3targetconfig
+
+def gnome_verdir(v):
+    return oe.utils.trim_version(v, 1)
+
+SRC_URI[archive.sha256sum] = "a1a6e37f041765dff7227a1f5578b6f49faaf016b1e17e869caf5bfb94c6aa4e"
+
+# gobject-introspection is mandatory and cannot be configured
+REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+do_install:prepend() {
+    sed -i -e 's|${B}||g' ${B}/plugins/filebrowser/gedit-file-browser-enum-types.c
+}
+
+GIR_MESON_OPTION = ""
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+PACKAGES += "${PN}-python"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/metainfo \
+"
+
+FILES:${PN}-python += " \
+    ${PYTHON_SITEPACKAGES_DIR} \
+"
+
+RDEPENDS:${PN} += "gsettings-desktop-schemas"
+RRECOMMENDS:${PN} += "source-code-pro-fonts"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-amtk_5.8.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-amtk_5.8.0.bb
new file mode 100644
index 0000000..11da836
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-amtk_5.8.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "libgedit-amtk - Actions, Menus and Toolbars Kit for GTK applications"
+SECTION = "gnome"
+LICENSE = "LGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSES/LGPL-3.0-or-later.txt;md5=c51d3eef3be114124d11349ca0d7e117"
+
+DEPENDS = "glib-2.0 gtk+3"
+
+inherit meson pkgconfig gobject-introspection features_check gtk-doc
+
+SRC_URI = "git://github.com/gedit-technology/libgedit-amtk.git;protocol=https;branch=main"
+S = "${WORKDIR}/git"
+SRCREV = "f6fbfd1c57de3d97cab2056a5c3088b0da49e8a4"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+GIR_MESON_OPTION = "gobject_introspection"
+GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-gtksourceview_299.0.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-gtksourceview_299.0.4.bb
new file mode 100644
index 0000000..3a655f6
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/libgedit-gtksourceview_299.0.4.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Gedit Technology - Source code editing widget"
+SECTION = "gnome"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+DEPENDS = "glib-2.0 gtk+3 libxml2"
+
+inherit meson pkgconfig gobject-introspection features_check gtk-doc
+
+SRC_URI = "git://github.com/gedit-technology/libgedit-gtksourceview.git;protocol=https;branch=main"
+S = "${WORKDIR}/git"
+SRCREV = "7062264d635f6efe04d88217a893a97ff385b873"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+GIR_MESON_OPTION = "gobject_introspection"
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+do_install:prepend() {
+    sed -i -e 's|${B}||g' ${B}/gtksourceview/gtksource-enumtypes.c
+    sed -i -e 's|${B}||g' ${B}/gtksourceview/gtksource-enumtypes.h
+}
+
+FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.0.bb
deleted file mode 100644
index fed29da..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.0.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "A GObject-based Exiv2 wrapper"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=625f055f41728f84a8d7938acc35bdc2"
-
-DEPENDS = "exiv2 python3-pygobject-native"
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-inherit gnomebase gobject-introspection gtk-doc python3native
-
-SRC_URI[archive.sha256sum] = "e58279a6ff20b6f64fa499615da5e9b57cf65ba7850b72fafdf17221a9d6d69e"
-
-EXTRA_OEMESON = " \
-    -Dvapi=false \
-    -Dpython3_girdir=${PYTHON_SITEPACKAGES_DIR}/gi/overrides \
-"
-
-PACKAGES =+ "${PN}-python3"
-FILES:${PN}-python3 = "${PYTHON_SITEPACKAGES_DIR}"
-RDEPENDS:${PN}-python3 = "${PN}"
-
-PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess"
-src_package_preprocess () {
-        # Trim build paths from comments in generated sources to ensure reproducibility
-        sed -i -e "s,${B}/../${BPN}-${PV}/${BPN}/,,g" \
-            ${B}/gexiv2/gexiv2-enums.cpp
-}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb
new file mode 100644
index 0000000..15091d4
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A GObject-based Exiv2 wrapper"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=625f055f41728f84a8d7938acc35bdc2"
+
+DEPENDS = "exiv2 python3-pygobject-native"
+
+GNOMEBASEBUILDCLASS = "meson"
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+inherit gnomebase gobject-introspection gtk-doc python3native vala
+
+SRC_URI[archive.sha256sum] = "2a0c9cf48fbe8b3435008866ffd40b8eddb0667d2212b42396fdf688e93ce0be"
+
+EXTRA_OEMESON = " \
+    ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)} \
+"
+
+PACKAGES =+ "${PN}-python3"
+FILES:${PN}-python3 = "${PYTHON_SITEPACKAGES_DIR}"
+RDEPENDS:${PN}-python3 = "${PN}"
+
+PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess"
+src_package_preprocess () {
+        # Trim build paths from comments in generated sources to ensure reproducibility
+        sed -i -e "s,${B}/../${BPN}-${PV}/${BPN}/,,g" \
+            ${B}/gexiv2/gexiv2-enums.cpp
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0001-Support-cross-builds-a-bit-better.patch b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0001-Support-cross-builds-a-bit-better.patch
index c46f85b..8ebc8ba 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0001-Support-cross-builds-a-bit-better.patch
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0001-Support-cross-builds-a-bit-better.patch
@@ -1,4 +1,4 @@
-From fa47185d9c8150a0dcb0ea12b92fcf139edbef35 Mon Sep 17 00:00:00 2001
+From 95cacf345eaec898a47486fc0d33382f303275aa Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
 Date: Wed, 27 Oct 2021 20:18:47 +0200
 Subject: [PATCH] Support cross builds a bit better
@@ -12,15 +12,16 @@
 Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gjs/-/merge_requests/690]
 
 Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
 ---
  meson.build | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/meson.build b/meson.build
-index 136e812..f5b91e0 100644
+index 961660f..86239a4 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -252,6 +252,7 @@ release builds of SpiderMonkey. Try configuring SpiderMonkey with
+@@ -255,6 +255,7 @@ release builds of SpiderMonkey. Try configuring SpiderMonkey with
  --disable-debug.''')
  endif
  
@@ -28,7 +29,7 @@
  # Check if a minimal SpiderMonkey program compiles, links, and runs. If not,
  # it's most likely the case that SpiderMonkey was configured incorrectly, for
  # example by building mozglue as a shared library.
-@@ -282,6 +283,7 @@ elif minimal_program.returncode() != 0
+@@ -285,6 +286,7 @@ elif minimal_program.returncode() != 0
  failed to execute. Most likely you should build it with a different
  configuration.''' + recommended_configuration)
  endif
@@ -36,7 +37,7 @@
  
  have_printf_alternative_int = cc.compiles('''
  #include <stdio.h>
-@@ -682,7 +684,7 @@ subdir('installed-tests')
+@@ -683,7 +685,7 @@ subdir('installed-tests')
  
  # Note: The test program in test/ needs to be ported
  #       to Windows before we can build it on Windows.
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch
index e281717..f05e52c 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs/0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch
@@ -1,7 +1,12 @@
-From 2b8aa1ea4a4d1836164c934b1ab2556a32cb5af7 Mon Sep 17 00:00:00 2001
+From e6889d60891383ce6aa66aa3db30255af58bcf3c Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
 Date: Wed, 27 Oct 2021 20:04:02 +0200
 Subject: [PATCH] meson.build: Do not add dir installed-tests when
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
  installed_tests is false
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
@@ -10,17 +15,18 @@
 Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gjs/-/merge_requests/690]
 
 Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
 ---
  meson.build | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/meson.build b/meson.build
-index f5b91e0..3110530 100644
+index 86239a4..11c04e2 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -680,7 +680,9 @@ if not get_option('skip_gtk_tests')
-     have_gtk4 = dependency('gtk4', required: false).found()
- endif
+@@ -681,7 +681,9 @@ endif
+ 
+ ### Tests and test setups ######################################################
  
 -subdir('installed-tests')
 +if get_option('installed_tests')
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.76.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.76.1.bb
deleted file mode 100644
index 93711bc..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.76.1.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "Javascript bindings for GNOME"
-LICENSE = "MIT & LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8dcea832f6acf45d856abfeb2d51ec48"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = "mozjs-102 cairo"
-
-inherit gnomebase gsettings gobject-introspection vala gettext features_check upstream-version-is-even pkgconfig
-
-SRC_URI[archive.sha256sum] = "7b867c18a9b30333ebbcff9ad3f20299f0372ffad439d49b87d40a1d1798b78d"
-SRC_URI += " \
-    file://0001-Support-cross-builds-a-bit-better.patch \
-    file://0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch \
-"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-EXTRA_OEMESON = " \
-    -Dinstalled_tests=false \
-    -Dskip_dbus_tests=true \
-    -Dskip_gtk_tests=true \
-"
-
-LDFLAGS:append:mipsarch = " -latomic"
-LDFLAGS:append:powerpc = " -latomic"
-LDFLAGS:append:powerpc64 = " -latomic"
-LDFLAGS:append:riscv32 = " -latomic"
-
-FILES:${PN} += "${datadir}/gjs-1.0/lsan"
-
-PACKAGES =+ "${PN}-valgrind"
-FILES:${PN}-valgrind = "${datadir}/gjs-1.0/valgrind"
-RDEPENDS:${PN}-valgrind += "valgrind"
-
-# Valgrind not yet available on rv32/rv64
-RDEPENDS:${PN}-valgrind:remove:riscv32 = "valgrind"
-RDEPENDS:${PN}-valgrind:remove:riscv64 = "valgrind"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb
new file mode 100644
index 0000000..0af9f56
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Javascript bindings for GNOME"
+LICENSE = "MIT & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8dcea832f6acf45d856abfeb2d51ec48"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = "mozjs-115 cairo"
+
+inherit gnomebase gsettings gobject-introspection vala gettext features_check upstream-version-is-even pkgconfig
+
+SRC_URI[archive.sha256sum] = "fbaa20e0917668830800f92951688f9fc08f01296affd5cdb4b35f750be27dc9"
+SRC_URI += " \
+    file://0001-Support-cross-builds-a-bit-better.patch \
+    file://0002-meson.build-Do-not-add-dir-installed-tests-when-inst.patch \
+"
+
+# gobject-introspection is mandatory and cannot be configured
+REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
+GIR_MESON_OPTION = ""
+
+EXTRA_OEMESON = " \
+    -Dinstalled_tests=false \
+    -Dskip_dbus_tests=true \
+    -Dskip_gtk_tests=true \
+"
+
+LDFLAGS:append:mipsarch = " -latomic"
+LDFLAGS:append:powerpc = " -latomic"
+LDFLAGS:append:powerpc64 = " -latomic"
+LDFLAGS:append:riscv32 = " -latomic"
+
+FILES:${PN} += "${datadir}/gjs-1.0/lsan"
+
+PACKAGES =+ "${PN}-valgrind"
+FILES:${PN}-valgrind = "${datadir}/gjs-1.0/valgrind"
+RDEPENDS:${PN}-valgrind += "valgrind"
+
+# Valgrind not yet available on rv32/rv64
+RDEPENDS:${PN}-valgrind:remove:riscv32 = "valgrind"
+RDEPENDS:${PN}-valgrind:remove:riscv64 = "valgrind"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_44.0.bb
deleted file mode 100644
index 53dafba..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_44.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "GNOME calculator"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SECTION = "x11/gnome"
-
-DEPENDS = " \
-    yelp-tools-native \
-    gtk4 \
-    libsoup-3.0 \
-    libgee \
-    libxml2 \
-    libmpc \
-    gtksourceview5 \
-    libadwaita \
-"
-
-GIR_MESON_OPTION = 'disable-introspection'
-GIR_MESON_ENABLE_FLAG = 'false'
-GIR_MESON_DISABLE_FLAG = 'true'
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKIC_VERSION = '4'
-
-inherit gnomebase gobject-introspection gnome-help vala gtk-icon-cache gettext features_check
-
-def gnome_verdir(v):
-    return oe.utils.trim_version(v, 1)
-
-REQUIRED_DISTRO_FEATURES = "x11 opengl"
-
-SRC_URI[archive.sha256sum] = "14e763329f88309a7e152780d57361b543100e323906b34e0655fdc315b71043"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/metainfo \
-    ${datadir}/gnome-shell \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb
new file mode 100644
index 0000000..ed2cb85
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb
@@ -0,0 +1,38 @@
+SUMMARY = "GNOME calculator"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SECTION = "x11/gnome"
+
+DEPENDS = " \
+    yelp-tools-native \
+    gtk4 \
+    libsoup-3.0 \
+    libgee \
+    libxml2 \
+    libmpc \
+    gtksourceview5 \
+    libadwaita \
+"
+
+GIR_MESON_OPTION = 'disable-introspection'
+GIR_MESON_ENABLE_FLAG = 'false'
+GIR_MESON_DISABLE_FLAG = 'true'
+
+GNOMEBASEBUILDCLASS = "meson"
+GTKIC_VERSION = '4'
+
+inherit gnomebase gobject-introspection gnome-help vala gtk-icon-cache gettext features_check
+
+def gnome_verdir(v):
+    return oe.utils.trim_version(v, 1)
+
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+SRC_URI[archive.sha256sum] = "e58df0b5646111baf93ec5309b225d27b7c7f45deeee484af7914331b8cd2822"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/metainfo \
+    ${datadir}/gnome-shell \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_44.0.bb
deleted file mode 100644
index dcf5ba7..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_44.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "GNOME calendar"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
-
-SECTION = "x11/gnome"
-
-DEPENDS = " \
-    gtk4 \
-    libical \
-    gsettings-desktop-schemas \
-    evolution-data-server \
-    libsoup \
-    libdazzle \
-    libadwaita \
-    libgweather4 \
-    geoclue \
-    geocode-glib \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gtk-icon-cache gettext features_check upstream-version-is-even mime-xdg
-
-REQUIRED_DISTRO_FEATURES = "x11 opengl"
-
-SRC_URI[archive.sha256sum] = "96acd74cbf45652934515cc3447a3b895e933f86324ca92436f67ddd63c3a802"
-
-FILES:${PN} += " \
-    ${datadir}/gnome-shell \
-    ${datadir}/metainfo \
-    ${datadir}/dbus-1 \
-"
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb
new file mode 100644
index 0000000..a8b8123
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb
@@ -0,0 +1,38 @@
+SUMMARY = "GNOME calendar"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+SECTION = "x11/gnome"
+
+DEPENDS = " \
+    gtk4 \
+    libical \
+    gsettings-desktop-schemas \
+    evolution-data-server \
+    libsoup \
+    libdazzle \
+    libadwaita \
+    libgweather4 \
+    geoclue \
+    geocode-glib \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+GTKIC_VERSION = '4'
+inherit gnomebase gsettings gtk-icon-cache gettext features_check upstream-version-is-even mime-xdg
+
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+SRC_URI[archive.sha256sum] = "8c1483cbba4388db410875ed09d64e9003f929b555d704076a6fe7bd7c1e65b2"
+
+do_install:prepend() {
+    sed -i -e 's|${S}/src|/usr/src/debug/${PN}/${PV}-${PR}/src|g' ${B}/src/gcal-enum-types.h
+    sed -i -e 's|${S}/src|/usr/src/debug/${PN}/${PV}-${PR}/src|g' ${B}/src/gcal-enum-types.c
+}
+
+FILES:${PN} += " \
+    ${datadir}/gnome-shell \
+    ${datadir}/metainfo \
+    ${datadir}/dbus-1 \
+"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center/0001-Add-meson-option-to-pass-sysroot.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center/0001-Add-meson-option-to-pass-sysroot.patch
index 5c0eee5..7cd7c04 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center/0001-Add-meson-option-to-pass-sysroot.patch
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center/0001-Add-meson-option-to-pass-sysroot.patch
@@ -19,7 +19,7 @@
  2 files changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/meson_options.txt b/meson_options.txt
-index dbca723..af0f871 100644
+index 8ee7b6e0e..7e6adc668 100644
 --- a/meson_options.txt
 +++ b/meson_options.txt
 @@ -1,3 +1,4 @@
@@ -28,28 +28,28 @@
  option('ibus', type: 'boolean', value: true, description: 'build with IBus support')
  option('privileged_group', type: 'string', value: 'wheel', description: 'name of group that has elevated permissions')
 diff --git a/panels/background/meson.build b/panels/background/meson.build
-index 69af0cfea..6edcaa5ff 100644
+index 9bf543538..97f1e0117 100644
 --- a/panels/background/meson.build
 +++ b/panels/background/meson.build
 @@ -19,7 +19,7 @@ common_sources = []
  
  enums = 'gdesktop-enums-types'
  enums_header = files(
--  gsettings_desktop_dep.get_pkgconfig_variable('prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
-+  get_option('oe_sysroot') + gsettings_desktop_dep.get_pkgconfig_variable('prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
+-  gsettings_desktop_dep.get_variable(pkgconfig: 'prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
++  get_option('oe_sysroot') + gsettings_desktop_dep.get_variable(pkgconfig: 'prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
    'cc-background-item.h'
  )
  
 diff --git a/panels/datetime/meson.build b/panels/datetime/meson.build
-index 3b6f5e197..30b207882 100644
+index 8cb3b63f0..8c5a45e7c 100644
 --- a/panels/datetime/meson.build
 +++ b/panels/datetime/meson.build
-@@ -45,7 +45,7 @@ sources = files(
+@@ -37,7 +37,7 @@ sources = files(
  
  enums = 'gdesktop-enums-types'
  enums_header = files(
--  gsettings_desktop_dep.get_pkgconfig_variable('prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
-+  get_option('oe_sysroot') + gsettings_desktop_dep.get_pkgconfig_variable('prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
+-  gsettings_desktop_dep.get_variable(pkgconfig: 'prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
++  get_option('oe_sysroot') + gsettings_desktop_dep.get_variable(pkgconfig: 'prefix') + '/include/gsettings-desktop-schemas/gdesktop-enums.h',
    'cc-datetime-panel.h'
  )
  
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_44.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_44.3.bb
deleted file mode 100644
index 0066f58..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_44.3.bb
+++ /dev/null
@@ -1,69 +0,0 @@
-SUMMARY = "GNOME Settings"
-DESCRIPTION = "GNOME Settings is GNOME's main interface for configuration of various aspects of your desktop"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKIC_VERSION = "4"
-
-DEPENDS = " \
-    accountsservice \
-    colord-gtk \
-    gcr3 \
-    gdk-pixbuf \
-    glib-2.0 \
-    gnome-bluetooth \
-    gnome-desktop \
-    gnome-online-accounts \
-    gnome-settings-daemon \
-    gsettings-desktop-schemas \
-    gtk4 \
-    libadwaita \
-    libepoxy \
-    libgtop \
-    libgudev \
-    libnma \
-    libpwquality \
-    libxml2 \
-    polkit \
-    pulseaudio \
-    samba \
-    udisks2 \
-    upower \
-"
-
-inherit gtk-icon-cache pkgconfig gnomebase gsettings gettext upstream-version-is-even bash-completion features_check useradd
-
-REQUIRED_DISTRO_FEATURES += "opengl polkit pulseaudio systemd x11"
-
-SRC_URI += "file://0001-Add-meson-option-to-pass-sysroot.patch"
-SRC_URI[archive.sha256sum] = "066a65052fc3ecfae860025e85f797e6ab2b87a58c4f8ab9c66ec20718a80c7a"
-
-PACKAGECONFIG ??= "ibus ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
-PACKAGECONFIG[cups] = ",,cups,cups"
-PACKAGECONFIG[ibus] = "-Dibus=true, -Dibus=false, ibus"
-PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false, wayland"
-
-EXTRA_OEMESON = " \
-    -Doe_sysroot=${STAGING_DIR_HOST} \
-"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd"
-
-do_install:append() {
-    if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
-        chmod 700 ${D}${datadir}/polkit-1/rules.d
-        chown polkitd:root ${D}${datadir}/polkit-1/rules.d
-    fi
-}
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/gnome-shell \
-    ${datadir}/metainfo \
-"
-
-FILES:${PN}-dev += "${datadir}/gettext"
-
-RDEPENDS:${PN} += "gsettings-desktop-schemas"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb
new file mode 100644
index 0000000..1122ee5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb
@@ -0,0 +1,69 @@
+SUMMARY = "GNOME Settings"
+DESCRIPTION = "GNOME Settings is GNOME's main interface for configuration of various aspects of your desktop"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
+
+GNOMEBASEBUILDCLASS = "meson"
+GTKIC_VERSION = "4"
+
+DEPENDS = " \
+    accountsservice \
+    colord-gtk \
+    gcr3 \
+    gdk-pixbuf \
+    glib-2.0 \
+    gnome-bluetooth \
+    gnome-desktop \
+    gnome-online-accounts \
+    gnome-settings-daemon \
+    gsettings-desktop-schemas \
+    gtk4 \
+    libadwaita \
+    libepoxy \
+    libgtop \
+    libgudev \
+    libnma \
+    libpwquality \
+    libxml2 \
+    polkit \
+    pulseaudio \
+    samba \
+    setxkbmap-native \
+    tecla \
+    udisks2 \
+    upower \
+"
+
+inherit gtk-icon-cache pkgconfig gnomebase gsettings gettext upstream-version-is-even bash-completion features_check useradd
+
+REQUIRED_DISTRO_FEATURES += "opengl polkit pulseaudio systemd x11"
+
+SRC_URI += "file://0001-Add-meson-option-to-pass-sysroot.patch"
+SRC_URI[archive.sha256sum] = "83df6a90f98914f2c19a872ce06562acef40927637f679c383099265ccfa42cf"
+
+PACKAGECONFIG ??= "ibus ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
+PACKAGECONFIG[cups] = ",,cups,cups"
+PACKAGECONFIG[ibus] = "-Dibus=true, -Dibus=false, ibus"
+PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false, wayland"
+
+EXTRA_OEMESON += "-Doe_sysroot=${STAGING_DIR_HOST}"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd"
+
+do_install:append() {
+    if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
+        chmod 700 ${D}${datadir}/polkit-1/rules.d
+        chown polkitd:root ${D}${datadir}/polkit-1/rules.d
+    fi
+}
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/gnome-shell \
+    ${datadir}/metainfo \
+"
+
+FILES:${PN}-dev += "${datadir}/gettext"
+
+RDEPENDS:${PN} += "gsettings-desktop-schemas tecla"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_44.0.bb
deleted file mode 100644
index 3f642f4..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_44.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "GNOME session"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = " \
-    glib-2.0-native \
-    libxslt-native \
-    xmlto-native \
-    xtrans \
-    libice \
-    libsm \
-    virtual/libx11 \
-    gtk+3 \
-    gnome-desktop \
-    gsettings-desktop-schemas \
-    json-glib \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gettext gsettings upstream-version-is-even features_check
-
-REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam gobject-introspection-data"
-
-SRC_URI[archive.sha256sum] = "ccf829a96526135e9e9f917526515d36a5092bdfa316f3737dd8c5a524dbf2c6"
-
-PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'consolekit',d)}"
-
-PACKAGECONFIG[consolekit] = "-Dconsolekit=true, -Dconsolekit=false, dbus-glib"
-PACKAGECONFIG[systemd] = "-Dsystemd=true -Dsystemd_journal=true, -Dsystemd=false -Dsystemd_journal=false, systemd"
-
-FILES:${PN} += " \
-    ${datadir}/xsessions \
-    ${datadir}/wayland-sessions \
-    ${systemd_user_unitdir} \
-"
-
-RDEPENDS:${PN} += "gnome-shell gnome-settings-daemon gsettings-desktop-schemas"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb
new file mode 100644
index 0000000..ec5b47b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "GNOME session"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = " \
+    glib-2.0-native \
+    libxslt-native \
+    xmlto-native \
+    xtrans \
+    libice \
+    libsm \
+    virtual/libx11 \
+    gtk+3 \
+    gnome-desktop \
+    gsettings-desktop-schemas \
+    json-glib \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gettext gsettings upstream-version-is-even features_check
+
+REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam gobject-introspection-data"
+
+SRC_URI[archive.sha256sum] = "706d2ffcacac38553a3c0185793f5a2b4aac940bb5e789d953c9808163bef2f1"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'consolekit',d)}"
+
+PACKAGECONFIG[consolekit] = "-Dconsolekit=true, -Dconsolekit=false, dbus-glib"
+PACKAGECONFIG[systemd] = "-Dsystemd=true -Dsystemd_journal=true, -Dsystemd=false -Dsystemd_journal=false, systemd"
+
+FILES:${PN} += " \
+   ${datadir}/xdg-desktop-portal \
+    ${datadir}/xsessions \
+    ${datadir}/wayland-sessions \
+    ${systemd_user_unitdir} \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_44.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_44.1.bb
deleted file mode 100644
index 104f4a6..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_44.1.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Window navigation construction toolkit"
-LICENSE = "LGPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gobject-introspection gettext features_check upstream-version-is-even
-
-DEPENDS = " \
-    colord \
-    geocode-glib \
-    gcr \
-    gnome-desktop \
-    libgweather4 \
-    lcms \
-    libcanberra \
-    geoclue \
-    libnotify \
-    upower \
-    libwacom \
-    virtual/libx11 \
-"
-
-# all these are mandatory
-REQUIRED_DISTRO_FEATURES = "x11 polkit pulseaudio systemd gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-SRC_URI[archive.sha256sum] = "12653b72d81f151300a47d700ac9410ac1bcce38e83f1bdd19cded2932943989"
-
-PACKAGECONFIG ??= " \
-    cups nm \
-    alsa gudev \
-    smartcard \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
-"
-PACKAGECONFIG[alsa] = "-Dalsa=true,-Dalsa=false,alsa-lib"
-PACKAGECONFIG[cups] = "-Dcups=true,-Dcups=false,cups"
-PACKAGECONFIG[gudev] = "-Dgudev=true,-Dgudev=false,libgudev"
-PACKAGECONFIG[nm] = "-Dnetwork_manager=true,-Dnetwork_manager=false,networkmanager"
-PACKAGECONFIG[smartcard] = "-Dsmartcard=true,-Dsmartcard=false,nss"
-PACKAGECONFIG[wayland] = "-Dwayland=true,-Dwayland=false,wayland"
-
-FILES:${PN} += " \
-    ${systemd_user_unitdir} \
-    /usr/lib/gnome-settings-daemon-44/libgsd.so \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb
new file mode 100644
index 0000000..16b7f23
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Window navigation construction toolkit"
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings gobject-introspection gettext features_check upstream-version-is-even
+
+DEPENDS = " \
+    colord \
+    geocode-glib \
+    gcr \
+    gnome-desktop \
+    libgweather4 \
+    lcms \
+    libcanberra \
+    geoclue \
+    libnotify \
+    upower \
+    libwacom \
+    virtual/libx11 \
+"
+
+# all these are mandatory
+REQUIRED_DISTRO_FEATURES = "x11 polkit pulseaudio systemd gobject-introspection-data"
+GIR_MESON_OPTION = ""
+
+SRC_URI[archive.sha256sum] = "bb4dc46950e2a90f38f23225848856d2a7b1b718c89d0285ce197b7016bb1dc8"
+
+PACKAGECONFIG ??= " \
+    cups nm \
+    alsa gudev \
+    smartcard \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
+"
+PACKAGECONFIG[alsa] = "-Dalsa=true,-Dalsa=false,alsa-lib"
+PACKAGECONFIG[cups] = "-Dcups=true,-Dcups=false,cups"
+PACKAGECONFIG[gudev] = "-Dgudev=true,-Dgudev=false,libgudev"
+PACKAGECONFIG[nm] = "-Dnetwork_manager=true,-Dnetwork_manager=false,networkmanager"
+PACKAGECONFIG[smartcard] = "-Dsmartcard=true,-Dsmartcard=false,nss"
+PACKAGECONFIG[wayland] = "-Dwayland=true,-Dwayland=false,wayland"
+
+def gnome_verdir(v):
+   return oe.utils.trim_version(v, 1)
+
+FILES:${PN} += " \
+    ${systemd_user_unitdir} \
+    ${libdir}/gnome-settings-daemon-${@gnome_verdir("${PV}")}/libgsd.so \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell/0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell/0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch
index b583199..e8c7e79 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell/0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell/0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch
@@ -1,4 +1,4 @@
-From 9f11c9e53d91b23113202b40500540242bcabdb0 Mon Sep 17 00:00:00 2001
+From b2710a880b366201f07752e87d35bb52ea69cbbe Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
 Date: Thu, 28 Oct 2021 18:57:24 +0200
 Subject: [PATCH] Introduce options 'gjs_path' to optionally set path to gjs
@@ -11,6 +11,11 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
 Upstream-Status: Pending
 
 Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
@@ -38,10 +43,10 @@
  
    configure_file(
 diff --git a/meson.build b/meson.build
-index 252fb1e..250f722 100644
+index 70ba711..f0ab158 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -125,7 +125,11 @@ endif
+@@ -135,7 +135,11 @@ endif
  
  mutter_typelibdir = mutter_dep.get_variable('typelibdir')
  python = find_program('python3')
@@ -55,12 +60,12 @@
  cc = meson.get_compiler('c')
  
 diff --git a/meson_options.txt b/meson_options.txt
-index 46ca8e7..3e9a31f 100644
+index 6e83d92..1bf0ecb 100644
 --- a/meson_options.txt
 +++ b/meson_options.txt
-@@ -45,3 +45,9 @@ option('soup2',
-   value: false,
-   description: 'Use Soup 2.4 instead of Soup 3. Must be in sync with libgweather'
+@@ -45,3 +45,9 @@ option('systemd',
+   value: true,
+   description: 'Enable systemd integration'
  )
 +
 +option('gjs_path',
@@ -69,7 +74,7 @@
 +  description: 'Instead of searching gjs executable, configure path'
 +)
 diff --git a/subprojects/extensions-app/js/meson.build b/subprojects/extensions-app/js/meson.build
-index ce2a776..8f7bba4 100644
+index c9a67f8..91ae887 100644
 --- a/subprojects/extensions-app/js/meson.build
 +++ b/subprojects/extensions-app/js/meson.build
 @@ -9,7 +9,7 @@ endif
@@ -82,7 +87,7 @@
  configure_file(
    input: prgname + '.in',
 diff --git a/subprojects/extensions-app/meson.build b/subprojects/extensions-app/meson.build
-index 66a39e9..331dc1d 100644
+index 6c9639e..3fe1ce0 100644
 --- a/subprojects/extensions-app/meson.build
 +++ b/subprojects/extensions-app/meson.build
 @@ -46,7 +46,12 @@ localedir = join_paths(datadir, 'locale')
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_44.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_44.3.bb
deleted file mode 100644
index e1aa051..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_44.3.bb
+++ /dev/null
@@ -1,87 +0,0 @@
-SUMMARY = "GNOME Shell is the graphical shell of the GNOME desktop environment"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
-    libxml2-native \
-    gtk4 \
-    mutter \
-    evolution-data-server \
-    gcr \
-    geocode-glib \
-    gjs \
-    gnome-autoar \
-    polkit \
-    libcroco \
-    libsoup-3.0 \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', 'startup-notification', d)} \
-    ibus \
-    gsettings-desktop-schemas \
-"
-
-inherit gnomebase gsettings gettext gobject-introspection gtk-icon-cache features_check bash-completion
-
-REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
-
-GTKIC_VERSION = "4"
-GTKDOC_MESON_OPTION = "gtk_doc"
-GIR_MESON_OPTION = ""
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
-
-SRC_URI[archive.sha256sum] = "55694b71c2ee4eaef60d93428003f2eaa4cf00186848f5e36b45cfe506fc31bf"
-SRC_URI += "file://0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch"
-
-PACKAGECONFIG ??= "bluetooth nm ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[bluetooth] = ",,gnome-bluetooth"
-PACKAGECONFIG[nm] = "-Dnetworkmanager=true, -Dnetworkmanager=false,networkmanager,networkmanager"
-PACKAGECONFIG[systemd] = "-Dsystemd=true, -Dsystemd=false, systemd"
-
-EXTRA_OEMESON = " \
-    -Dgjs_path=${bindir}/gjs \
-    -Dextensions-app:gjs_path=${bindir}/gjs \
-    -Dtests=false \
-    -Dman=false \
-    -Dsoup2=false \
-"
-
-do_install:append() {
-    # fix shebangs
-    for tool in `find ${D}${bindir} -name '*-tool'`; do
-        sed -i 's:#!${PYTHON}:#!${bindir}/${PYTHON_PN}:' $tool
-    done
-}
-
-GSETTINGS_PACKAGE = "${PN}-gsettings"
-
-FILES:${PN} += " \
-    ${datadir}/metainfo \
-    ${datadir}/dbus-1 \
-    ${datadir}/gnome-control-center \
-    ${datadir}/xdg-desktop-portal \
-    ${systemd_user_unitdir} \
-"
-
-RDEPENDS:${PN} += " \
-	accountsservice \
-	adwaita-icon-theme \
-	adwaita-icon-theme-cursors \
-	gdm-base \
-	gnome-control-center \
-	gnome-backgrounds \
-	gnome-bluetooth \
-	gnome-desktop \
-	gnome-session \
-	gnome-settings-daemon \
-	gnome-shell-gsettings \
-	gsettings-desktop-schemas \
-	librsvg-gtk \
-"
-
-PACKAGES =+ "${PN}-tools ${PN}-gsettings"
-FILES:${PN}-tools = "${bindir}/*-tool"
-RDEPENDS:${PN}-tools = "python3-core"
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb
new file mode 100644
index 0000000..66c05a1
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb
@@ -0,0 +1,86 @@
+SUMMARY = "GNOME Shell is the graphical shell of the GNOME desktop environment"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    libxml2-native \
+    gtk4 \
+    mutter \
+    evolution-data-server \
+    gcr \
+    geocode-glib \
+    gjs \
+    gnome-autoar \
+    polkit \
+    libcroco \
+    libsoup-3.0 \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', 'startup-notification', d)} \
+    ibus \
+    gsettings-desktop-schemas \
+"
+
+inherit gnomebase gsettings gettext gobject-introspection gtk-icon-cache features_check bash-completion
+
+REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
+
+GTKIC_VERSION = "4"
+GTKDOC_MESON_OPTION = "gtk_doc"
+GIR_MESON_OPTION = ""
+
+# gobject-introspection is mandatory and cannot be configured
+REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
+
+SRC_URI[archive.sha256sum] = "3cabe40bdd4e379c7082b39ffa45b8bef5c9cf86408fb0d836e1571c443217cd"
+SRC_URI += "file://0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch"
+
+PACKAGECONFIG ??= "bluetooth nm ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[bluetooth] = ",,gnome-bluetooth"
+PACKAGECONFIG[nm] = "-Dnetworkmanager=true, -Dnetworkmanager=false,networkmanager,networkmanager"
+PACKAGECONFIG[systemd] = "-Dsystemd=true, -Dsystemd=false, systemd"
+
+EXTRA_OEMESON = " \
+    -Dgjs_path=${bindir}/gjs \
+    -Dextensions-app:gjs_path=${bindir}/gjs \
+    -Dtests=false \
+    -Dman=false \
+"
+
+do_install:append() {
+    # fix shebangs
+    for tool in `find ${D}${bindir} -name '*-tool'`; do
+        sed -i 's:#!${PYTHON}:#!${bindir}/${PYTHON_PN}:' $tool
+    done
+}
+
+GSETTINGS_PACKAGE = "${PN}-gsettings"
+
+FILES:${PN} += " \
+    ${datadir}/metainfo \
+    ${datadir}/dbus-1 \
+    ${datadir}/gnome-control-center \
+    ${datadir}/xdg-desktop-portal \
+    ${systemd_user_unitdir} \
+"
+
+RDEPENDS:${PN} += " \
+	accountsservice \
+	adwaita-icon-theme \
+	adwaita-icon-theme-cursors \
+	gdm-base \
+	gnome-control-center \
+	gnome-backgrounds \
+	gnome-bluetooth \
+	gnome-desktop \
+	gnome-session \
+	gnome-settings-daemon \
+	gnome-shell-gsettings \
+	gsettings-desktop-schemas \
+	librsvg-gtk \
+"
+
+PACKAGES =+ "${PN}-tools ${PN}-gsettings"
+FILES:${PN}-tools = "${bindir}/*-tool"
+RDEPENDS:${PN}-tools = "python3-core"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_44.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_44.4.bb
deleted file mode 100644
index ac35716..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_44.4.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "GNOME Software allows users to easily find, discover and install apps."
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-GNOMEBASEBUILDCLASS = "meson"
-GTKDOC_MESON_OPTION ?= "gtk_doc"
-
-inherit gnomebase gsettings itstool gnome-help gtk-icon-cache gtk-doc mime mime-xdg gettext upstream-version-is-even features_check
-
-REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
-
-DEPENDS += " \
-	appstream \
-	gdk-pixbuf \
-	glib-2.0 \
-	glib-2.0-native \
-	gsettings-desktop-schemas \
-	gtk4 \
-	iso-codes \
-	json-glib \
-	libadwaita \
-	libgudev \
-	libsoup-3.0 \
-	libxmlb-native \
-	polkit \
-"
-
-RDEPENDS:${PN} = "iso-codes"
-
-EXTRA_OEMESON += "-Dtests=false -Dsoup2=false"
-
-SRC_URI[archive.sha256sum] = "8b53767ef6cc54a2db588ef1c5926838b0d67b8d9b21173de5139cd0fbd28095"
-
-PACKAGECONFIG ?= "flatpak"
-PACKAGECONFIG[flatpak] = "-Dflatpak=true,-Dflatpak=false,flatpak ostree"
-PACKAGECONFIG[snap] = "-Dsnap=true,-Dsnap=false,snapd-glib"
-PACKAGECONFIG[gtk_doc] = "-Dgtk_doc=true,-Dgtk_doc=false,libxslt-native docbook-xsl-stylesheets"
-PACKAGECONFIG[man] = "-Dman=true,-Dman=false,libxslt-native docbook-xsl-stylesheets"
-PACKAGECONFIG[packagekit] = "-Dpackagekit=true,-Dpackagekit=false,gnome-packagekit,gnome-packagekit"
-PACKAGECONFIG[fwupd] = "-Dfwupd=true,-Dfwupd=false,fwupd,fwupd"
-PACKAGECONFIG[malcontent] = "-Dmalcontent=true,-Dmalcontent=false,malcontent"
-
-FILES:${PN} += "${datadir}"
-FILES:${PN}-dev += "${libdir}/gnome-software/libgnomesoftware.so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb
new file mode 100644
index 0000000..89a6f05
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb
@@ -0,0 +1,44 @@
+SUMMARY = "GNOME Software allows users to easily find, discover and install apps."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+GNOMEBASEBUILDCLASS = "meson"
+GTKDOC_MESON_OPTION ?= "gtk_doc"
+
+inherit gnomebase gsettings itstool gnome-help gtk-icon-cache gtk-doc mime mime-xdg gettext upstream-version-is-even features_check
+
+REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
+
+DEPENDS += " \
+	appstream \
+	gdk-pixbuf \
+	glib-2.0 \
+	glib-2.0-native \
+	gsettings-desktop-schemas \
+	gtk4 \
+	iso-codes \
+	json-glib \
+	libadwaita \
+	libgudev \
+	libsoup-3.0 \
+	libxmlb-native \
+	polkit \
+"
+
+RDEPENDS:${PN} = "iso-codes"
+
+EXTRA_OEMESON += "-Dtests=false -Dsoup2=false"
+
+SRC_URI[archive.sha256sum] = "61f42c2fd4d19b894a2484f691369032dc8b2a32a014ce6ca4d02c4fa4f75a14"
+
+PACKAGECONFIG ?= "flatpak"
+PACKAGECONFIG[flatpak] = "-Dflatpak=true,-Dflatpak=false,flatpak ostree"
+PACKAGECONFIG[snap] = "-Dsnap=true,-Dsnap=false,snapd-glib"
+PACKAGECONFIG[gtk_doc] = "-Dgtk_doc=true,-Dgtk_doc=false,libxslt-native docbook-xsl-stylesheets"
+PACKAGECONFIG[man] = "-Dman=true,-Dman=false,libxslt-native docbook-xsl-stylesheets"
+PACKAGECONFIG[packagekit] = "-Dpackagekit=true,-Dpackagekit=false,gnome-packagekit,gnome-packagekit"
+PACKAGECONFIG[fwupd] = "-Dfwupd=true,-Dfwupd=false,fwupd,fwupd"
+PACKAGECONFIG[malcontent] = "-Dmalcontent=true,-Dmalcontent=false,malcontent"
+
+FILES:${PN} += "${datadir}"
+FILES:${PN}-dev += "${libdir}/gnome-software/libgnomesoftware.so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_44.0.bb
deleted file mode 100644
index dfbfd78..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_44.0.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "Gnome system monitor"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-
-DEPENDS = " \
-    gnome-common-native \
-    libxml2-native \
-    glib-2.0-native \
-    gtkmm3 \
-    libgtop \
-    librsvg \
-    polkit \
-    libhandy \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gnome-help itstool gtk-icon-cache features_check gettext
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-def gnome_verdir(v):
-    return oe.utils.trim_version(v, 1)
-
-SRC_URI[archive.sha256sum] = "c2bab7eddba92827c4c8de44293e7e3c84c9e5076f31985887ff8969cec45e6e"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = "-Dsystemd=true, -Dsystemd=false, systemd"
-
-RRECOMMENDS:${PN} = "adwaita-icon-theme"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/metainfo \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb
new file mode 100644
index 0000000..c8130d2
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Gnome system monitor"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = " \
+    gnome-common-native \
+    libxml2-native \
+    glib-2.0-native \
+    gtkmm3 \
+    libgtop \
+    librsvg \
+    polkit \
+    libhandy \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings gnome-help itstool gtk-icon-cache features_check gettext
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+def gnome_verdir(v):
+    return oe.utils.trim_version(v, 1)
+
+SRC_URI[archive.sha256sum] = "43f6b7805c74532490edb8822ebdf8b3cf2c5ef842a51252a14c34715f5d49b4"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "-Dsystemd=true, -Dsystemd=false, systemd"
+
+RRECOMMENDS:${PN} = "adwaita-icon-theme"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/metainfo \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_44.0.bb
deleted file mode 100644
index 40bcd27..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_44.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "A simple text editor"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
-    desktop-file-utils-native \
-    libadwaita \
-    gtk4 \
-    gtksourceview5 \
-    editorconfig-core-c \
-    enchant2 \
-"
-
-GTKIC_VERSION = "4"
-
-inherit gnomebase gtk-icon-cache itstool gnome-help mime-xdg features_check
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-SRC_URI[archive.sha256sum] = "f67bc3780734ffa815fcc4c5daa7b555d24e459f81ea2b548e6a85c1612a31ca"
-
-FILES:${PN} += " \
-    ${datadir}/metainfo \
-    ${datadir}/dbus-1 \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb
new file mode 100644
index 0000000..52bb92e
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A simple text editor"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    desktop-file-utils-native \
+    libadwaita \
+    gtk4 \
+    gtksourceview5 \
+    editorconfig-core-c \
+    enchant2 \
+"
+
+GTKIC_VERSION = "4"
+
+inherit gnomebase gtk-icon-cache itstool gnome-help mime-xdg features_check
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+SRC_URI[archive.sha256sum] = "47b3fbe4900eb204413d9af3ae8e0ecd06728d2ac15d02b1a050d02d47226bc1"
+
+FILES:${PN} += " \
+    ${datadir}/metainfo \
+    ${datadir}/dbus-1 \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks/0002-meson-fix-invalid-positional-argument.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks/0002-meson-fix-invalid-positional-argument.patch
index bd7e76f..d921ff3 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks/0002-meson-fix-invalid-positional-argument.patch
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks/0002-meson-fix-invalid-positional-argument.patch
@@ -3,7 +3,7 @@
 Date: Wed, 16 Feb 2022 06:08:41 +0000
 Subject: [PATCH] meson: fix invalid positional argument
 
-Upstream-Status: Accepted [https://gitlab.gnome.org/GNOME/gnome-tweaks/-/commit/dc9701e18775c01d0b69fabaa350147f70096da8]
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gnome-tweaks/-/commit/dc9701e18775c01d0b69fabaa350147f70096da8]
 ---
  data/meson.build | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.51.90.bb b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.51.90.bb
deleted file mode 100644
index 2d1048e..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.51.90.bb
+++ /dev/null
@@ -1,97 +0,0 @@
-DESCRIPTION = "gvfs is a userspace virtual filesystem"
-LICENSE = "LGPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=05df38dd77c35ec8431f212410a3329e"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase gsettings bash-completion gettext upstream-version-is-even features_check useradd
-
-DEPENDS += "\
-    dbus \
-    glib-2.0 \
-    glib-2.0-native \
-    gsettings-desktop-schemas \
-    libgudev \
-    libsecret \
-    libxml2 \
-    shadow-native \
-"
-
-RDEPENDS:${PN} += "gsettings-desktop-schemas"
-
-SRC_URI = "https://download.gnome.org/sources/${BPN}/${@gnome_verdir("${PV}")}/${BPN}-${PV}.tar.xz;name=archive"
-
-SRC_URI[archive.sha256sum] = "c05aaa7cf463540fb8c9097cf9b77d92f2c8e0de1dcd643afb14c1284f823bdd"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-EXTRA_OEMESON = " \
-    -Dbluray=false \
-"
-
-PACKAGES =+ "gvfsd-ftp gvfsd-sftp gvfsd-trash"
-
-FILES:${PN} += " \
-    ${datadir}/glib-2.0 \
-    ${datadir}/GConf \
-    ${datadir}/dbus-1/services \
-    ${libdir}/gio/modules/*.so \
-    ${libdir}/tmpfiles.d \
-    ${systemd_user_unitdir} \
-"
-
-FILES:${PN}-dbg += "${libdir}/gio/modules/.debug/*"
-FILES:${PN}-dev += "${libdir}/gio/modules/*.la"
-
-FILES:gvfsd-ftp = "${libexecdir}/gvfsd-ftp ${datadir}/gvfs/mounts/ftp.mount"
-FILES:gvfsd-sftp = "${libexecdir}/gvfsd-sftp ${datadir}/gvfs/mounts/sftp.mount"
-FILES:gvfsd-trash = "${libexecdir}/gvfsd-trash ${datadir}/gvfs/mounts/trash.mount"
-
-RRECOMMENDS:gvfsd-ftp += "openssh-sftp openssh-ssh"
-
-PACKAGECONFIG ?= "libgphoto2 \
-                  ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-                  ${@bb.utils.contains('DISTRO_FEATURES','polkit','udisks2','',d)} \
-                  ${@bb.utils.contains('DISTRO_FEATURES','polkit','admin','',d)} \
-                 "
-
-PACKAGECONFIG[udisks2] = "-Dudisks2=true, -Dudisks2=false, udisks2, udisks2"
-PACKAGECONFIG[admin] = "-Dadmin=true, -Dadmin=false, libcap polkit"
-PACKAGECONFIG[afc] = "-Dafc=true, -Dafc=false, libimobiledevice libplist"
-PACKAGECONFIG[archive] = "-Darchive=true, -Darchive=false, libarchive"
-PACKAGECONFIG[dnssd] = "-Ddnssd=true, -Ddnssd=false, avahi"
-PACKAGECONFIG[gcr] = "-Dgcr=true, -Dgcr=false, gcr3, gnome-keyring"
-PACKAGECONFIG[gcrypt] = "-Dgcrypt=true, -Dgcrypt=false, libgcrypt"
-PACKAGECONFIG[goa] = "-Dgoa=true, -Dgoa=false, gnome-online-accounts"
-PACKAGECONFIG[google] = "-Dgoogle=true, -Dgoogle=false, libgdata"
-PACKAGECONFIG[http] = "-Dhttp=true, -Dhttp=false, libsoup-3.0"
-PACKAGECONFIG[libmtp] = "-Dmtp=true, -Dmtp=false, libmtp"
-PACKAGECONFIG[logind] = "-Dlogind=true, -Dlogind=false, systemd"
-PACKAGECONFIG[libgphoto2] = "-Dgphoto2=true, -Dgphoto2=false, libgphoto2"
-PACKAGECONFIG[nfs] = "-Dnfs=true, -Dnfs=false,libnfs"
-PACKAGECONFIG[samba] = "-Dsmb=true, -Dsmb=false, samba"
-PACKAGECONFIG[systemd] = "-Dsystemduserunitdir=${systemd_user_unitdir} -Dtmpfilesdir=${libdir}/tmpfiles.d, -Dsystemduserunitdir=no -Dtmpfilesdir=no, systemd"
-
-# needs meta-filesystems
-PACKAGECONFIG[fuse] = "-Dfuse=true, -Dfuse=false, fuse3"
-
-# libcdio-paranoia recipe doesn't exist yet
-PACKAGECONFIG[cdda] = "-Dcdda=true, -Dcdda=false, libcdio-paranoia"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd"
-
-do_install:append() {
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'polkit', 'true', 'false', d)}; then
-        # Fix up permissions on polkit rules.d to work with rpm4 constraints
-        chmod 700 ${D}${datadir}/polkit-1/rules.d
-        chown polkitd:root ${D}${datadir}/polkit-1/rules.d
-    fi
-
-    # After rebuilds (not from scracth) it can happen that the executables in
-    # libexec ar missing executable permission flag. Not sure but it came up
-    # during transition to meson. Looked into build files and logs but could
-    # not find suspicious
-    for exe in `find ${D}/${libexecdir}`; do
-       chmod +x $exe
-    done
-}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb
new file mode 100644
index 0000000..d5103d8
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb
@@ -0,0 +1,97 @@
+DESCRIPTION = "gvfs is a userspace virtual filesystem"
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=05df38dd77c35ec8431f212410a3329e"
+
+GNOMEBASEBUILDCLASS = "meson"
+inherit gnomebase gsettings bash-completion gettext upstream-version-is-even features_check useradd
+
+DEPENDS += "\
+    dbus \
+    glib-2.0 \
+    glib-2.0-native \
+    gsettings-desktop-schemas \
+    libgudev \
+    libsecret \
+    libxml2 \
+    shadow-native \
+"
+
+RDEPENDS:${PN} += "gsettings-desktop-schemas"
+
+SRC_URI = "https://download.gnome.org/sources/${BPN}/${@gnome_verdir("${PV}")}/${BPN}-${PV}.tar.xz;name=archive"
+
+SRC_URI[archive.sha256sum] = "e40e2035a40bc51ce9e88eed05b025596e40bb4aaf9bc632d12ce74fdb30b1f6"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+EXTRA_OEMESON = " \
+    -Dbluray=false \
+"
+
+PACKAGES =+ "gvfsd-ftp gvfsd-sftp gvfsd-trash"
+
+FILES:${PN} += " \
+    ${datadir}/glib-2.0 \
+    ${datadir}/GConf \
+    ${datadir}/dbus-1/services \
+    ${libdir}/gio/modules/*.so \
+    ${libdir}/tmpfiles.d \
+    ${systemd_user_unitdir} \
+"
+
+FILES:${PN}-dbg += "${libdir}/gio/modules/.debug/*"
+FILES:${PN}-dev += "${libdir}/gio/modules/*.la"
+
+FILES:gvfsd-ftp = "${libexecdir}/gvfsd-ftp ${datadir}/gvfs/mounts/ftp.mount"
+FILES:gvfsd-sftp = "${libexecdir}/gvfsd-sftp ${datadir}/gvfs/mounts/sftp.mount"
+FILES:gvfsd-trash = "${libexecdir}/gvfsd-trash ${datadir}/gvfs/mounts/trash.mount"
+
+RRECOMMENDS:gvfsd-ftp += "openssh-sftp openssh-ssh"
+
+PACKAGECONFIG ?= "libgphoto2 \
+                  ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+                  ${@bb.utils.contains('DISTRO_FEATURES','polkit','udisks2','',d)} \
+                  ${@bb.utils.contains('DISTRO_FEATURES','polkit','admin','',d)} \
+                 "
+
+PACKAGECONFIG[udisks2] = "-Dudisks2=true, -Dudisks2=false, udisks2, udisks2"
+PACKAGECONFIG[admin] = "-Dadmin=true, -Dadmin=false, libcap polkit"
+PACKAGECONFIG[afc] = "-Dafc=true, -Dafc=false, libimobiledevice libplist"
+PACKAGECONFIG[archive] = "-Darchive=true, -Darchive=false, libarchive"
+PACKAGECONFIG[dnssd] = "-Ddnssd=true, -Ddnssd=false, avahi"
+PACKAGECONFIG[gcr] = "-Dgcr=true, -Dgcr=false, gcr3, gnome-keyring"
+PACKAGECONFIG[gcrypt] = "-Dgcrypt=true, -Dgcrypt=false, libgcrypt"
+PACKAGECONFIG[goa] = "-Dgoa=true, -Dgoa=false, gnome-online-accounts"
+PACKAGECONFIG[google] = "-Dgoogle=true, -Dgoogle=false, libgdata"
+PACKAGECONFIG[http] = "-Dhttp=true, -Dhttp=false, libsoup-3.0"
+PACKAGECONFIG[libmtp] = "-Dmtp=true, -Dmtp=false, libmtp"
+PACKAGECONFIG[logind] = "-Dlogind=true, -Dlogind=false, systemd"
+PACKAGECONFIG[libgphoto2] = "-Dgphoto2=true, -Dgphoto2=false, libgphoto2"
+PACKAGECONFIG[nfs] = "-Dnfs=true, -Dnfs=false,libnfs"
+PACKAGECONFIG[samba] = "-Dsmb=true, -Dsmb=false, samba"
+PACKAGECONFIG[systemd] = "-Dsystemduserunitdir=${systemd_user_unitdir} -Dtmpfilesdir=${libdir}/tmpfiles.d, -Dsystemduserunitdir=no -Dtmpfilesdir=no, systemd"
+
+# needs meta-filesystems
+PACKAGECONFIG[fuse] = "-Dfuse=true, -Dfuse=false, fuse3"
+
+# libcdio-paranoia recipe doesn't exist yet
+PACKAGECONFIG[cdda] = "-Dcdda=true, -Dcdda=false, libcdio-paranoia"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd"
+
+do_install:append() {
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'polkit', 'true', 'false', d)}; then
+        # Fix up permissions on polkit rules.d to work with rpm4 constraints
+        chmod 700 ${D}${datadir}/polkit-1/rules.d
+        chown polkitd:root ${D}${datadir}/polkit-1/rules.d
+    fi
+
+    # After rebuilds (not from scracth) it can happen that the executables in
+    # libexec ar missing executable permission flag. Not sure but it came up
+    # during transition to meson. Looked into build files and logs but could
+    # not find suspicious
+    for exe in `find ${D}/${libexecdir}`; do
+       chmod +x $exe
+    done
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_44.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_44.3.bb
deleted file mode 100644
index 6bd8a7b..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_44.3.bb
+++ /dev/null
@@ -1,105 +0,0 @@
-SUMMARY = "Window and compositing manager based on Clutter"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = " \
-    xserver-xorg-cvt-native \
-    wayland-native \
-    virtual/libx11 \
-    graphene \
-    gtk4 \
-    gdk-pixbuf \
-    cairo \
-    pango \
-    gsettings-desktop-schemas \
-    json-glib \
-    gnome-desktop \
-    gnome-settings-daemon \
-    libxtst \
-    libxkbfile \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xinerama', '', d)} \
-    xwayland \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gobject-introspection gettext features_check
-
-SRC_URI[archive.sha256sum] = "185cbebf2150d3e450550e371bdb13a8b4db096978b14f99521e966eacc70551"
-
-# x11 is still manadatory - see meson.build
-REQUIRED_DISTRO_FEATURES = "wayland x11 polkit"
-
-# systemd can be replaced by libelogind (not available atow - make systemd
-# mandatory distro feature)
-LOGIND ?= "systemd"
-REQUIRED_DISTRO_FEATURES += "systemd"
-
-# profiler requires sysprof 3.34 which is not willing to build atow
-PACKAGECONFIG ??= " \
-    native-backend \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'opengl x11', 'opengl glx', '', d)} \
-    sm \
-    startup-notification \
-"
-
-EXTRA_OEMESON += " \
-    -Dtests=false \
-    -Dnative_tests=false \
-    -Dxwayland_path=${bindir}/Xwayland \
-"
-
-# combi-config - see meson_options.txt for more details
-PACKAGECONFIG[native-backend] = "-Dnative_backend=true -Dudev=true, -Dnative_backend=false -Dudev=false, libdrm virtual/libgbm libinput ${LOGIND} virtual/egl virtual/libgles2 udev"
-PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=true, virtual/libgl"
-PACKAGECONFIG[glx] = "-Dglx=true, -Dglx=false"
-PACKAGECONFIG[libwacom] = "-Dlibwacom=true, -Dlibwacom=false, libwacom"
-# Remove depending on pipewire-0.2 when mutter is upgraded to 3.36+
-PACKAGECONFIG[remote-desktop] = "-Dremote_desktop=true, -Dremote_desktop=false, pipewire"
-PACKAGECONFIG[sm] = "-Dsm=true, -Dsm=false, libsm"
-PACKAGECONFIG[profiler] = "-Dprofiler=true,-Dprofiler=false,sysprof"
-PACKAGECONFIG[startup-notification] = "-Dstartup_notification=true, -Dstartup_notification=false, startup-notification, startup-notification"
-
-MUTTER_API_NAME = "mutter-12"
-
-do_install:prepend() {
-    sed -i -e 's|${B}/||g' ${B}/clutter/clutter/clutter-enum-types.c
-    sed -i -e 's|${B}/||g' ${B}/src/meta-private-enum-types.c
-    sed -i -e 's|${B}/||g' ${B}/src/meta/meta-enum-types.c
-}
-
-do_install:append() {
-    # Add gir links in standard paths. That makes dependents life much easier
-    # to find them
-    install -d ${D}${datadir}/gir-1.0
-    for gir_full in `find ${D}${libdir}/${MUTTER_API_NAME} -name '*.gir'`; do
-        gir=`basename "$gir_full"`
-        ln -sr "${D}${libdir}/${MUTTER_API_NAME}/$gir" "${D}${datadir}/gir-1.0/$gir"
-    done
-}
-
-GSETTINGS_PACKAGE = "${PN}-gsettings"
-
-PACKAGES =+ "${PN}-tests ${PN}-gsettings"
-
-FILES:${PN} += " \
-    ${datadir}/gnome-control-center \
-    ${datadir}/gir-1.0 \
-    ${libdir}/${MUTTER_API_NAME}/lib*${SOLIBS} \
-    ${libdir}/${MUTTER_API_NAME}/*.typelib \
-    ${libdir}/${MUTTER_API_NAME}/plugins \
-"
-
-FILES:${PN}-tests += " \
-    ${datadir}/installed-tests \
-    ${datadir}/${MUTTER_API_NAME}/tests \
-    ${libexecdir}/installed-tests/${MUTTER_API_NAME} \
-"
-
-FILES:${PN}-dev += " \
-    ${libdir}/${MUTTER_API_NAME}/*.gir \
-    ${libdir}/${MUTTER_API_NAME}/lib*.so \
-"
-
-RDEPENDS:${PN} += "zenity ${PN}-gsettings"
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb
new file mode 100644
index 0000000..87d61c2
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb
@@ -0,0 +1,107 @@
+SUMMARY = "Window and compositing manager based on Clutter"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = " \
+    xserver-xorg-cvt-native \
+    wayland-native \
+    virtual/libx11 \
+    graphene \
+    gtk4 \
+    gdk-pixbuf \
+    cairo \
+    pango \
+    gsettings-desktop-schemas \
+    json-glib \
+    gnome-desktop \
+    gnome-settings-daemon \
+    libei \
+    libxtst \
+    libxkbfile \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xinerama', '', d)} \
+    xwayland \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings gobject-introspection gettext features_check
+
+SRC_URI[archive.sha256sum] = "8fbc963019eda9ba52fca2f6c4c477efbc6e36eb4fa93f23174f02ff6b907715"
+
+# x11 is still manadatory - see meson.build
+REQUIRED_DISTRO_FEATURES = "wayland x11 polkit"
+
+# systemd can be replaced by libelogind (not available atow - make systemd
+# mandatory distro feature)
+LOGIND ?= "systemd"
+REQUIRED_DISTRO_FEATURES += "systemd"
+
+# profiler requires sysprof 3.34 which is not willing to build atow
+PACKAGECONFIG ??= " \
+    native-backend \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'opengl x11', 'opengl glx', '', d)} \
+    sm \
+    startup-notification \
+"
+
+EXTRA_OEMESON += " \
+    -Dtests=false \
+    -Dnative_tests=false \
+    -Dxwayland_path=${bindir}/Xwayland \
+"
+
+# combi-config - see meson_options.txt for more details
+PACKAGECONFIG[native-backend] = "-Dnative_backend=true -Dudev=true, -Dnative_backend=false -Dudev=false, libdrm virtual/libgbm libinput ${LOGIND} virtual/egl virtual/libgles2 udev"
+PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=true, virtual/libgl"
+PACKAGECONFIG[glx] = "-Dglx=true, -Dglx=false"
+PACKAGECONFIG[libdisplay-info] = "-Dlibdisplay_info=true, -Dlibdisplay_info=false, libdisplay-info"
+PACKAGECONFIG[libwacom] = "-Dlibwacom=true, -Dlibwacom=false, libwacom"
+# Remove depending on pipewire-0.2 when mutter is upgraded to 3.36+
+PACKAGECONFIG[remote-desktop] = "-Dremote_desktop=true, -Dremote_desktop=false, pipewire"
+PACKAGECONFIG[sm] = "-Dsm=true, -Dsm=false, libsm"
+PACKAGECONFIG[profiler] = "-Dprofiler=true,-Dprofiler=false,sysprof"
+PACKAGECONFIG[startup-notification] = "-Dstartup_notification=true, -Dstartup_notification=false, startup-notification, startup-notification"
+
+MUTTER_API_NAME = "mutter-13"
+
+do_install:prepend() {
+    sed -i -e 's|${B}/||g' ${B}/clutter/clutter/clutter-enum-types.c
+    sed -i -e 's|${B}/||g' ${B}/src/meta-private-enum-types.c
+    sed -i -e 's|${B}/||g' ${B}/src/meta/meta-enum-types.c
+}
+
+do_install:append() {
+    # Add gir links in standard paths. That makes dependents life much easier
+    # to find them
+    install -d ${D}${datadir}/gir-1.0
+    for gir_full in `find ${D}${libdir}/${MUTTER_API_NAME} -name '*.gir'`; do
+        gir=`basename "$gir_full"`
+        ln -sr "${D}${libdir}/${MUTTER_API_NAME}/$gir" "${D}${datadir}/gir-1.0/$gir"
+    done
+}
+
+GSETTINGS_PACKAGE = "${PN}-gsettings"
+
+PACKAGES =+ "${PN}-tests ${PN}-gsettings"
+
+FILES:${PN} += " \
+    ${datadir}/gnome-control-center \
+    ${datadir}/gir-1.0 \
+    ${libdir}/${MUTTER_API_NAME}/lib*${SOLIBS} \
+    ${libdir}/${MUTTER_API_NAME}/*.typelib \
+    ${libdir}/${MUTTER_API_NAME}/plugins \
+"
+
+FILES:${PN}-tests += " \
+    ${datadir}/installed-tests \
+    ${datadir}/${MUTTER_API_NAME}/tests \
+    ${libexecdir}/installed-tests/${MUTTER_API_NAME} \
+"
+
+FILES:${PN}-dev += " \
+    ${libdir}/${MUTTER_API_NAME}/*.gir \
+    ${libdir}/${MUTTER_API_NAME}/lib*.so \
+"
+
+RDEPENDS:${PN} += "zenity ${PN}-gsettings"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus/0001-Replace-filename-with-basename.patch b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus/0001-Replace-filename-with-basename.patch
deleted file mode 100644
index dbf42a9..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus/0001-Replace-filename-with-basename.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 4ec1f99f170033138036d6547dce9b7dcf541338 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 24 May 2023 07:56:33 -0700
-Subject: [PATCH] Replace filename with basename
-
-This avoids emitting absolute paths into generated sourcecode, it
-improves reproducibility. See [1]
-
-[1] https://developer-old.gnome.org/gobject/stable/glib-mkenums.html
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/nautilus/-/merge_requests/1211]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/nautilus-enum-types.c.template | 2 +-
- src/nautilus-enum-types.h.template | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/nautilus-enum-types.c.template b/src/nautilus-enum-types.c.template
-index 9d8ac83..a757949 100644
---- a/src/nautilus-enum-types.c.template
-+++ b/src/nautilus-enum-types.c.template
-@@ -4,7 +4,7 @@
- /*** END file-header ***/
- 
- /*** BEGIN file-production ***/
--/* Enumerations from "@filename@" */
-+/* Enumerations from "@basename@" */
- #include "@filename@"
- 
- /*** END file-production ***/
-diff --git a/src/nautilus-enum-types.h.template b/src/nautilus-enum-types.h.template
-index 399bbca..7eb6c54 100644
---- a/src/nautilus-enum-types.h.template
-+++ b/src/nautilus-enum-types.h.template
-@@ -8,7 +8,7 @@ G_BEGIN_DECLS
- /*** END file-header ***/
- 
- /*** BEGIN file-production ***/
--/* Enumerations from "@filename@" */
-+/* Enumerations from "@basename@" */
- 
- /*** END file-production ***/
- 
--- 
-2.40.1
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_44.2.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_44.2.1.bb
deleted file mode 100644
index f181822..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_44.2.1.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "File manager for GNOME"
-SECTION = "x11/gnome"
-
-LICENSE="GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
-    appstream-glib-native \
-    desktop-file-utils-native \
-    glib-2.0 \
-    gnome-autoar \
-    gnome-desktop \
-    gtk4 \
-    libadwaita \
-    libcloudproviders \
-    libhandy \
-    libportal \
-    libxml2 \
-    tracker \
-"
-
-inherit gnomebase gsettings gobject-introspection gi-docgen gettext features_check mime-xdg gtk-icon-cache
-
-def gnome_verdir(v):
-    return oe.utils.trim_version(v, 1)
-
-SRC_URI += "file://0001-Replace-filename-with-basename.patch"
-SRC_URI[archive.sha256sum] = "d9c62f024727f7a76fc6a5da788a2b0247df01a71c2a601143c62aac0ff41e4c"
-
-REQUIRED_DISTRO_FEATURES = "x11 opengl gobject-introspection-data"
-
-GIDOCGEN_MESON_OPTION = "docs"
-GIDOCGEN_MESON_ENABLE_FLAG = 'true'
-GIDOCGEN_MESON_DISABLE_FLAG = 'false'
-
-EXTRA_OEMESON += " \
-    -Dtests=none \
-"
-
-PACKAGECONFIG = "extensions"
-PACKAGECONFIG[extensions] = "-Dextensions=true,-Dextensions=false, gexiv2 gstreamer1.0-plugins-base gdk-pixbuf"
-PACKAGECONFIG[packagekit] = "-Dpackagekit=true,-Dpackagekit=false,packagekit"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/metainfo \
-    ${datadir}/gnome-shell \
-    ${datadir}/tracker3 \
-"
-
-# mandatory - not checked during configuration:
-# | (org.gnome.Nautilus:863): GLib-GIO-ERROR **: 21:03:52.326: Settings schema 'org.freedesktop.Tracker.Miner.Files' is not installed
-RDEPENDS:${PN} += "tracker-miners bubblewrap"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb
new file mode 100644
index 0000000..a083d17
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb
@@ -0,0 +1,55 @@
+SUMMARY = "File manager for GNOME"
+SECTION = "x11/gnome"
+
+LICENSE="GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    appstream-glib-native \
+    desktop-file-utils-native \
+    glib-2.0 \
+    gnome-autoar \
+    gnome-desktop \
+    gtk4 \
+    libadwaita \
+    libcloudproviders \
+    libhandy \
+    libportal \
+    libxml2 \
+    tracker \
+"
+
+inherit gnomebase gsettings gobject-introspection gi-docgen gettext features_check mime-xdg gtk-icon-cache
+
+SRC_URI[archive.sha256sum] = "b311c465ce2ca7bc648f61b865187b4451388dec9358a169f3277e741718ab5d"
+
+REQUIRED_DISTRO_FEATURES = "x11 opengl gobject-introspection-data"
+
+GIDOCGEN_MESON_OPTION = "docs"
+GIDOCGEN_MESON_ENABLE_FLAG = 'true'
+GIDOCGEN_MESON_DISABLE_FLAG = 'false'
+
+EXTRA_OEMESON += " \
+    -Dtests=none \
+"
+
+PACKAGECONFIG = "extensions"
+PACKAGECONFIG[extensions] = "-Dextensions=true,-Dextensions=false, gexiv2 gstreamer1.0-plugins-base gdk-pixbuf"
+PACKAGECONFIG[packagekit] = "-Dpackagekit=true,-Dpackagekit=false,packagekit"
+
+do_install:prepend() {
+    sed -i -e 's|${B}/||g' ${B}/src/nautilus-enum-types.c
+}
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/metainfo \
+    ${datadir}/gnome-shell \
+    ${datadir}/tracker3 \
+"
+
+# mandatory - not checked during configuration:
+# | (org.gnome.Nautilus:863): GLib-GIO-ERROR **: 21:03:52.326: Settings schema 'org.freedesktop.Tracker.Miner.Files' is not installed
+RDEPENDS:${PN} += "tracker-miners bubblewrap"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb
new file mode 100644
index 0000000..c047e29
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Tecla is a keyboard layout viewer that uses GTK/Libadwaita for UI, and libxkbcommon to deal with keyboard maps."
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=75859989545e37968a99b631ef42722e"
+
+DEPENDS = " \
+    libxkbcommon \
+    libadwaita \
+    wayland \
+    gtk4 \
+"
+
+REQUIRED_DISTRO_FEATURES = "wayland"
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase pkgconfig  features_check
+
+SRC_URI[archive.sha256sum] = "5c02bb4019b1cffb5663da6107503eff853836a8783dd4705dd04a49f7adc25b"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.4.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.4.0.bb
deleted file mode 100644
index 1eecfff..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.4.0.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Tepl library eases the development of GtkSourceView-based projects"
-LICENSE = "LGPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://LICENSES/LGPL-3.0-or-later.txt;md5=c51d3eef3be114124d11349ca0d7e117"
-
-DEPENDS = " \
-    gsettings-desktop-schemas \
-    glib-2.0 \
-    gtk+3 \
-    gtksourceview4 \
-    amtk \
-    libxml2 \
-    uchardet \
-    gtk-doc-native \
-    libxslt-native \
-    docbook-xsl-stylesheets-native \
-    python3-pygments-native \
-"
-
-inherit meson gobject-introspection gettext features_check pkgconfig
-
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-SRC_URI = "git://gitlab.gnome.org/swilmet/tepl;protocol=https;branch=main"
-SRCREV = "d1e9cc2e4a0738f68d9002f13724b7239f075844"
-S = "${WORKDIR}/git"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.8.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.8.0.bb
new file mode 100644
index 0000000..6c9c36f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tepl/tepl_6.8.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Tepl library eases the development of GtkSourceView-based projects"
+LICENSE = "LGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSES/LGPL-3.0-or-later.txt;md5=c51d3eef3be114124d11349ca0d7e117"
+
+DEPENDS = " \
+    gsettings-desktop-schemas \
+    glib-2.0 \
+    gtk+3 \
+    libgedit-amtk \
+    libgedit-gtksourceview \
+    libxml2 \
+    uchardet \
+    gtk-doc-native \
+    libxslt-native \
+    docbook-xsl-stylesheets-native \
+    python3-pygments-native \
+"
+
+inherit meson gobject-introspection gettext features_check pkgconfig
+
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+SRC_URI = "git://gitlab.gnome.org/swilmet/tepl;protocol=https;branch=main"
+SRCREV = "16ab2567257a053bd957699f89080fafd0999035"
+S = "${WORKDIR}/git"
+
+# gobject-introspection is mandatory and cannot be configured
+REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
+GIR_MESON_OPTION = ""
+
+GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-fix-reproducibility.patch b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-fix-reproducibility.patch
new file mode 100644
index 0000000..dd55256
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-fix-reproducibility.patch
@@ -0,0 +1,108 @@
+From 2bbd07843e8ec34311cafab35f21b40c86e0dd7f Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Tue, 12 Sep 2023 17:00:41 +0200
+Subject: [PATCH] meson: fix reproducibility
+
+Tracker's design seems to be strictly for non-cross builds and leaks buildpaths into the
+binaries at various places. Avoid this to improve binary reproducibility.
+
+todo: Some of these paths may need to be adjusted to make the test environment work
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ meson.build                        | 20 ++++++++++----------
+ src/tracker-extract/meson.build    |  2 +-
+ tests/tracker-miner-fs/meson.build |  2 +-
+ 3 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 935584185..aa6126081 100644
+--- a/meson.build
++++ b/meson.build
+@@ -380,7 +380,7 @@ conf.set('PACKAGE_VERSION', '"@0@"'.format(meson.project_version()))
+ conf.set('TRACKER_VERSION', '"@0@"'.format(meson.project_version()))
+ 
+ # Config that goes in some other generated files (.desktop, .pc, etc)
+-conf.set('abs_top_builddir', meson.current_build_dir())
++conf.set('abs_top_builddir', '')
+ conf.set('exec_prefix', get_option('prefix'))
+ conf.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
+ conf.set('datadir', datadir)
+@@ -409,7 +409,7 @@ tracker_c_args = [
+ configinc = include_directories('./')
+ srcinc = include_directories('src/')
+ 
+-build_root = meson.current_build_dir()
++build_root = ''
+ 
+ # We use tracker-miners-3.0 rather than tracker3-miners inside the lib64
+ # directory, following the existing convention in that directory.
+@@ -421,10 +421,10 @@ tracker_writeback_modules_dir = join_paths(get_option('prefix'), get_option('lib
+ tracker_extract_rules_dir = join_paths(get_option('prefix'), get_option('datadir'), tracker_versioned_name, 'extract-rules')
+ tracker_miner_services_dir = join_paths(get_option('prefix'), get_option('datadir'), tracker_versioned_name, 'miners')
+ 
+-tracker_uninstalled_cli_subcommands_dir = meson.current_build_dir() / 'src' / 'tracker' / 'subcommands'
+-tracker_uninstalled_extract_rules_dir = join_paths(meson.current_build_dir(), 'src', 'tracker-extract', 'uninstalled-rules')
+-tracker_uninstalled_writeback_modules_dir = join_paths(meson.current_build_dir(), 'src', 'tracker-writeback')
+-uninstalled_tracker_extract_path = join_paths(meson.current_build_dir(), 'src', 'tracker-extract', 'tracker-extract-3')
++tracker_uninstalled_cli_subcommands_dir = '/usr/src/debug/tracker/src/tracker/subcommands'
++tracker_uninstalled_extract_rules_dir = join_paths('usr', 'src', 'debug', 'tracker', 'src', 'tracker-extract', 'uninstalled-rules')
++tracker_uninstalled_writeback_modules_dir = join_paths('usr', 'src', 'debug', 'tracker', 'src', 'tracker-writeback')
++uninstalled_tracker_extract_path = join_paths('usr', 'src', 'debug', 'tracker', 'src', 'tracker-extract', 'tracker-extract-3')
+ 
+ gsettings_schema_dir = join_paths(get_option('prefix'), get_option('datadir'), 'glib-2.0', 'schemas')
+ po_dir = join_paths(meson.current_source_dir(), 'po')
+@@ -438,8 +438,8 @@ subdir('data')
+ subdir('docs')
+ 
+ test_c_args = tracker_c_args + [
+-  '-DTOP_BUILDDIR="@0@/"'.format(meson.build_root()),
+-  '-DTOP_SRCDIR="@0@/"'.format(meson.source_root()),
++  '-DTOP_BUILDDIR="@0@/"'.format(''),
++  '-DTOP_SRCDIR="@0@/"'.format('/usr/src/debug/tracker'),
+ ]
+ 
+ if get_option('tests_tap_protocol')
+@@ -454,9 +454,9 @@ run_uninstalled_conf = configuration_data()
+ run_uninstalled_conf.set('tracker_sparql_uninstalled_dir', tracker_sparql_uninstalled_dir)
+ run_uninstalled_conf.set('tracker_uninstalled_cli_dir', tracker_uninstalled_cli_dir)
+ run_uninstalled_conf.set('tracker_uninstalled_cli_subcommands_dir', tracker_uninstalled_cli_subcommands_dir)
+-run_uninstalled_conf.set('tracker_uninstalled_domain_rule', meson.current_build_dir() / 'tests' / 'functional-tests' / 'config' / 'test-domain.rule')
++run_uninstalled_conf.set('tracker_uninstalled_domain_rule', '/usr/src/debug/tracker/tests/functional-tests/config/test-domain.rule')
+ run_uninstalled_conf.set('tracker_uninstalled_extract_rules_dir', tracker_uninstalled_extract_rules_dir)
+-run_uninstalled_conf.set('tracker_uninstalled_extractors_dir', meson.current_build_dir() / 'src' / 'tracker-extract')
++run_uninstalled_conf.set('tracker_uninstalled_extractors_dir', '/usr/src/debug/tracker/src/tracker-extract')
+ run_uninstalled_conf.set('tracker_uninstalled_miner_services_dir', tracker_uninstalled_miner_services_dir)
+ run_uninstalled_conf.set('tracker_uninstalled_testutils_dir', tracker_uninstalled_testutils_dir)
+ run_uninstalled_conf.set('tracker_uninstalled_writeback_modules_dir', tracker_uninstalled_writeback_modules_dir)
+diff --git a/src/tracker-extract/meson.build b/src/tracker-extract/meson.build
+index 4aaad5c41..d17cce221 100644
+--- a/src/tracker-extract/meson.build
++++ b/src/tracker-extract/meson.build
+@@ -159,7 +159,7 @@ endif
+ executable('tracker-extract-@0@'.format(tracker_api_major),
+   tracker_extract_sources,
+   # Manually add the root dir to work around https://github.com/mesonbuild/meson/issues/1387
+-  c_args: tracker_c_args + ['-I' + meson.build_root()],
++  c_args: tracker_c_args,
+   export_dynamic: true,
+   dependencies: tracker_extract_dependencies,
+   install: true,
+diff --git a/tests/tracker-miner-fs/meson.build b/tests/tracker-miner-fs/meson.build
+index e131b85ad..59e509fa6 100644
+--- a/tests/tracker-miner-fs/meson.build
++++ b/tests/tracker-miner-fs/meson.build
+@@ -19,7 +19,7 @@ libtracker_miner_test_c_args = [
+ ]
+ 
+ libtracker_miner_test_environment = environment()
+-libtracker_miner_test_environment.set('GSETTINGS_SCHEMA_DIR', join_paths(meson.build_root(), 'data'))
++libtracker_miner_test_environment.set('GSETTINGS_SCHEMA_DIR', '/usr/src/debug/tracker-miners/data')
+ 
+ libtracker_miner_test_deps = [tracker_miners_common_dep, tracker_miner_dep, tracker_sparql]
+ 
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-meson.build-Just-warn-if-we-build-without-libseccomp.patch b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-meson.build-Just-warn-if-we-build-without-libseccomp.patch
deleted file mode 100644
index 53c5f26..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners/0001-meson.build-Just-warn-if-we-build-without-libseccomp.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 54ea2cabf85ad1bd5695cdbd1935115c9495e80c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
-Date: Sun, 1 Dec 2019 17:06:59 +0100
-Subject: [PATCH] meson.build: Just warn if we build without libseccomp
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-libseccomp lives in meta-security currently and we cannot make it a mandatory
-dependency. Once somebody moves libseccomp to meta-oe and adjusts all the
-target specific knobs this patch can go. For discussion see [1].
-
-[1] http://lists.openembedded.org/pipermail/openembedded-devel/2019-November/203234.html
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 71a9df4..1eaa1a0 100644
---- a/meson.build
-+++ b/meson.build
-@@ 299,7 +299,7 @@ cpu_supports_seccomp = not unsupported_cpus.contains(host_cpu)
- seccomp_required = system_supports_seccomp and cpu_supports_seccomp and get_option('seccomp') and get_option('extract')
- 
- if not libseccomp.found() and seccomp_required
--  error('Libseccomp is mandatory for sandboxed metadata extraction')
-+  warning('Building without Libseccomp might cause security issues!')
- endif
- 
- ####################################################################
--- 
-2.21.0
-
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.5.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.5.0.bb
deleted file mode 100644
index d093697..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.5.0.bb
+++ /dev/null
@@ -1,81 +0,0 @@
-SUMMARY = "Tracker miners and metadata extractors"
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = " \
-    file://COPYING.GPL;md5=ee31012bf90e7b8c108c69f197f3e3a4 \
-    file://COPYING.LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
-"
-
-DEPENDS = " \
-    intltool-native \
-    tracker \
-    zlib \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gobject-introspection vala bash-completion features_check
-
-SRC_URI += "file://0001-meson.build-Just-warn-if-we-build-without-libseccomp.patch \
-	    file://0001-Set-header-file-to-a-fixed-path-instead-of-a-host-pa.patch \
-           "
-SRC_URI[archive.sha256sum] = "17966603dc432a98526b490586a48acd7f9f59935f7895dfc51729a46a6901a3"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-PACKAGECONFIG ??= " \
-    ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "ffmpeg", "", d)} \
-    gexiv2 \
-    gstreamer \
-    icu \
-    libexif \
-    libgsf \
-    jpeg \
-    pdf \
-    png \
-    tiff \
-    raw \
-    xml \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)} \
-    battery \
-    networkmanager \
-"
-
-PACKAGECONFIG[battery]     = "-Dbattery_detection=upower,-Dbattery_detection=none,upower"
-PACKAGECONFIG[cue]     = "-Dcue=enabled,-Dcue=disabled,libcue"
-PACKAGECONFIG[ffmpeg]     = "-Dgeneric_media_extractor=libav,,ffmpeg"
-PACKAGECONFIG[gexiv2]     = ",,gexiv2"
-PACKAGECONFIG[gstreamer]  = "-Dgeneric_media_extractor=gstreamer,,gstreamer1.0 gstreamer1.0-plugins-base"
-PACKAGECONFIG[gupnp]      = "-Dgstreamer_backend=gupnp,,gupnp-dlna"
-PACKAGECONFIG[gif]        = "-Dgif=enabled,-Dgif=disabled,giflib"
-PACKAGECONFIG[icu]        = "-Dcharset_detection=icu,,icu"
-PACKAGECONFIG[iso]        = "-Diso=enabled,-Diso=disabled,libosinfo"
-PACKAGECONFIG[jpeg]       = "-Djpeg=enabled,-Djpeg=disabled,jpeg"
-PACKAGECONFIG[libexif]    = "-Dexif=enabled,-Dexif=disabled,libexif"
-PACKAGECONFIG[libgsf]     = "-Dgsf=enabled,-Dgsf=disabled,libgsf"
-PACKAGECONFIG[pdf]        = "-Dpdf=enabled,-Dpdf=disabled,poppler"
-PACKAGECONFIG[png]        = "-Dpng=enabled,-Dpng=disabled,libpng"
-PACKAGECONFIG[tiff]       = "-Dtiff=enabled,-Dtiff=disabled,tiff"
-PACKAGECONFIG[raw]       = "-Draw=enabled,-Draw=disabled,libraw"
-PACKAGECONFIG[xml]        = "-Dxml=enabled,-Dxml=disabled,libxml2"
-PACKAGECONFIG[networkmanager] = "-Dnetwork_manager=enabled,-Dnetwork_manager=disabled,networkmanager"
-
-# For security reasons it is strongly recommended to set add meta-security in
-# your layers and 'libseccomp' to PACKAGECONFIG".
-PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
-# not yet in meta-gnome
-PACKAGECONFIG[rss]        = "-Dminer_rss=true,-Dminer_rss=false,libgrss"
-
-EXTRA_OEMESON += " \
-    -Dman=false \
-    -Dsystemd_user_services=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)} \
-    -Dsystemd_user_services_dir=${systemd_user_unitdir} \
-"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/tracker3-miners \
-    ${libdir}/tracker-miners-3.0 \
-    ${systemd_user_unitdir} \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb
new file mode 100644
index 0000000..d899155
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb
@@ -0,0 +1,83 @@
+SUMMARY = "Tracker miners and metadata extractors"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = " \
+    file://COPYING.GPL;md5=ee31012bf90e7b8c108c69f197f3e3a4 \
+    file://COPYING.LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+"
+
+DEPENDS = " \
+    intltool-native \
+    libseccomp \
+    tracker \
+    zlib \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gsettings gobject-introspection vala bash-completion features_check
+
+SRC_URI:append = " \
+	file://0001-fix-reproducibility.patch \
+	file://0001-Set-header-file-to-a-fixed-path-instead-of-a-host-pa.patch \
+"
+SRC_URI[archive.sha256sum] = "c2ed9f6b0410195863b84c7b5467c5bc1255e96d658741192b5e92568a3bebd0"
+
+# gobject-introspection is mandatory and cannot be configured
+REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
+GIR_MESON_OPTION = ""
+
+PACKAGECONFIG ??= " \
+    ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "ffmpeg", "", d)} \
+    gexiv2 \
+    gstreamer \
+    icu \
+    libexif \
+    libgsf \
+    jpeg \
+    pdf \
+    png \
+    tiff \
+    raw \
+    xml \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)} \
+    battery \
+    networkmanager \
+"
+
+PACKAGECONFIG[battery]     = "-Dbattery_detection=upower,-Dbattery_detection=none,upower"
+PACKAGECONFIG[cue]     = "-Dcue=enabled,-Dcue=disabled,libcue"
+PACKAGECONFIG[ffmpeg]     = "-Dgeneric_media_extractor=libav,,ffmpeg"
+PACKAGECONFIG[gexiv2]     = ",,gexiv2"
+PACKAGECONFIG[gstreamer]  = "-Dgeneric_media_extractor=gstreamer,,gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[gupnp]      = "-Dgstreamer_backend=gupnp,,gupnp-dlna"
+PACKAGECONFIG[gif]        = "-Dgif=enabled,-Dgif=disabled,giflib"
+PACKAGECONFIG[icu]        = "-Dcharset_detection=icu,,icu"
+PACKAGECONFIG[iso]        = "-Diso=enabled,-Diso=disabled,libosinfo"
+PACKAGECONFIG[jpeg]       = "-Djpeg=enabled,-Djpeg=disabled,jpeg"
+PACKAGECONFIG[libexif]    = "-Dexif=enabled,-Dexif=disabled,libexif"
+PACKAGECONFIG[libgsf]     = "-Dgsf=enabled,-Dgsf=disabled,libgsf"
+PACKAGECONFIG[pdf]        = "-Dpdf=enabled,-Dpdf=disabled,poppler"
+PACKAGECONFIG[png]        = "-Dpng=enabled,-Dpng=disabled,libpng"
+PACKAGECONFIG[tiff]       = "-Dtiff=enabled,-Dtiff=disabled,tiff"
+PACKAGECONFIG[raw]       = "-Draw=enabled,-Draw=disabled,libraw"
+PACKAGECONFIG[xml]        = "-Dxml=enabled,-Dxml=disabled,libxml2"
+PACKAGECONFIG[networkmanager] = "-Dnetwork_manager=enabled,-Dnetwork_manager=disabled,networkmanager"
+
+# For security reasons it is strongly recommended to set add meta-security in
+# your layers and 'libseccomp' to PACKAGECONFIG".
+PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
+# not yet in meta-gnome
+PACKAGECONFIG[rss]        = "-Dminer_rss=true,-Dminer_rss=false,libgrss"
+
+EXTRA_OEMESON += " \
+    -Dman=false \
+    -Dsystemd_user_services=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)} \
+    -Dsystemd_user_services_dir=${systemd_user_unitdir} \
+"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/tracker3-miners \
+    ${libdir}/tracker-miners-3.0 \
+    ${systemd_user_unitdir} \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker/0001-fix-reproducibility.patch b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker/0001-fix-reproducibility.patch
new file mode 100644
index 0000000..4a11f83
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker/0001-fix-reproducibility.patch
@@ -0,0 +1,80 @@
+From e5acd475f796420b4887969f2b0057dbf67979b3 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Mon, 18 Sep 2023 02:47:55 +0200
+Subject: [PATCH] tracker: fix reproducibility issue
+
+Tracker's design seems to be strictly for non-cross builds and leaks buildpaths into the
+binaries at various places. Avoid this to improve binary reproducibility.
+
+todo: Some of these paths may need to be adjusted to make the test environment work
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ meson.build                       | 6 +++---
+ src/libtracker-common/meson.build | 4 ++--
+ src/libtracker-sparql/meson.build | 4 ++--
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 8442a216f..82844d7fd 100644
+--- a/meson.build
++++ b/meson.build
+@@ -348,7 +348,7 @@ have_rtld_noload = cc.has_header_symbol('dlfcn.h', 'RTLD_NOLOAD')
+ conf.set('HAVE_RTLD_NOLOAD', have_rtld_noload)
+ 
+ # Config that goes in some other generated files (.desktop, .service, etc)
+-conf.set('abs_top_builddir', meson.current_build_dir())
++conf.set('abs_top_builddir', '/usr/src/debug/tracker')
+ conf.set('libexecdir', join_paths(get_option('prefix'), get_option('libexecdir')))
+ 
+ configure_file(input: 'config.h.meson.in',
+@@ -388,8 +388,8 @@ subdir('docs')
+ subdir('utils')
+ 
+ test_c_args = tracker_c_args + [
+-    '-DTOP_BUILDDIR="@0@"'.format(build_root),
+-    '-DTOP_SRCDIR="@0@"'.format(source_root),
++    '-DTOP_BUILDDIR="@0@/"'.format('/usr/src/debug/tracker'),
++    '-DTOP_SRCDIR="@0@/"'.format('/usr/src/debug/tracker'),
+ ]
+ 
+ tracker_uninstalled_cli_dir = join_paths(meson.current_build_dir(), 'src', 'tracker')
+diff --git a/src/libtracker-common/meson.build b/src/libtracker-common/meson.build
+index 9355d1c0d..cdbc05f28 100644
+--- a/src/libtracker-common/meson.build
++++ b/src/libtracker-common/meson.build
+@@ -51,10 +51,10 @@ libtracker_common = static_library('tracker-common',
+   dependencies: [tracker_common_dependencies, gmodule],
+   c_args: [
+     '-DPRIVATE_LIBDIR="@0@"'.format(tracker_internal_libs_dir),
+-    '-DBUILD_LIBDIR="@0@"'.format(meson.current_build_dir()),
++    '-DBUILD_LIBDIR="@0@"'.format('/usr/src/debug/tracker'),
+     # Global build root is required to detect noinst situations (tests/introspection),
+     # event when built as a subproject
+-    '-DBUILDROOT="@0@"'.format(meson.global_build_root()),
++    '-DBUILDROOT="@0@"'.format('/usr/src/debug/tracker'),
+   ] + tracker_c_args,
+   include_directories: [configinc, srcinc],
+   gnu_symbol_visibility: 'hidden',
+diff --git a/src/libtracker-sparql/meson.build b/src/libtracker-sparql/meson.build
+index 36288f5c3..61086a697 100644
+--- a/src/libtracker-sparql/meson.build
++++ b/src/libtracker-sparql/meson.build
+@@ -96,10 +96,10 @@ libtracker_sparql_private = static_library('tracker-sparql-private',
+     c_args: [
+ 	'-include', 'libtracker-sparql/tracker-private.h',
+         '-DPRIVATE_LIBDIR="@0@"'.format(tracker_internal_libs_dir),
+-        '-DBUILD_LIBDIR="@0@"'.format(meson.current_build_dir()),
++        '-DBUILD_LIBDIR="@0@"'.format('/usr/src/debug/tracker'),
+         # Global build root is required to detect noinst situations (tests/introspection),
+         # event when built as a subproject
+-        '-DBUILDROOT="@0@"'.format(meson.global_build_root()),
++        '-DBUILDROOT="@0@"'.format('/usr/src/debug/tracker'),
+     ] + tracker_c_args,
+ 
+     dependencies: [libtracker_sparql_dependencies, gvdb_dep],
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.5.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.5.1.bb
deleted file mode 100644
index 6dd8af23..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.5.1.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "Tracker is a file search engine"
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = " \
-    file://COPYING.GPL;md5=ee31012bf90e7b8c108c69f197f3e3a4 \
-    file://COPYING.LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
-"
-
-DEPENDS = " \
-    dbus-native \
-    python3-pygobject-native \
-    glib-2.0 \
-    sqlite3 \
-    libarchive \
-    dbus \
-    icu \
-    json-glib \
-    libsoup-3.0 \
-    libstemmer \
-"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gsettings gobject-introspection vala gtk-doc manpages bash-completion features_check python3native
-
-SRC_URI += "file://0001-meson-Do-not-define-TOP_SRCDIR.patch"
-SRC_URI[archive.sha256sum] = "f972d50ac7bafdccf113b1eb99dcae35404685a99e55bfef16f3ac83b4de974d"
-
-# gobject-introspection is mandatory and cannot be configured
-REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-GIR_MESON_OPTION = ""
-
-# text search is not an option anymore and requires sqlite3 build with
-# PACKAGECONFIG[fts5] set (default)
-
-# set required cross property sqlite3_has_fts5
-do_write_config[vardeps] += "PACKAGECONFIG"
-do_write_config:append() {
-    echo "[properties]" > ${WORKDIR}/meson-tracker.cross
-    echo "sqlite3_has_fts5 = 'true'" >> ${WORKDIR}/meson-tracker.cross
-}
-
-EXTRA_OEMESON = " \
-    --cross-file ${WORKDIR}/meson-tracker.cross \
-    -Dman=false \
-    -Dsystemd_user_services=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)} \
-    -Dsystemd_user_services_dir=${systemd_user_unitdir} \
-    -Dsoup=soup3 \
-"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1 \
-    ${datadir}/tracker3 \
-    ${libdir}/tracker-3.0 \
-    ${systemd_user_unitdir} \
-"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb
new file mode 100644
index 0000000..d2eb392
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb
@@ -0,0 +1,60 @@
+SUMMARY = "Tracker is a file search engine"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = " \
+    file://COPYING.GPL;md5=ee31012bf90e7b8c108c69f197f3e3a4 \
+    file://COPYING.LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+"
+
+DEPENDS = " \
+    dbus-native \
+    python3-pygobject-native \
+    glib-2.0 \
+    sqlite3 \
+    libarchive \
+    dbus \
+    icu \
+    json-glib \
+    libsoup-3.0 \
+    libstemmer \
+"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gettext gnomebase gsettings gobject-introspection vala gtk-doc  bash-completion python3native
+
+SRC_URI += "file://0001-fix-reproducibility.patch"
+SRC_URI[archive.sha256sum] = "52592cfe19baffd16dbe47475be7da750dbd0b6333fd7acb60faa9da5bc40df2"
+
+# text search is not an option anymore and requires sqlite3 build with
+# PACKAGECONFIG[fts5] set (default)
+
+# set required cross property sqlite3_has_fts5
+do_write_config[vardeps] += "PACKAGECONFIG"
+do_write_config:append() {
+    echo "[properties]" > ${WORKDIR}/meson-tracker.cross
+    echo "sqlite3_has_fts5 = 'true'" >> ${WORKDIR}/meson-tracker.cross
+}
+
+EXTRA_OEMESON = " \
+    --cross-file ${WORKDIR}/meson-tracker.cross \
+    -Dman=false \
+    -Dsystemd_user_services=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)} \
+    -Dsystemd_user_services_dir=${systemd_user_unitdir} \
+    -Dsoup=soup3 \
+    ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=enabled', '-Dvapi=disabled', d)} \
+"
+
+do_install:prepend() {
+    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/src/libtracker-sparql/tracker-sparql-enum-types.c
+    sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/src/libtracker-sparql/core/tracker-data-enum-types.c
+}
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1 \
+    ${datadir}/tracker3 \
+    ${libdir}/tracker-3.0 \
+    ${systemd_user_unitdir} \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.0.bb
deleted file mode 100644
index 3548cc5..0000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.0.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Display dialog boxes from the command line and shell scripts"
-SECTION = "x11/gnome"
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase pkgconfig itstool gtk-icon-cache features_check gettext
-
-DEPENDS = " \
-    desktop-file-utils-native \
-    hicolor-icon-theme \
-    gtk+3 \
-    gtk+3-native \
-"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-SRC_URI[archive.sha256sum] = "c15582301ed90b9d42ce521dbccf99a989f22f12041bdd5279c6636da99ebf65"
-SRC_URI += "file://0001-Harcode-shebang-to-avoid-pointing-to-build-system-s-.patch"
-
-PACKAGECONFIG ?= "webkitgtk"
-PACKAGECONFIG[webkitgtk] = "-Dwebkitgtk=true,-Dwebkitgtk=false,webkitgtk3"
-
-PACKAGES =+ "${PN}-gdialog"
-FILES:${PN}-gdialog = "${bindir}/gdialog"
-FILES:${PN}-doc = "${datadir}/man ${datadir}/help"
-RDEPENDS:${PN}-gdialog += "perl"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb
new file mode 100644
index 0000000..a152e64
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Display dialog boxes from the command line and shell scripts"
+SECTION = "x11/gnome"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase pkgconfig itstool gtk-icon-cache features_check gettext
+
+DEPENDS = " \
+    desktop-file-utils-native \
+    hicolor-icon-theme \
+    gtk+3 \
+    gtk+3-native \
+"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+SRC_URI[archive.sha256sum] = "3fb5b8b1044d3d129262d3c54cf220eb7f76bc21bd5ac6d96ec115cd3518300e"
+SRC_URI += "file://0001-Harcode-shebang-to-avoid-pointing-to-build-system-s-.patch"
+
+PACKAGECONFIG ?= "webkitgtk"
+PACKAGECONFIG[webkitgtk] = "-Dwebkitgtk=true,-Dwebkitgtk=false,webkitgtk3"
+
+PACKAGES =+ "${PN}-gdialog"
+FILES:${PN}-gdialog = "${bindir}/gdialog"
+FILES:${PN}-doc = "${datadir}/man ${datadir}/help"
+RDEPENDS:${PN}-gdialog += "perl"
diff --git a/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.2.bb b/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.2.bb
deleted file mode 100644
index 401c83f..0000000
--- a/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SUMMARY = "libcloudproviders is a DBus API that allows cloud storage sync clients to expose their services."
-LICENSE="LGPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = "glib-2.0"
-
-inherit gnomebase gobject-introspection vala
-
-SRC_URI[archive.sha256sum] = "24a9f3fffaf49f1d9d45d6ec35ba9f9e59a5a1040b51ce7835611131966c6819"
diff --git a/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb b/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb
new file mode 100644
index 0000000..3608923
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb
@@ -0,0 +1,11 @@
+SUMMARY = "libcloudproviders is a DBus API that allows cloud storage sync clients to expose their services."
+LICENSE="LGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = "glib-2.0"
+
+inherit gnomebase gobject-introspection vala
+
+SRC_URI[archive.sha256sum] = "e3d7160c3e45fe3216c07c7988bb4fc81397c32d1fc6113af0edfe8632039f65"
diff --git a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_44.1.bb b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_44.1.bb
deleted file mode 100644
index a8e8c83..0000000
--- a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_44.1.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "A xdg-desktop-portal backend for gnome."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = " \
-    glib-2.0-native \
-    gtk4\
-    xdg-desktop-portal \
-    xdg-desktop-portal-gtk \
-    libadwaita \
-    fontconfig \
-    gsettings-desktop-schemas \
-    gnome-desktop \
-    dconf \
-"
-
-RDEPENDS:${PN} = "xdg-desktop-portal xdg-desktop-portal-gtk"
-
-inherit meson pkgconfig gsettings features_check
-
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-SRC_URI = "git://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome.git;protocol=https;branch=main"
-
-S = "${WORKDIR}/git"
-SRCREV = "89203bf3522556965fc225782d1a635afdac611e"
-
-PACKAGECONFIG ?= "screenshot screencast ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
-
-PACKAGECONFIG[wayland] = ",,wayland-native"
-PACKAGECONFIG[screenshot] = ",,,gnome-shell"
-PACKAGECONFIG[screencast] = ",,,mutter"
-
-FILES:${PN} += "${systemd_user_unitdir} ${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb
new file mode 100644
index 0000000..9146993
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "A xdg-desktop-portal backend for gnome."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/xdg-desktop-portal-gnome"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = " \
+    glib-2.0-native \
+    gtk4\
+    xdg-desktop-portal \
+    xdg-desktop-portal-gtk \
+    libadwaita \
+    fontconfig \
+    gsettings-desktop-schemas \
+    gnome-desktop \
+    dconf \
+"
+
+RDEPENDS:${PN} = "xdg-desktop-portal xdg-desktop-portal-gtk"
+
+GNOMEBASEBUILDCLASS = "meson"
+inherit gnomebase pkgconfig gsettings features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+SRC_URI[archive.sha256sum] = "949598861c80000febf18cc12b3721c95c1bb1d19371fc2156dc4f33def5aff0"
+
+PACKAGECONFIG ?= "screenshot screencast ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
+PACKAGECONFIG[wayland] = ",,wayland-native"
+PACKAGECONFIG[screenshot] = ",,,gnome-shell"
+PACKAGECONFIG[screencast] = ",,,mutter"
+
+FILES:${PN} += "${systemd_user_unitdir} ${datadir}"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch
new file mode 100644
index 0000000..5c13ce0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch
@@ -0,0 +1,56 @@
+From 4c86f814fbe17eb5774055d69102408bbfc1cd63 Mon Sep 17 00:00:00 2001
+From: Jens Georg <mail@jensge.org>
+Date: Sun, 9 Jul 2023 21:47:48 +0200
+Subject: [PATCH] build: Fix wrap file syntax
+
+No idea why it worked in the first place
+
+Fixes #26
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gupnp-tools/-/commit/1372f9ebe45180d58cefb6c0475fafe77de37ef2]
+---
+ subprojects/gssdp-1.2.wrap    | 4 ++--
+ subprojects/gupnp-1.2.wrap    | 4 ++--
+ subprojects/gupnp-av-1.0.wrap | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/subprojects/gssdp-1.2.wrap b/subprojects/gssdp-1.2.wrap
+index 34d9b0b..f78d2fa 100644
+--- a/subprojects/gssdp-1.2.wrap
++++ b/subprojects/gssdp-1.2.wrap
+@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gssdp.git
+ revision = master
+ depth = 1
+  
+-[provides]
+-dependency_name = gssdp-1.2
++[provide]
++dependency_names = gssdp-1.2
+ 
+diff --git a/subprojects/gupnp-1.2.wrap b/subprojects/gupnp-1.2.wrap
+index c345910..f92c055 100644
+--- a/subprojects/gupnp-1.2.wrap
++++ b/subprojects/gupnp-1.2.wrap
+@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gupnp.git
+ revision = master
+ depth = 1
+  
+-[provides]
+-dependency_name = gupnp-1.2
++[provide]
++dependency_names = gupnp-1.2
+ 
+diff --git a/subprojects/gupnp-av-1.0.wrap b/subprojects/gupnp-av-1.0.wrap
+index 967e6d3..8c3b490 100644
+--- a/subprojects/gupnp-av-1.0.wrap
++++ b/subprojects/gupnp-av-1.0.wrap
+@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gupnp-av.git
+ revision = master
+ depth = 1
+  
+-[provides]
+-dependency_name = gupnp-av-1.0
++[provide]
++dependency_names = gupnp-av-1.0
+ 
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb
index 20aced8..9731ede 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb
@@ -9,7 +9,9 @@
 
 REQUIRED_DISTRO_FEATURES = "x11"
 
-SRC_URI = "http://download.gnome.org/sources/${BPN}/0.10/${BPN}-${PV}.tar.xz"
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.10/${BPN}-${PV}.tar.xz \
+    file://0001-build-Fix-wrap-file-syntax.patch \
+"
 SRC_URI[sha256sum] = "6de49ef4b375b8a164f74b766168b1184e0d28196b6b07a4f5341f08dfd85d6c"
 
 RRECOMMENDS:${PN} = "adwaita-icon-theme"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch
new file mode 100644
index 0000000..66f0709
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch
@@ -0,0 +1,25 @@
+From 7a4515a356a3d5eb2af1f602c77a42a544e71efa Mon Sep 17 00:00:00 2001
+From: Jan Beich <jbeich@FreeBSD.org>
+Date: Sun, 9 Jul 2023 03:30:47 +0000
+Subject: [PATCH] build: properly spell [provide] in *.wrap files
+
+meson.build:1:0: ERROR: Unexpected "[provides]" section, did you mean "[provide]"?
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gupnp/-/commit/884639bd29323cbb8fbd36bc69d08097a2ae2cd1]
+---
+ subprojects/gssdp-1.2.wrap | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/subprojects/gssdp-1.2.wrap b/subprojects/gssdp-1.2.wrap
+index 469c75d..466b83b 100644
+--- a/subprojects/gssdp-1.2.wrap
++++ b/subprojects/gssdp-1.2.wrap
+@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gssdp.git
+ revision = gssdp-1.4
+ depth = 1
+  
+-[provides]
++[provide]
+ dependency_name = gssdp-1.2
+ 
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb
index c21e7a0..efeb66f 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb
@@ -9,6 +9,7 @@
 
 SRC_URI = "${GNOME_MIRROR}/${BPN}/1.4/${BPN}-${PV}.tar.xz \
     file://0001-all-Drop-xmlRecoverMemory.patch \
+    file://0001-build-properly-spell-provide-in-.wrap-files.patch \
 "
 SRC_URI[sha256sum] = "899196b5e66f03b8e25f046a7a658cd2a6851becb83f2d55345ab3281655dc0c"
 
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
index c520653..fddfd72 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
@@ -44,7 +44,7 @@
     bigbuckbunny-720p \
     tearsofsteel-1080p \
     pipewire \
-    ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "projucer", "", d)} \
+    ${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", bb.utils.contains("DISTRO_FEATURES", "x11", "projucer", "", d), "", d)} \
     libcamera \
     vorbis-tools \
     libopenmpt \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.79.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.79.bb
deleted file mode 100644
index 1304c0a..0000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.79.bb
+++ /dev/null
@@ -1,389 +0,0 @@
-SUMMARY     = "Multimedia processing server for Linux"
-DESCRIPTION = "Linux server for handling and routing audio and video streams between applications and multimedia I/O devices"
-HOMEPAGE    = "https://pipewire.org/"
-BUGTRACKER  = "https://gitlab.freedesktop.org/pipewire/pipewire/issues"
-AUTHOR      = "Wim Taymans <wtaymans@redhat.com>"
-SECTION     = "multimedia"
-
-LICENSE = "MIT & LGPL-2.1-or-later & GPL-2.0-only"
-LIC_FILES_CHKSUM = " \
-    file://LICENSE;md5=2158739e172e58dc9ab1bdd2d6ec9c72 \
-    file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a \
-"
-
-DEPENDS = "dbus ncurses"
-
-SRCREV = "b5c3f217926f9066a1afbee7eb20967dd6896c56"
-SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-inherit meson pkgconfig systemd gettext useradd
-
-USERADD_PACKAGES = "${PN}"
-
-GROUPADD_PARAM:${PN} = "--system pipewire"
-
-USERADD_PARAM:${PN} = "--system --home / --no-create-home \
-                       --comment 'PipeWire multimedia daemon' \
-                       --gid pipewire --groups audio,video \
-                       pipewire"
-
-SYSTEMD_PACKAGES = "${PN}"
-
-# For "EVL", look up https://evlproject.org/ . It involves
-# a specially prepared kernel, and is currently unavailable
-# in Yocto.
-#
-# Vulkan support is currently (as of version 0.3.44) not functional.
-#
-# manpage generation requires xmltoman, which is not available.
-#
-# The session-managers list specifies which session managers Meson
-# shall download (via git clone) and build as subprojects. In OE,
-# this is not how a session manager should be built. Instead, they
-# should be integrated as separate OE recipes. To prevent PipeWire
-# from using this Meson feature, set an empty list.
-# This does not disable support or the need for session managers,
-# it just prevents this subproject feature.
-#
-# AptX and LDAC are not available in OE. Currently, neither
-# are lv2, ROC, and libmysofa.
-#
-# The RTKit module is deprecated in favor of the newer RT module.
-# It still exists for legacy setups that still include it in
-# their PipeWire configuration files.
-EXTRA_OEMESON += " \
-    -Devl=disabled \
-    -Dtests=disabled \
-    -Dudevrulesdir=${nonarch_base_libdir}/udev/rules.d/ \
-    -Dsystemd-system-unit-dir=${systemd_system_unitdir} \
-    -Dsystemd-user-unit-dir=${systemd_user_unitdir} \
-    -Dman=disabled \
-    -Dsession-managers='[]' \
-    -Dlv2=disabled \
-    -Droc=disabled \
-    -Dbluez5-codec-aptx=disabled \
-    -Dbluez5-codec-ldac=disabled \
-    -Dlegacy-rtkit=false \
-    -Dlibmysofa=disabled \
-"
-
-# spa alsa plugin code uses typedef redefinition, which is officially a C11 feature.
-# Pipewire builds with 'c_std=gnu99' by default. Recent versions of gcc don't issue this warning in gnu99
-# mode but it looks like clang still does
-CFLAGS:append = " -Wno-typedef-redefinition"
-
-# According to wireplumber documentation only one session manager should be installed at a time
-# Possible options are media-session, which has fewer dependencies but is very simple,
-# or wireplumber, which is more powerful.
-PIPEWIRE_SESSION_MANAGER ??= "wireplumber"
-
-FFMPEG_AVAILABLE = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'ffmpeg', '', d)}"
-BLUETOOTH_AAC = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'bluez-aac', '', d)}"
-
-PACKAGECONFIG:class-target ??= " \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez bluez-opus ${BLUETOOTH_AAC}', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service systemd-user-service', '', d)} \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa vulkan pulseaudio', d)} \
-    ${PIPEWIRE_SESSION_MANAGER} \
-    ${FFMPEG_AVAILABLE} avahi flatpak gstreamer gsettings jack libusb pw-cat raop sndfile v4l2 udev volume webrtc-echo-cancelling libcamera readline \
-"
-
-# "jack" and "pipewire-jack" packageconfigs cannot be both enabled,
-# since "jack" imports libjack, and "pipewire-jack" generates
-# libjack.so* files, thus colliding with the libpack package. This
-# is why these two are marked in their respective packageconfigs
-# as being in conflict.
-PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev,,pipewire-alsa pipewire-alsa-card-profile"
-PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi"
-PACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
-PACKAGECONFIG[bluez-aac] = "-Dbluez5-codec-aac=enabled,-Dbluez5-codec-aac=disabled,fdk-aac"
-PACKAGECONFIG[bluez-opus] = "-Dbluez5-codec-opus=enabled,-Dbluez5-codec-opus=disabled,libopus"
-PACKAGECONFIG[bluez-lc3] = "-Dbluez5-codec-lc3=enabled,-Dbluez5-codec-lc3=disabled,liblc3"
-# From the pipewire git log:
-# "Some Linux phones doesn't use oFono but ModemManager to control the modem."
-# This packageconfig enables modemmanager specific code in the BlueZ backend.
-PACKAGECONFIG[bluez-backend-native-mm] = "-Dbluez5-backend-native-mm=enabled,-Dbluez5-backend-native-mm=disabled,modemmanager"
-PACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native graphviz-native"
-PACKAGECONFIG[ffmpeg] = "-Dffmpeg=enabled,-Dffmpeg=disabled,ffmpeg"
-PACKAGECONFIG[flatpak] = "-Dflatpak=enabled,-Dflatpak=disabled,glib-2.0"
-PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0"
-PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base,,gstreamer1.0-pipewire"
-PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack,,,pipewire-jack"
-PACKAGECONFIG[libcamera] = "-Dlibcamera=enabled,-Dlibcamera=disabled,libcamera libdrm"
-PACKAGECONFIG[libcanberra] = "-Dlibcanberra=enabled,-Dlibcanberra=disabled,libcanberra"
-PACKAGECONFIG[libusb] = "-Dlibusb=enabled,-Dlibusb=disabled,libusb"
-PACKAGECONFIG[media-session] = ",,,pipewire-media-session,,wireplumber"
-PACKAGECONFIG[pulseaudio] = "-Dlibpulse=enabled,-Dlibpulse=disabled,pulseaudio,,pipewire-pulse"
-PACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=enabled,-Dpipewire-alsa=disabled,alsa-lib"
-PACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=enabled -Dlibjack-path=${libdir}/${PW_MODULE_SUBDIR}/jack,-Dpipewire-jack=disabled,jack,,pipewire-jack,jack"
-PACKAGECONFIG[pw-cat] = "-Dpw-cat=enabled,-Dpw-cat=disabled"
-PACKAGECONFIG[raop] = "-Draop=enabled,-Draop=disabled,openssl"
-# Starting with version 0.3.60, readline usage can be turned off in pw-cli.
-# If it is disabled, getline() is used as a fallback.
-PACKAGECONFIG[readline] = "-Dreadline=enabled,-Dreadline=disabled,readline"
-PACKAGECONFIG[sdl2] = "-Dsdl2=enabled,-Dsdl2=disabled,libsdl2"
-PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
-PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
-PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsystemd-system-service=disabled,systemd"
-# "systemd-user-service" packageconfig will only install service
-# files to rootfs but not enable them as systemd.bbclass
-# currently lacks the feature of enabling user services.
-PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled,systemd"
-# pw-cat needs sndfile packageconfig to be enabled
-PACKAGECONFIG[udev] = "-Dudev=enabled,-Dudev=disabled,udev"
-PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
-PACKAGECONFIG[volume] = "-Dvolume=enabled,-Dvolume=disabled"
-PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-headers vulkan-loader"
-PACKAGECONFIG[webrtc-echo-cancelling] = "-Decho-cancel-webrtc=enabled,-Decho-cancel-webrtc=disabled,webrtc-audio-processing"
-PACKAGECONFIG[wireplumber] = ",,,wireplumber,,media-session"
-
-PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
-PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
-
-SPA_SUBDIR = "spa-0.2"
-PW_MODULE_SUBDIR = "pipewire-0.3"
-
-remove_unused_installed_files() {
-    # jack.conf is used by pipewire-jack (not the JACK SPA plugin).
-    # Remove it if pipewire-jack is not built to avoid creating the
-    # pipewire-jack package.
-    if ${@bb.utils.contains('PACKAGECONFIG', 'pipewire-jack', 'false', 'true', d)}; then
-        rm -f "${D}${datadir}/pipewire/jack.conf"
-    fi
-
-    # minimal.conf is an example of how to minimally configure the
-    # daemon and is not meant to be used for production.
-    rm -f "${D}${datadir}/pipewire/minimal.conf"
-}
-
-do_install[postfuncs] += "remove_unused_installed_files"
-
-python split_dynamic_packages () {
-    # Create packages for each SPA plugin. These plugins are located
-    # in individual subdirectories, so a recursive search is needed.
-    spa_libdir = d.expand('${libdir}/${SPA_SUBDIR}')
-    do_split_packages(d, spa_libdir, r'^libspa-(.*)\.so$', d.expand('${PN}-spa-plugins-%s'), 'PipeWire SPA plugin for %s', extra_depends='', recursive=True)
-
-    # Create packages for each PipeWire module.
-    pw_module_libdir = d.expand('${libdir}/${PW_MODULE_SUBDIR}')
-    do_split_packages(d, pw_module_libdir, r'^libpipewire-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'PipeWire %s module', extra_depends='', recursive=False)
-}
-
-python set_dynamic_metapkg_rdepends () {
-    import os
-    import oe.utils
-
-    if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('native', d):
-        return
-
-    # Go through all generated SPA plugin and PipeWire module packages
-    # (excluding the main package and the -meta package itself) and
-    # add them to the -meta package as RDEPENDS.
-
-    base_pn = d.getVar('PN')
-
-    spa_pn = base_pn + '-spa-plugins'
-    spa_metapkg =  spa_pn + '-meta'
-
-    pw_module_pn = base_pn + '-modules'
-    pw_module_metapkg =  pw_module_pn + '-meta'
-
-    d.setVar('ALLOW_EMPTY:' + spa_metapkg, "1")
-    d.setVar('FILES:' + spa_metapkg, "")
-
-    d.setVar('ALLOW_EMPTY:' + pw_module_metapkg, "1")
-    d.setVar('FILES:' + pw_module_metapkg, "")
-
-    blacklist = [ spa_pn, spa_metapkg, pw_module_pn, pw_module_metapkg ]
-    spa_metapkg_rdepends = []
-    pw_module_metapkg_rdepends = []
-    pkgdest = d.getVar('PKGDEST')
-
-    for pkg in oe.utils.packages_filter_out_system(d):
-        if pkg in blacklist:
-            continue
-
-        is_spa_pkg = pkg.startswith(spa_pn)
-        is_pw_module_pkg = pkg.startswith(pw_module_pn)
-        if not is_spa_pkg and not is_pw_module_pkg:
-            continue
-
-        if pkg in spa_metapkg_rdepends or pkg in pw_module_metapkg_rdepends:
-            continue
-
-        # See if the package is empty by looking at the contents of its
-        # PKGDEST subdirectory. If this subdirectory is empty, then then
-        # package is empty as well. Empty packages do not get added to
-        # the meta package's RDEPENDS.
-        pkgdir = os.path.join(pkgdest, pkg)
-        if os.path.exists(pkgdir):
-            dir_contents = os.listdir(pkgdir) or []
-        else:
-            dir_contents = []
-        is_empty = len(dir_contents) == 0
-        if not is_empty:
-            if is_spa_pkg:
-                spa_metapkg_rdepends.append(pkg)
-            if is_pw_module_pkg:
-                pw_module_metapkg_rdepends.append(pkg)
-
-    d.setVar('RDEPENDS:' + spa_metapkg, ' '.join(spa_metapkg_rdepends))
-    d.setVar('DESCRIPTION:' + spa_metapkg, spa_pn + ' meta package')
-
-    d.setVar('RDEPENDS:' + pw_module_metapkg, ' '.join(pw_module_metapkg_rdepends))
-    d.setVar('DESCRIPTION:' + pw_module_metapkg, pw_module_pn + ' meta package')
-}
-
-PACKAGES =+ "\
-    libpipewire \
-    ${PN}-tools \
-    ${PN}-pulse \
-    ${PN}-alsa \
-    ${PN}-jack \
-    ${PN}-spa-plugins \
-    ${PN}-spa-plugins-meta \
-    ${PN}-spa-tools \
-    ${PN}-modules \
-    ${PN}-modules-meta \
-    ${PN}-alsa-card-profile \
-    ${PN}-v4l2 \
-    ${PN}-aes67 \
-    gstreamer1.0-pipewire \
-"
-
-PACKAGES_DYNAMIC = "^${PN}-spa-plugins.* ^${PN}-modules.*"
-PACKAGES_DYNAMIC:class-native = ""
-
-SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd-system-service', 'pipewire.service', '', d)}"
-CONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf"
-FILES:${PN} = " \
-    ${datadir}/pipewire \
-    ${systemd_system_unitdir}/pipewire* \
-    ${systemd_user_unitdir} \
-    ${bindir}/pipewire \
-    ${bindir}/pipewire-avb \
-"
-
-RRECOMMENDS:${PN}:class-target += " \
-	pipewire-modules-meta \
-	pipewire-spa-plugins-meta \
-"
-
-FILES:${PN}-dev += " \
-    ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so \
-"
-
-CONFFILES:libpipewire += "${datadir}/pipewire/client.conf"
-FILES:libpipewire = " \
-    ${datadir}/pipewire/client.conf \
-    ${libdir}/libpipewire-*.so.* \
-"
-# Add the bare minimum modules and plugins required to be able
-# to use libpipewire. Without these, it is essentially unusable.
-RDEPENDS:libpipewire += " \
-    ${PN}-modules-client-node \
-    ${PN}-modules-protocol-native \
-    ${PN}-spa-plugins-support \
-"
-
-FILES:${PN}-tools = " \
-    ${bindir}/pw-cat \
-    ${bindir}/pw-cli \
-    ${bindir}/pw-config \
-    ${bindir}/pw-dot \
-    ${bindir}/pw-dsdplay \
-    ${bindir}/pw-dump \
-    ${bindir}/pw-encplay \
-    ${bindir}/pw-link \
-    ${bindir}/pw-loopback \
-    ${bindir}/pw-metadata \
-    ${bindir}/pw-mididump \
-    ${bindir}/pw-midiplay \
-    ${bindir}/pw-midirecord \
-    ${bindir}/pw-mon \
-    ${bindir}/pw-play \
-    ${bindir}/pw-profiler \
-    ${bindir}/pw-record \
-    ${bindir}/pw-reserve \
-    ${bindir}/pw-top \
-"
-
-# This is a shim daemon that is intended to be used as a
-# drop-in PulseAudio replacement, providing a pulseaudio-compatible
-# socket that can be used by applications that use libpulse.
-CONFFILES:${PN}-pulse += "${datadir}/pipewire/pipewire-pulse.conf"
-FILES:${PN}-pulse = " \
-    ${datadir}/pipewire/pipewire-pulse.conf \
-    ${systemd_system_unitdir}/pipewire-pulse.* \
-    ${systemd_user_unitdir}/pipewire-pulse.* \
-    ${bindir}/pipewire-pulse \
-"
-RDEPENDS:${PN}-pulse += " \
-    ${PN}-modules-protocol-pulse \
-"
-
-# ALSA plugin to redirect audio to pipewire.
-FILES:${PN}-alsa = "\
-    ${libdir}/alsa-lib/* \
-    ${datadir}/alsa/alsa.conf.d/* \
-"
-
-# JACK drop-in libraries to redirect audio to pipewire.
-CONFFILES:${PN}-jack = "${datadir}/pipewire/jack.conf"
-FILES:${PN}-jack = "\
-    ${bindir}/pw-jack \
-    ${datadir}/pipewire/jack.conf \
-    ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \
-"
-
-# Dynamic SPA plugin packages (see set_dynamic_metapkg_rdepends).
-FILES:${PN}-spa-plugins = ""
-RRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta"
-
-FILES:${PN}-spa-plugins-bluez5 += " \
-    ${datadir}/${SPA_SUBDIR}/bluez5/* \
-"
-
-FILES:${PN}-spa-tools = " \
-    ${bindir}/spa-* \
-"
-
-# Dynamic PipeWire module packages (see set_dynamic_metapkg_rdepends).
-FILES:${PN}-modules = ""
-RRECOMMENDS:${PN}-modules += "${PN}-modules-meta"
-
-CONFFILES:${PN}-modules-rt = "${datadir}/pipewire/client-rt.conf"
-FILES:${PN}-modules-rt += " \
-    ${datadir}/pipewire/client-rt.conf \
-    ${sysconfdir}/security/limits.d/* \
-    "
-
-CONFFILES:${PN}-modules-filter-chain = "${datadir}/pipewire/filter-chain/*"
-FILES:${PN}-modules-filter-chain += " \
-    ${datadir}/pipewire/filter-chain/* \
-"
-
-FILES:${PN}-alsa-card-profile = " \
-    ${datadir}/alsa-card-profile/* \
-    ${nonarch_base_libdir}/udev/rules.d/90-pipewire-alsa.rules \
-"
-
-# V4L2 interface emulator for sending/receiving data between PipeWire and V4L2 applications.
-FILES:${PN}-v4l2 += " \
-    ${bindir}/pw-v4l2 \
-    ${libdir}/${PW_MODULE_SUBDIR}/v4l2/libpw-v4l2.so \
-"
-
-# AES67 is a standard for audio over IP, from the Audio Engineering Society (AES).
-FILES:${PN}-aes67 += " \
-    ${bindir}/pipewire-aes67 \
-"
-
-FILES:gstreamer1.0-pipewire = " \
-    ${libdir}/gstreamer-1.0/* \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.80.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.80.bb
new file mode 100644
index 0000000..a134820
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.80.bb
@@ -0,0 +1,389 @@
+SUMMARY     = "Multimedia processing server for Linux"
+DESCRIPTION = "Linux server for handling and routing audio and video streams between applications and multimedia I/O devices"
+HOMEPAGE    = "https://pipewire.org/"
+BUGTRACKER  = "https://gitlab.freedesktop.org/pipewire/pipewire/issues"
+AUTHOR      = "Wim Taymans <wtaymans@redhat.com>"
+SECTION     = "multimedia"
+
+LICENSE = "MIT & LGPL-2.1-or-later & GPL-2.0-only"
+LIC_FILES_CHKSUM = " \
+    file://LICENSE;md5=2158739e172e58dc9ab1bdd2d6ec9c72 \
+    file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a \
+"
+
+DEPENDS = "dbus ncurses"
+
+SRCREV = "35cca08d2bef14248ac25ff2a1efb0bf274d0a6f"
+SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd gettext useradd
+
+USERADD_PACKAGES = "${PN}"
+
+GROUPADD_PARAM:${PN} = "--system pipewire"
+
+USERADD_PARAM:${PN} = "--system --home / --no-create-home \
+                       --comment 'PipeWire multimedia daemon' \
+                       --gid pipewire --groups audio,video \
+                       pipewire"
+
+SYSTEMD_PACKAGES = "${PN}"
+
+# For "EVL", look up https://evlproject.org/ . It involves
+# a specially prepared kernel, and is currently unavailable
+# in Yocto.
+#
+#
+# manpage generation requires xmltoman, which is not available.
+#
+# The session-managers list specifies which session managers Meson
+# shall download (via git clone) and build as subprojects. In OE,
+# this is not how a session manager should be built. Instead, they
+# should be integrated as separate OE recipes. To prevent PipeWire
+# from using this Meson feature, set an empty list.
+# This does not disable support or the need for session managers,
+# it just prevents this subproject feature.
+#
+# AptX and LDAC are not available in OE. Currently, neither
+# are lv2, ROC, and libmysofa.
+#
+# The RTKit module is deprecated in favor of the newer RT module.
+# It still exists for legacy setups that still include it in
+# their PipeWire configuration files.
+EXTRA_OEMESON += " \
+    -Devl=disabled \
+    -Dtests=disabled \
+    -Dudevrulesdir=${nonarch_base_libdir}/udev/rules.d/ \
+    -Dsystemd-system-unit-dir=${systemd_system_unitdir} \
+    -Dsystemd-user-unit-dir=${systemd_user_unitdir} \
+    -Dman=disabled \
+    -Dsession-managers='[]' \
+    -Dlv2=disabled \
+    -Droc=disabled \
+    -Dbluez5-codec-aptx=disabled \
+    -Dbluez5-codec-ldac=disabled \
+    -Dlegacy-rtkit=false \
+    -Dlibmysofa=disabled \
+"
+
+# spa alsa plugin code uses typedef redefinition, which is officially a C11 feature.
+# Pipewire builds with 'c_std=gnu99' by default. Recent versions of gcc don't issue this warning in gnu99
+# mode but it looks like clang still does
+CFLAGS:append = " -Wno-typedef-redefinition"
+
+# According to wireplumber documentation only one session manager should be installed at a time
+# Possible options are media-session, which has fewer dependencies but is very simple,
+# or wireplumber, which is more powerful.
+PIPEWIRE_SESSION_MANAGER ??= "wireplumber"
+
+FFMPEG_AVAILABLE = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'ffmpeg', '', d)}"
+BLUETOOTH_AAC = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'bluez-aac', '', d)}"
+
+PACKAGECONFIG:class-target ??= " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez bluez-opus ${BLUETOOTH_AAC}', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service systemd-user-service', '', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa vulkan pulseaudio', d)} \
+    ${PIPEWIRE_SESSION_MANAGER} \
+    ${FFMPEG_AVAILABLE} avahi flatpak gstreamer gsettings jack libusb pw-cat raop sndfile v4l2 udev volume webrtc-echo-cancelling libcamera readline \
+"
+
+# "jack" and "pipewire-jack" packageconfigs cannot be both enabled,
+# since "jack" imports libjack, and "pipewire-jack" generates
+# libjack.so* files, thus colliding with the libpack package. This
+# is why these two are marked in their respective packageconfigs
+# as being in conflict.
+PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev,,pipewire-alsa pipewire-alsa-card-profile"
+PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi"
+PACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
+PACKAGECONFIG[bluez-aac] = "-Dbluez5-codec-aac=enabled,-Dbluez5-codec-aac=disabled,fdk-aac"
+PACKAGECONFIG[bluez-opus] = "-Dbluez5-codec-opus=enabled,-Dbluez5-codec-opus=disabled,libopus"
+PACKAGECONFIG[bluez-lc3] = "-Dbluez5-codec-lc3=enabled,-Dbluez5-codec-lc3=disabled,liblc3"
+# From the pipewire git log:
+# "Some Linux phones doesn't use oFono but ModemManager to control the modem."
+# This packageconfig enables modemmanager specific code in the BlueZ backend.
+PACKAGECONFIG[bluez-backend-native-mm] = "-Dbluez5-backend-native-mm=enabled,-Dbluez5-backend-native-mm=disabled,modemmanager"
+PACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native graphviz-native"
+PACKAGECONFIG[ffmpeg] = "-Dffmpeg=enabled,-Dffmpeg=disabled,ffmpeg"
+PACKAGECONFIG[flatpak] = "-Dflatpak=enabled,-Dflatpak=disabled,glib-2.0"
+PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0"
+PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base,,gstreamer1.0-pipewire"
+PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack,,,pipewire-jack"
+PACKAGECONFIG[libcamera] = "-Dlibcamera=enabled,-Dlibcamera=disabled,libcamera libdrm"
+PACKAGECONFIG[libcanberra] = "-Dlibcanberra=enabled,-Dlibcanberra=disabled,libcanberra"
+PACKAGECONFIG[libusb] = "-Dlibusb=enabled,-Dlibusb=disabled,libusb"
+PACKAGECONFIG[media-session] = ",,,pipewire-media-session,,wireplumber"
+PACKAGECONFIG[pulseaudio] = "-Dlibpulse=enabled,-Dlibpulse=disabled,pulseaudio,,pipewire-pulse"
+PACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=enabled,-Dpipewire-alsa=disabled,alsa-lib"
+PACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=enabled -Dlibjack-path=${libdir}/${PW_MODULE_SUBDIR}/jack,-Dpipewire-jack=disabled,jack,,pipewire-jack,jack"
+PACKAGECONFIG[pw-cat] = "-Dpw-cat=enabled,-Dpw-cat=disabled"
+PACKAGECONFIG[raop] = "-Draop=enabled,-Draop=disabled,openssl"
+# Starting with version 0.3.60, readline usage can be turned off in pw-cli.
+# If it is disabled, getline() is used as a fallback.
+PACKAGECONFIG[readline] = "-Dreadline=enabled,-Dreadline=disabled,readline"
+PACKAGECONFIG[sdl2] = "-Dsdl2=enabled,-Dsdl2=disabled,libsdl2"
+PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1"
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
+PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsystemd-system-service=disabled,systemd"
+# "systemd-user-service" packageconfig will only install service
+# files to rootfs but not enable them as systemd.bbclass
+# currently lacks the feature of enabling user services.
+PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled,systemd"
+# pw-cat needs sndfile packageconfig to be enabled
+PACKAGECONFIG[udev] = "-Dudev=enabled,-Dudev=disabled,udev"
+PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
+PACKAGECONFIG[volume] = "-Dvolume=enabled,-Dvolume=disabled"
+PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-headers vulkan-loader"
+PACKAGECONFIG[webrtc-echo-cancelling] = "-Decho-cancel-webrtc=enabled,-Decho-cancel-webrtc=disabled,webrtc-audio-processing-1"
+PACKAGECONFIG[wireplumber] = ",,,wireplumber,,media-session"
+
+PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
+PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
+
+SPA_SUBDIR = "spa-0.2"
+PW_MODULE_SUBDIR = "pipewire-0.3"
+
+remove_unused_installed_files() {
+    # jack.conf is used by pipewire-jack (not the JACK SPA plugin).
+    # Remove it if pipewire-jack is not built to avoid creating the
+    # pipewire-jack package.
+    if ${@bb.utils.contains('PACKAGECONFIG', 'pipewire-jack', 'false', 'true', d)}; then
+        rm -f "${D}${datadir}/pipewire/jack.conf"
+    fi
+
+    # minimal.conf is an example of how to minimally configure the
+    # daemon and is not meant to be used for production.
+    rm -f "${D}${datadir}/pipewire/minimal.conf"
+}
+
+do_install[postfuncs] += "remove_unused_installed_files"
+
+python split_dynamic_packages () {
+    # Create packages for each SPA plugin. These plugins are located
+    # in individual subdirectories, so a recursive search is needed.
+    spa_libdir = d.expand('${libdir}/${SPA_SUBDIR}')
+    do_split_packages(d, spa_libdir, r'^libspa-(.*)\.so$', d.expand('${PN}-spa-plugins-%s'), 'PipeWire SPA plugin for %s', extra_depends='', recursive=True)
+
+    # Create packages for each PipeWire module.
+    pw_module_libdir = d.expand('${libdir}/${PW_MODULE_SUBDIR}')
+    do_split_packages(d, pw_module_libdir, r'^libpipewire-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'PipeWire %s module', extra_depends='', recursive=False)
+}
+
+python set_dynamic_metapkg_rdepends () {
+    import os
+    import oe.utils
+
+    if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('native', d):
+        return
+
+    # Go through all generated SPA plugin and PipeWire module packages
+    # (excluding the main package and the -meta package itself) and
+    # add them to the -meta package as RDEPENDS.
+
+    base_pn = d.getVar('PN')
+
+    spa_pn = base_pn + '-spa-plugins'
+    spa_metapkg =  spa_pn + '-meta'
+
+    pw_module_pn = base_pn + '-modules'
+    pw_module_metapkg =  pw_module_pn + '-meta'
+
+    d.setVar('ALLOW_EMPTY:' + spa_metapkg, "1")
+    d.setVar('FILES:' + spa_metapkg, "")
+
+    d.setVar('ALLOW_EMPTY:' + pw_module_metapkg, "1")
+    d.setVar('FILES:' + pw_module_metapkg, "")
+
+    blacklist = [ spa_pn, spa_metapkg, pw_module_pn, pw_module_metapkg ]
+    spa_metapkg_rdepends = []
+    pw_module_metapkg_rdepends = []
+    pkgdest = d.getVar('PKGDEST')
+
+    for pkg in oe.utils.packages_filter_out_system(d):
+        if pkg in blacklist:
+            continue
+
+        is_spa_pkg = pkg.startswith(spa_pn)
+        is_pw_module_pkg = pkg.startswith(pw_module_pn)
+        if not is_spa_pkg and not is_pw_module_pkg:
+            continue
+
+        if pkg in spa_metapkg_rdepends or pkg in pw_module_metapkg_rdepends:
+            continue
+
+        # See if the package is empty by looking at the contents of its
+        # PKGDEST subdirectory. If this subdirectory is empty, then then
+        # package is empty as well. Empty packages do not get added to
+        # the meta package's RDEPENDS.
+        pkgdir = os.path.join(pkgdest, pkg)
+        if os.path.exists(pkgdir):
+            dir_contents = os.listdir(pkgdir) or []
+        else:
+            dir_contents = []
+        is_empty = len(dir_contents) == 0
+        if not is_empty:
+            if is_spa_pkg:
+                spa_metapkg_rdepends.append(pkg)
+            if is_pw_module_pkg:
+                pw_module_metapkg_rdepends.append(pkg)
+
+    d.setVar('RDEPENDS:' + spa_metapkg, ' '.join(spa_metapkg_rdepends))
+    d.setVar('DESCRIPTION:' + spa_metapkg, spa_pn + ' meta package')
+
+    d.setVar('RDEPENDS:' + pw_module_metapkg, ' '.join(pw_module_metapkg_rdepends))
+    d.setVar('DESCRIPTION:' + pw_module_metapkg, pw_module_pn + ' meta package')
+}
+
+PACKAGES =+ "\
+    libpipewire \
+    ${PN}-tools \
+    ${PN}-pulse \
+    ${PN}-alsa \
+    ${PN}-jack \
+    ${PN}-spa-plugins \
+    ${PN}-spa-plugins-meta \
+    ${PN}-spa-tools \
+    ${PN}-modules \
+    ${PN}-modules-meta \
+    ${PN}-alsa-card-profile \
+    ${PN}-v4l2 \
+    ${PN}-aes67 \
+    gstreamer1.0-pipewire \
+"
+
+PACKAGES_DYNAMIC = "^${PN}-spa-plugins.* ^${PN}-modules.*"
+PACKAGES_DYNAMIC:class-native = ""
+
+SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd-system-service', 'pipewire.service', '', d)}"
+CONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf"
+FILES:${PN} = " \
+    ${datadir}/pipewire \
+    ${systemd_system_unitdir}/pipewire* \
+    ${systemd_user_unitdir} \
+    ${bindir}/pipewire \
+    ${bindir}/pipewire-avb \
+    ${bindir}/pipewire-vulkan \
+"
+
+RRECOMMENDS:${PN}:class-target += " \
+	pipewire-modules-meta \
+	pipewire-spa-plugins-meta \
+"
+
+FILES:${PN}-dev += " \
+    ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so \
+"
+
+CONFFILES:libpipewire += "${datadir}/pipewire/client.conf"
+FILES:libpipewire = " \
+    ${datadir}/pipewire/client.conf \
+    ${libdir}/libpipewire-*.so.* \
+"
+# Add the bare minimum modules and plugins required to be able
+# to use libpipewire. Without these, it is essentially unusable.
+RDEPENDS:libpipewire += " \
+    ${PN}-modules-client-node \
+    ${PN}-modules-protocol-native \
+    ${PN}-spa-plugins-support \
+"
+
+FILES:${PN}-tools = " \
+    ${bindir}/pw-cat \
+    ${bindir}/pw-cli \
+    ${bindir}/pw-config \
+    ${bindir}/pw-dot \
+    ${bindir}/pw-dsdplay \
+    ${bindir}/pw-dump \
+    ${bindir}/pw-encplay \
+    ${bindir}/pw-link \
+    ${bindir}/pw-loopback \
+    ${bindir}/pw-metadata \
+    ${bindir}/pw-mididump \
+    ${bindir}/pw-midiplay \
+    ${bindir}/pw-midirecord \
+    ${bindir}/pw-mon \
+    ${bindir}/pw-play \
+    ${bindir}/pw-profiler \
+    ${bindir}/pw-record \
+    ${bindir}/pw-reserve \
+    ${bindir}/pw-top \
+"
+
+# This is a shim daemon that is intended to be used as a
+# drop-in PulseAudio replacement, providing a pulseaudio-compatible
+# socket that can be used by applications that use libpulse.
+CONFFILES:${PN}-pulse += "${datadir}/pipewire/pipewire-pulse.conf"
+FILES:${PN}-pulse = " \
+    ${datadir}/pipewire/pipewire-pulse.conf \
+    ${systemd_system_unitdir}/pipewire-pulse.* \
+    ${systemd_user_unitdir}/pipewire-pulse.* \
+    ${bindir}/pipewire-pulse \
+"
+RDEPENDS:${PN}-pulse += " \
+    ${PN}-modules-protocol-pulse \
+"
+
+# ALSA plugin to redirect audio to pipewire.
+FILES:${PN}-alsa = "\
+    ${libdir}/alsa-lib/* \
+    ${datadir}/alsa/alsa.conf.d/* \
+"
+
+# JACK drop-in libraries to redirect audio to pipewire.
+CONFFILES:${PN}-jack = "${datadir}/pipewire/jack.conf"
+FILES:${PN}-jack = "\
+    ${bindir}/pw-jack \
+    ${datadir}/pipewire/jack.conf \
+    ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \
+"
+
+# Dynamic SPA plugin packages (see set_dynamic_metapkg_rdepends).
+FILES:${PN}-spa-plugins = ""
+RRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta"
+
+FILES:${PN}-spa-plugins-bluez5 += " \
+    ${datadir}/${SPA_SUBDIR}/bluez5/* \
+"
+
+FILES:${PN}-spa-tools = " \
+    ${bindir}/spa-* \
+"
+
+# Dynamic PipeWire module packages (see set_dynamic_metapkg_rdepends).
+FILES:${PN}-modules = ""
+RRECOMMENDS:${PN}-modules += "${PN}-modules-meta"
+
+CONFFILES:${PN}-modules-rt = "${datadir}/pipewire/client-rt.conf"
+FILES:${PN}-modules-rt += " \
+    ${datadir}/pipewire/client-rt.conf \
+    ${sysconfdir}/security/limits.d/* \
+    "
+
+CONFFILES:${PN}-modules-filter-chain = "${datadir}/pipewire/filter-chain/*"
+FILES:${PN}-modules-filter-chain += " \
+    ${datadir}/pipewire/filter-chain/* \
+"
+
+FILES:${PN}-alsa-card-profile = " \
+    ${datadir}/alsa-card-profile/* \
+    ${nonarch_base_libdir}/udev/rules.d/90-pipewire-alsa.rules \
+"
+
+# V4L2 interface emulator for sending/receiving data between PipeWire and V4L2 applications.
+FILES:${PN}-v4l2 += " \
+    ${bindir}/pw-v4l2 \
+    ${libdir}/${PW_MODULE_SUBDIR}/v4l2/libpw-v4l2.so \
+"
+
+# AES67 is a standard for audio over IP, from the Audio Engineering Society (AES).
+FILES:${PN}-aes67 += " \
+    ${bindir}/pipewire-aes67 \
+"
+
+FILES:gstreamer1.0-pipewire = " \
+    ${libdir}/gstreamer-1.0/* \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-po-Fix-invalid-.oc-translation-format-string.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-po-Fix-invalid-.oc-translation-format-string.patch
new file mode 100644
index 0000000..866ed03
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-po-Fix-invalid-.oc-translation-format-string.patch
@@ -0,0 +1,44 @@
+From fc4bd86bea0b81da0b6fa5be0a352aecc8fa690a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 9 Sep 2023 20:13:55 -0700
+Subject: [PATCH] po: Fix invalid .oc translation format string
+
+gettext can validate format strings now [1] with 0.22 and newer release
+
+[1] https://savannah.gnu.org/bugs/index.php?64332#comment1
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ po/oc.po | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/po/oc.po b/po/oc.po
+index 667696cfe7..ddb1677d8a 100644
+--- a/po/oc.po
++++ b/po/oc.po
+@@ -5298,18 +5298,18 @@ msgstr "Comanda+"
+ #: src/misc/update.c:482
+ #, c-format
+ msgid "%.1f GiB"
+-msgstr "%.lf Gio"
++msgstr "%.1f Gio"
+ 
+ #: src/misc/update.c:484
+ #, c-format
+ msgid "%.1f MiB"
+-msgstr "%.lf Mio"
++msgstr "%.1f Mio"
+ 
+ #: src/misc/update.c:486 modules/gui/macosx/VLCPlaylistInfo.m:138
+ #: modules/gui/macosx/VLCPlaylistInfo.m:140
+ #, c-format
+ msgid "%.1f KiB"
+-msgstr "%.lf Kio"
++msgstr "%.1f Kio"
+ 
+ #: src/misc/update.c:488
+ #, c-format
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_3.0.18.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_3.0.18.bb
index 92f0554..12b3287 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_3.0.18.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_3.0.18.bb
@@ -23,6 +23,7 @@
            file://0004-Use-packageconfig-to-detect-mmal-support.patch \
            file://0005-ioctl-does-not-have-same-signature-between-glibc-and.patch \
            file://0006-configure-Disable-incompatible-function-pointer-type.patch \
+           file://0001-po-Fix-invalid-.oc-translation-format-string.patch \
 "
 SRCREV = "e9eceaed4d838dbd84638bfb2e4bdd08294163b1"
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-Fix-return-type-errors.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-Fix-return-type-errors.patch
new file mode 100644
index 0000000..37b4db6
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-Fix-return-type-errors.patch
@@ -0,0 +1,95 @@
+From b6ad4b7086a6487b36d626248322f4c9d5bf420a Mon Sep 17 00:00:00 2001
+From: "thomas.georgec" <thomas.georgec@lge.com>
+Date: Sun, 12 Mar 2023 14:28:50 +0530
+Subject: [PATCH] Fix return-type errors
+
+Fix "control reaches end of non-void function" in code when -Werror=return-type
+is used.
+
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc: In function 'float webrtc::{anonymous}::GetLevel(const webrtc::VadLevelAnalyzer::Result&, LevelEstimatorType)':
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc:45:1: error: control reaches end of non-void function [-Werror=return-type]
+     45 | }
+        | ^
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/audio_processing_impl.cc: In function 'webrtc::GainControl::Mode webrtc::{anonymous}::Agc1ConfigModeToInterfaceMode(webrtc::AudioProcessing::Config::GainController1::Mode)':
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/audio_processing_impl.cc:117:1: error: control reaches end of non-void function [-Werror=return-type]
+    117 | }
+        | ^
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/audio_processing_impl.cc: In lambda function:
+  webrtc-audio-processing-1.3/webrtc/modules/audio_processing/audio_processing_impl.cc:1853:13: error: control reaches end of non-void function  -Werror=return-type]
+   1853 |             default:
+        |             ^~~~~~~
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/28]
+
+ .../audio_processing/agc2/adaptive_mode_level_estimator.cc  | 2 ++
+ webrtc/modules/audio_processing/audio_processing_impl.cc    | 3 +++
+ webrtc/modules/audio_processing/include/audio_processing.cc | 6 ++++++
+ 3 files changed, 11 insertions(+)
+
+diff --git a/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc b/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
+index f09f63b..9cdf6ca 100644
+--- a/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
++++ b/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc
+@@ -42,6 +42,8 @@ float GetLevel(const VadLevelAnalyzer::Result& vad_level,
+       return vad_level.peak_dbfs;
+       break;
+   }
++  RTC_NOTREACHED();
++  __builtin_unreachable ();
+ }
+ 
+ }  // namespace
+diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc
+index 67208df..3b8262a 100644
+--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
++++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
+@@ -114,6 +114,8 @@ GainControl::Mode Agc1ConfigModeToInterfaceMode(
+     case Agc1Config::kFixedDigital:
+       return GainControl::kFixedDigital;
+   }
++  RTC_NOTREACHED();
++  __builtin_unreachable ();
+ }
+ 
+ // Maximum lengths that frame of samples being passed from the render side to
+@@ -1852,6 +1854,7 @@ void AudioProcessingImpl::InitializeNoiseSuppressor() {
+               return NsConfig::SuppressionLevel::k21dB;
+             default:
+               RTC_NOTREACHED();
++              __builtin_unreachable ();
+           }
+         };
+ 
+diff --git a/webrtc/modules/audio_processing/include/audio_processing.cc b/webrtc/modules/audio_processing/include/audio_processing.cc
+index 8854415..cc8752b 100644
+--- a/webrtc/modules/audio_processing/include/audio_processing.cc
++++ b/webrtc/modules/audio_processing/include/audio_processing.cc
+@@ -28,6 +28,8 @@ std::string NoiseSuppressionLevelToString(
+     case AudioProcessing::Config::NoiseSuppression::Level::kVeryHigh:
+       return "VeryHigh";
+   }
++  RTC_NOTREACHED();
++  __builtin_unreachable ();
+ }
+ 
+ std::string GainController1ModeToString(
+@@ -40,6 +42,8 @@ std::string GainController1ModeToString(
+     case AudioProcessing::Config::GainController1::Mode::kFixedDigital:
+       return "FixedDigital";
+   }
++  RTC_NOTREACHED();
++  __builtin_unreachable ();
+ }
+ 
+ std::string GainController2LevelEstimatorToString(
+@@ -50,6 +54,8 @@ std::string GainController2LevelEstimatorToString(
+     case AudioProcessing::Config::GainController2::LevelEstimator::kPeak:
+       return "Peak";
+   }
++  RTC_NOTREACHED();
++  __builtin_unreachable ();
+ }
+ 
+ int GetDefaultMaxInternalRate() {
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-add-missing-header-for-musl.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-add-missing-header-for-musl.patch
new file mode 100644
index 0000000..ef1d454
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1/0001-add-missing-header-for-musl.patch
@@ -0,0 +1,33 @@
+From 141fb5cbdaa6a883a61b5bf390c849159fc77605 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Thu, 14 Sep 2023 16:12:32 +0200
+Subject: [PATCH] file_wrapper.h: add missing include for musl
+
+this fixes:
+| In file included from ../webrtc-audio-processing-1.3/webrtc/rtc_base/system/file_wrapper.cc:11:
+| ../webrtc-audio-processing-1.3/webrtc/rtc_base/system/file_wrapper.h:86:21: error: 'int64_t' has not been declared
+
+if built with musl libc
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/37]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ webrtc/rtc_base/system/file_wrapper.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/webrtc/rtc_base/system/file_wrapper.h b/webrtc/rtc_base/system/file_wrapper.h
+index 42c463c..c34d366 100644
+--- a/webrtc/rtc_base/system/file_wrapper.h
++++ b/webrtc/rtc_base/system/file_wrapper.h
+@@ -13,6 +13,7 @@
+ 
+ #include <stddef.h>
+ #include <stdio.h>
++#include <cstdint>
+ 
+ #include <string>
+ 
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1_1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1_1.3.bb
new file mode 100644
index 0000000..c56ca53
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing-1_1.3.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Audio processing bits of the WebRTC reference implementation"
+HOMEPAGE = "https://www.freedesktop.org/software/pulseaudio/webrtc-audio-processing/"
+SECTION = "audio"
+
+DEPENDS = "abseil-cpp"
+DEPENDS:append:libc-musl = " libexecinfo"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da08a38a32a340c5d91e13ee86a118f2"
+
+SRC_URI = " \
+    http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/webrtc-audio-processing-${PV}.tar.xz \
+    file://0001-add-missing-header-for-musl.patch \
+    file://0001-Fix-return-type-errors.patch \
+"
+SRC_URI[sha256sum] = "2365e93e778d7b61b5d6e02d21c47d97222e9c7deff9e1d0838ad6ec2e86f1b9"
+S = "${WORKDIR}/webrtc-audio-processing-${PV}"
+
+LDFLAGS:append:libc-musl = " -lexecinfo"
+
+inherit meson pkgconfig
diff --git a/meta-openembedded/meta-networking/conf/layer.conf b/meta-openembedded/meta-networking/conf/layer.conf
index 12ce08c..2343179 100644
--- a/meta-openembedded/meta-networking/conf/layer.conf
+++ b/meta-openembedded/meta-networking/conf/layer.conf
@@ -22,6 +22,8 @@
 
 SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
   wireguard-tools->wireguard-module \
+  mdio-tools->mdio-netlink \
+  ot-br-posix->ipset \
 "
 BBFILES_DYNAMIC += " \
     meta-python:${LAYERDIR}/dynamic-layers/meta-python/recipes-*/*/*.bb \
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2894.patch b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2894.patch
new file mode 100644
index 0000000..7374cbd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2894.patch
@@ -0,0 +1,25 @@
+From: Joachim Zobel <jz-2017@heute-morgen.de>
+Date: Wed, 13 Sep 2023 09:55:34 +0200
+Subject: [PATCH] Link correctly with shared websockets library if needed see:
+ https://github.com/eclipse/mosquitto/pull/2751
+
+Patch contributed by Joachim Zobel <jz-2017@heute-morgen.de> and  Daniel Engberg <daniel.engberg.lists@pyret.net>
+---
+Upstream-Status: Pending
+
+ src/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 9380a04..dce8313 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -200,7 +200,7 @@ if (WITH_WEBSOCKETS)
+ 			link_directories(${mosquitto_SOURCE_DIR})
+ 		endif (WIN32)
+ 	else (STATIC_WEBSOCKETS)
+-		set (MOSQ_LIBS ${MOSQ_LIBS} websockets)
++		set (MOSQ_LIBS ${MOSQ_LIBS} websockets_shared)
+ 	endif (STATIC_WEBSOCKETS)
+ endif (WITH_WEBSOCKETS)
+ 
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2895.patch b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2895.patch
new file mode 100644
index 0000000..853f881
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/2895.patch
@@ -0,0 +1,27 @@
+From: Joachim Zobel <jz-2017@heute-morgen.de>
+Date: Wed, 13 Sep 2023 10:05:43 +0200
+Subject: [PATCH] Mosquitto now waits for network-online when starting
+ (Closes: #1036450)
+
+See: https://github.com/eclipse/mosquitto/issues/2878
+---
+Upstream-Status: Pending
+
+ service/systemd/mosquitto.service.simple | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/service/systemd/mosquitto.service.simple b/service/systemd/mosquitto.service.simple
+index 15ee0d6..c2a330b 100644
+--- a/service/systemd/mosquitto.service.simple
++++ b/service/systemd/mosquitto.service.simple
+@@ -1,8 +1,8 @@
+ [Unit]
+ Description=Mosquitto MQTT Broker
+ Documentation=man:mosquitto.conf(5) man:mosquitto(8)
+-After=network.target
+-Wants=network.target
++After=network-online.target
++Wants=network-online.target
+ 
+ [Service]
+ ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/mosquitto.init b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/mosquitto.init
index 9d5963c..d0da219 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/mosquitto.init
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/files/mosquitto.init
@@ -1,18 +1,18 @@
-#! /bin/sh
+#!/bin/sh
 
 # Based on the Debian initscript for mosquitto
 
 ### BEGIN INIT INFO
-# Provides:         mosquitto
-# Required-Start:   $remote_fs $syslog
-# Required-Stop:    $remote_fs $syslog
-# Default-Start:    2 3 4 5
-# Default-Stop:     0 1 6
-# Short-Description:    mosquitto MQTT message broker
-# Description: 
-#  This is a message broker that supports version 3.1/3.1.1 of the MQ Telemetry
+# Provides:       mosquitto
+# Required-Start: $remote_fs $syslog
+# Required-Stop:  $remote_fs $syslog
+# Default-Start:  2 3 4 5
+# Default-Stop:   0 1 6
+# Short-Description: mosquitto MQTT 3.1/3.1.1 message broker
+# Description:
+#  This is a message broker that supports version 3.1 of the MQ Telemetry
 #  Transport (MQTT) protocol.
-#  
+#
 #  MQTT provides a method of carrying out messaging using a publish/subscribe
 #  model. It is lightweight, both in terms of bandwidth usage and ease of
 #  implementation. This makes it particularly useful at the edge of the network
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.15.bb b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.15.bb
deleted file mode 100644
index d06dd2d..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.15.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-SUMMARY = "Open source MQTT implementation"
-DESCRIPTION = "Mosquitto is an open source (Eclipse licensed) message broker \
-that implements the MQ Telemetry Transport protocol version 3.1, 3.1.1 and \
-5, providing both an MQTT broker and several command-line clients. MQTT \
-provides a lightweight method of carrying out messaging using a \
-publish/subscribe model. "
-HOMEPAGE = "http://mosquitto.org/"
-SECTION = "console/network"
-LICENSE = "EPL-2.0 | EDL-1.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ca9a8f366c6babf593e374d0d7d58749 \
-                    file://edl-v10;md5=9f6accb1afcb570f8be65039e2fcd49e \
-                    file://epl-v20;md5=2dd765ca47a05140be15ebafddbeadfe \
-                    file://NOTICE.md;md5=a7a91b4754c6f7995020d1b49bc829c6 \
-"
-DEPENDS = "uthash cjson"
-
-SRC_URI = "http://mosquitto.org/files/source/mosquitto-${PV}.tar.gz \
-           file://mosquitto.init \
-           file://1571.patch \
-"
-
-SRC_URI[sha256sum] = "4735b1d32e3f91c7a8896741d88a3022e89730a1ee897946decfa0df27039ac6"
-
-inherit systemd update-rc.d useradd cmake pkgconfig
-
-PACKAGECONFIG ??= "ssl dlt websockets \
-                  ${@bb.utils.filter('DISTRO_FEATURES','systemd', d)} \
-                  "
-
-PACKAGECONFIG[manpages] = "-DDOCUMENTATION=ON,-DDOCUMENTATION=OFF,libxslt-native docbook-xsl-stylesheets-native"
-PACKAGECONFIG[dns-srv] = "-DWITH_SRV=ON,-DWITH_SRV=OFF,c-ares"
-PACKAGECONFIG[ssl] = "-DWITH_TLS=ON -DWITH_TLS_PSK=ON -DWITH_EC=ON,-DWITH_TLS=OFF -DWITH_TLS_PSK=OFF -DWITH_EC=OFF,openssl"
-PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF,systemd"
-PACKAGECONFIG[websockets] = "-DWITH_WEBSOCKETS=ON,-DWITH_WEBSOCKETS=OFF,libwebsockets"
-PACKAGECONFIG[dlt] = "-DWITH_DLT=ON,-DWITH_DLT=OFF,dlt-daemon"
-
-EXTRA_OECMAKE = " \
-    -DWITH_BUNDLED_DEPS=OFF \
-    -DWITH_ADNS=ON \
-"
-
-do_install:append() {
-    install -d ${D}${systemd_unitdir}/system/
-    install -m 0644 ${S}/service/systemd/mosquitto.service.notify ${D}${systemd_unitdir}/system/mosquitto.service
-
-    install -d ${D}${sysconfdir}/init.d/
-    install -m 0755 ${WORKDIR}/mosquitto.init ${D}${sysconfdir}/init.d/mosquitto
-    sed -i -e 's,@SBINDIR@,${sbindir},g' \
-        -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
-        -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
-        -e 's,@SYSCONFDIR@,${sysconfdir},g' \
-        ${D}${sysconfdir}/init.d/mosquitto
-}
-
-PACKAGES += "libmosquitto1 libmosquittopp1 ${PN}-clients"
-
-PACKAGE_BEFORE_PN = "${PN}-examples"
-
-FILES:${PN} = "${sbindir}/mosquitto \
-               ${bindir}/mosquitto_passwd \
-               ${bindir}/mosquitto_ctrl \
-               ${libdir}/mosquitto_dynamic_security.so \
-               ${sysconfdir}/mosquitto \
-               ${sysconfdir}/init.d \
-               ${systemd_unitdir}/system/mosquitto.service \
-"
-
-CONFFILES:${PN} += "${sysconfdir}/mosquitto/mosquitto.conf"
-
-FILES:libmosquitto1 = "${libdir}/libmosquitto.so.*"
-
-FILES:libmosquittopp1 = "${libdir}/libmosquittopp.so.*"
-
-FILES:${PN}-clients = "${bindir}/mosquitto_pub \
-                       ${bindir}/mosquitto_sub \
-                       ${bindir}/mosquitto_rr \
-"
-
-FILES:${PN}-examples = "${sysconfdir}/mosquitto/*.example"
-
-SYSTEMD_SERVICE:${PN} = "mosquitto.service"
-
-INITSCRIPT_NAME = "mosquitto"
-INITSCRIPT_PARAMS = "defaults 30"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --shell /bin/false \
-                       --user-group mosquitto"
-
-BBCLASSEXTEND += "native nativesdk"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb
new file mode 100644
index 0000000..0c9ccc8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb
@@ -0,0 +1,92 @@
+SUMMARY = "Open source MQTT implementation"
+DESCRIPTION = "Mosquitto is an open source (Eclipse licensed) message broker \
+that implements the MQ Telemetry Transport protocol version 3.1, 3.1.1 and \
+5, providing both an MQTT broker and several command-line clients. MQTT \
+provides a lightweight method of carrying out messaging using a \
+publish/subscribe model. "
+HOMEPAGE = "http://mosquitto.org/"
+SECTION = "console/network"
+LICENSE = "EPL-2.0 | EDL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ca9a8f366c6babf593e374d0d7d58749 \
+                    file://edl-v10;md5=9f6accb1afcb570f8be65039e2fcd49e \
+                    file://epl-v20;md5=2dd765ca47a05140be15ebafddbeadfe \
+                    file://NOTICE.md;md5=a7a91b4754c6f7995020d1b49bc829c6 \
+"
+DEPENDS = "uthash cjson"
+
+SRC_URI = "http://mosquitto.org/files/source/mosquitto-${PV}.tar.gz \
+           file://mosquitto.init \
+           file://1571.patch \
+           file://2894.patch \
+           file://2895.patch \
+"
+
+SRC_URI[sha256sum] = "d665fe7d0032881b1371a47f34169ee4edab67903b2cd2b4c083822823f4448a"
+
+inherit systemd update-rc.d useradd cmake pkgconfig
+
+PACKAGECONFIG ??= "ssl websockets \
+                  ${@bb.utils.filter('DISTRO_FEATURES','systemd', d)} \
+                  "
+
+PACKAGECONFIG[manpages] = "-DDOCUMENTATION=ON,-DDOCUMENTATION=OFF,libxslt-native docbook-xsl-stylesheets-native"
+PACKAGECONFIG[dns-srv] = "-DWITH_SRV=ON,-DWITH_SRV=OFF,c-ares"
+PACKAGECONFIG[ssl] = "-DWITH_TLS=ON -DWITH_TLS_PSK=ON -DWITH_EC=ON,-DWITH_TLS=OFF -DWITH_TLS_PSK=OFF -DWITH_EC=OFF,openssl"
+PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF,systemd"
+PACKAGECONFIG[websockets] = "-DWITH_WEBSOCKETS=ON,-DWITH_WEBSOCKETS=OFF,libwebsockets"
+PACKAGECONFIG[dlt] = "-DWITH_DLT=ON,-DWITH_DLT=OFF,dlt-daemon"
+
+EXTRA_OECMAKE = " \
+    -DWITH_BUNDLED_DEPS=OFF \
+    -DWITH_ADNS=ON \
+"
+
+do_install:append() {
+    install -d ${D}${systemd_unitdir}/system/
+    install -m 0644 ${S}/service/systemd/mosquitto.service.notify ${D}${systemd_unitdir}/system/mosquitto.service
+
+    install -d ${D}${sysconfdir}/init.d/
+    install -m 0755 ${WORKDIR}/mosquitto.init ${D}${sysconfdir}/init.d/mosquitto
+    sed -i -e 's,@SBINDIR@,${sbindir},g' \
+        -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
+        -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
+        -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+        ${D}${sysconfdir}/init.d/mosquitto
+}
+
+PACKAGES += "libmosquitto1 libmosquittopp1 ${PN}-clients"
+
+PACKAGE_BEFORE_PN = "${PN}-examples"
+
+FILES:${PN} = "${sbindir}/mosquitto \
+               ${bindir}/mosquitto_passwd \
+               ${bindir}/mosquitto_ctrl \
+               ${libdir}/mosquitto_dynamic_security.so \
+               ${sysconfdir}/mosquitto \
+               ${sysconfdir}/init.d \
+               ${systemd_unitdir}/system/mosquitto.service \
+"
+
+CONFFILES:${PN} += "${sysconfdir}/mosquitto/mosquitto.conf"
+
+FILES:libmosquitto1 = "${libdir}/libmosquitto.so.*"
+
+FILES:libmosquittopp1 = "${libdir}/libmosquittopp.so.*"
+
+FILES:${PN}-clients = "${bindir}/mosquitto_pub \
+                       ${bindir}/mosquitto_sub \
+                       ${bindir}/mosquitto_rr \
+"
+
+FILES:${PN}-examples = "${sysconfdir}/mosquitto/*.example"
+
+SYSTEMD_SERVICE:${PN} = "mosquitto.service"
+
+INITSCRIPT_NAME = "mosquitto"
+INITSCRIPT_PARAMS = "defaults 30"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --shell /bin/false \
+                       --user-group mosquitto"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0001-fix-ppp-2.5.0-build.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0001-fix-ppp-2.5.0-build.patch
index 0a568fa..2e84a33 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0001-fix-ppp-2.5.0-build.patch
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0001-fix-ppp-2.5.0-build.patch
@@ -7,7 +7,7 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
-Upstream-Status: Accepted
+Upstream-Status: Backport
 Signed-off-by: Eivind Næss <eivnaes@yahoo.com>
 ---
  Makefile.am                                   |  5 +-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0002-fix-ppp-2.5.0-build.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0002-fix-ppp-2.5.0-build.patch
index 798a57b..6ac8f2b 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0002-fix-ppp-2.5.0-build.patch
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn/0002-fix-ppp-2.5.0-build.patch
@@ -6,7 +6,7 @@
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
-Upstream-Status: Accepted
+Upstream-Status: Backport
 Signed-off-by: Eivind Næss <eivnaes@yahoo.com>
 ---
  configure.ac | 6 +-----
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch
deleted file mode 100644
index eaaf304..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2fa326b26dc479942367dc4283e2f87372403988 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 17 Jun 2017 09:32:04 -0700
-Subject: [PATCH] rtnl_flush: Error on failed write()
-
-Fixes
-route.c:45:2: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result]
-|   write(fd, "-1", 2);
-|   ^~~~~~~~~~~~~~~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Submitted
-
- route.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/route.c b/route.c
-index c552d1f..fc5c31e 100644
---- a/route.c
-+++ b/route.c
-@@ -42,7 +42,8 @@ static void rtnl_flush(void)
- 	if (fd < 0)
- 		return;
- 
--	write(fd, "-1", 2);
-+	if (write(fd, "-1", 2) < 0 )
-+		perror("write");
- 	close(fd);
- }
- 
--- 
-2.13.1
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb
index 1da18d7..79e1743 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb
@@ -5,11 +5,9 @@
 
 DEPENDS = "libubox"
 
-SRC_URI = "git://git.openwrt.org/project/relayd.git;branch=master \
-           file://0001-rtnl_flush-Error-on-failed-write.patch \
-"
+SRC_URI = "git://git.openwrt.org/project/relayd.git;branch=master"
 
-SRCREV = "f4d759be54ceb37714e9a6ca320d5b50c95e9ce9"
+SRCREV = "f646ba40489371e69f624f2dee2fc4e19ceec00e"
 PV = "0.0.1+git${SRCPV}"
 
 UPSTREAM_CHECK_COMMITS = "1"
@@ -17,3 +15,5 @@
 S = "${WORKDIR}/git"
 
 inherit cmake
+
+CFLAGS:append:toolchain-clang = " -Wno-error=gnu-variable-sized-type-not-at-end"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived/0001-layer4-Change-order-of-include-files.patch b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived/0001-layer4-Change-order-of-include-files.patch
deleted file mode 100644
index 678a208..0000000
--- a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived/0001-layer4-Change-order-of-include-files.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From a85ca79143a87286f793957e803ee3daf03c2b57 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Jul 2021 14:06:44 -0700
-Subject: [PATCH] layer4: Change order of include files
-
-curent order to include standard headers first is causing an isue with
-glibc 2.34 + kernel-headers 5.13+ where order of including netinet/in.h
-and linux/in.h matters and it does not define __UAPI_DEF_IN_IPPROTO
-before including linux/in.h and then later includes netinet/in.h which
-then means lot of definitions will be defined twice and compile would
-fail. Re-ordering the local headers to appear first solves the issue
-amicably, and I think this is right order too
-
-Upsteam-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- keepalived/core/layer4.c | 21 ++++++++++-----------
- 1 file changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/keepalived/core/layer4.c b/keepalived/core/layer4.c
-index 90cdc84..c122c29 100644
---- a/keepalived/core/layer4.c
-+++ b/keepalived/core/layer4.c
-@@ -23,6 +23,16 @@
- 
- #include "config.h"
- 
-+#include "layer4.h"
-+#include "logger.h"
-+#include "scheduler.h"
-+#ifdef _WITH_LVS_
-+#include "check_api.h"
-+#endif
-+#include "bitops.h"
-+#include "utils.h"
-+#include "align.h"
-+
- #include <stdio.h>
- #include <errno.h>
- #include <unistd.h>
-@@ -33,17 +43,6 @@
- #include <sys/time.h>
- #endif
- #include <linux/errqueue.h>
--#include <netinet/in.h>
--
--#include "layer4.h"
--#include "logger.h"
--#include "scheduler.h"
--#ifdef _WITH_LVS_
--#include "check_api.h"
--#endif
--#include "bitops.h"
--#include "utils.h"
--#include "align.h"
- 
- // #define ICMP_DEBUG	1
- 
diff --git a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.2.bb b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.2.bb
deleted file mode 100644
index 204d2fd..0000000
--- a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.2.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "High Availability monitor built upon LVS, VRRP and service pollers"
-DESCRIPTION = "Keepalived is a routing software written in C. The main goal \
-of this project is to provide simple and robust facilities for loadbalancing \
-and high-availability to Linux system and Linux based infrastructures. \
-Loadbalancing framework relies on well-known and widely used Linux Virtual \
-Server (IPVS) kernel module providing Layer4 loadbalancing \
-"
-HOMEPAGE = "http://www.keepalived.org/"
-
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "http://www.keepalived.org/software/${BP}.tar.gz \
-           file://0001-layer4-Change-order-of-include-files.patch \
-           "
-SRC_URI[sha256sum] = "103692bd5345a4ed9f4581632ea636214fdf53e45682e200aab122c4fa674ece"
-UPSTREAM_CHECK_URI = "https://github.com/acassen/keepalived/releases"
-
-DEPENDS = "libnfnetlink openssl"
-
-inherit autotools pkgconfig systemd
-
-PACKAGECONFIG ??= "libnl snmp \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-"
-PACKAGECONFIG[libnl] = "--enable-libnl,--disable-libnl,libnl"
-PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
-PACKAGECONFIG[systemd] = "--with-init=systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--with-init=SYSV,systemd"
-
-EXTRA_OEMAKE = "initdir=${sysconfdir}/init.d"
-
-do_install:append() {
-    if [ -f ${D}${sysconfdir}/init.d/${BPN} ]; then
-        chmod 0755 ${D}${sysconfdir}/init.d/${BPN}
-        sed -i 's#rc.d/##' ${D}${sysconfdir}/init.d/${BPN}
-    fi
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        install -D -m 0644 ${B}/${BPN}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
-    fi
-}
-
-FILES:${PN} += "${datadir}/snmp/mibs/KEEPALIVED-MIB.txt"
-
-SYSTEMD_SERVICE:${PN} = "keepalived.service"
-SYSTEMD_AUTO_ENABLE ?= "disable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.8.bb b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.8.bb
new file mode 100644
index 0000000..dd193b1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_2.2.8.bb
@@ -0,0 +1,47 @@
+SUMMARY = "High Availability monitor built upon LVS, VRRP and service pollers"
+DESCRIPTION = "Keepalived is a routing software written in C. The main goal \
+of this project is to provide simple and robust facilities for loadbalancing \
+and high-availability to Linux system and Linux based infrastructures. \
+Loadbalancing framework relies on well-known and widely used Linux Virtual \
+Server (IPVS) kernel module providing Layer4 loadbalancing \
+"
+HOMEPAGE = "http://www.keepalived.org/"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://www.keepalived.org/software/${BP}.tar.gz \
+           "
+SRC_URI[sha256sum] = "85882eb62974f395d4c631be990a41a839594a7e62fbfebcb5649a937a7a1bb6"
+UPSTREAM_CHECK_URI = "https://github.com/acassen/keepalived/releases"
+
+DEPENDS = "libnfnetlink openssl"
+
+inherit autotools pkgconfig systemd
+
+PACKAGECONFIG ??= "libnl snmp \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+PACKAGECONFIG[libnl] = "--enable-libnl,--disable-libnl,libnl"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
+PACKAGECONFIG[systemd] = "--with-init=systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--with-init=SYSV,systemd"
+
+EXTRA_OEMAKE = "initdir=${sysconfdir}/init.d"
+
+export EXTRA_CFLAGS = "${CFLAGS}"
+
+do_install:append() {
+    if [ -f ${D}${sysconfdir}/init.d/${BPN} ]; then
+        chmod 0755 ${D}${sysconfdir}/init.d/${BPN}
+        sed -i 's#rc.d/##' ${D}${sysconfdir}/init.d/${BPN}
+    fi
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -D -m 0644 ${B}/${BPN}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
+    fi
+}
+
+FILES:${PN} += "${datadir}/snmp/mibs/KEEPALIVED-MIB.txt"
+
+SYSTEMD_SERVICE:${PN} = "keepalived.service"
+SYSTEMD_AUTO_ENABLE ?= "disable"
diff --git a/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.1.bb b/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.1.bb
deleted file mode 100644
index efea3fa..0000000
--- a/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.1.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "A C implementation of the Constrained Application Protocol"
-DESCRIPTION = "libcoap implements a lightweight application-protocol for \
-devices that are constrained their resources such as computing power, \
-RF range, memory, bandwith, or network packet sizes."
-HOMEPAGE ="https://libcoap.net/"
-
-LICENSE = "BSD-2-Clause & BSD-1-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=0fbe4435d52b2d27a16f980ffc8ffc80"
-
-SRC_URI = "git://github.com/obgm/libcoap.git;branch=main;protocol=https \
-           file://run-ptest \
-           "
-SRCREV = "02b76470ab9168947152c78ad50835bf043d7c84"
-
-S = "${WORKDIR}/git"
-
-inherit autotools manpages pkgconfig ptest
-
-DEPENDS += "ctags-native"
-
-PACKAGECONFIG ?= "\
-    async openssl tcp \
-    ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
-"
-PACKAGECONFIG[async] = "--enable-async,--disable-async"
-PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls,,,openssl mbedtls"
-PACKAGECONFIG[manpages] = "--enable-documentation --enable-doxygen --enable-manpages,--disable-documentation,asciidoc-native doxygen-native graphviz-native"
-PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,,,gnutls openssl"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,,,gnutls mbedtls"
-PACKAGECONFIG[small-stack] = "--enable-small-stack,--disable-small-stack"
-PACKAGECONFIG[tcp] = "--enable-tcp,--disable-tcp"
-PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,cunit"
-
-EXTRA_OECONF = "\
-    --with-epoll --enable-add-default-names \
-    --without-tinydtls --without-submodule-tinydtls \
-    ${@bb.utils.contains_any('PACKAGECONFIG', 'gnutls openssl mbedtls', '--enable-dtls', '--disable-dtls', d)} \
-"
-
-python () {
-    if d.getVar('PTEST_ENABLED') == "1":
-        d.setVar('DISABLE_STATIC', '')
-}
-
-export SGML_CATALOG_FILES="file://${STAGING_ETCDIR_NATIVE}/xml/catalog"
-
-do_compile:prepend() {
-    oe_runmake update-map-file
-}
-
-do_install_ptest () {
-	install -d ${D}${PTEST_PATH}
-	install -m 0755 ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/run-ptest
-	install -m 0755 ${B}/tests/testdriver ${D}${PTEST_PATH}/testdriver
-}
-
-PACKAGE_BEFORE_PN += "\
-    ${PN}-bin \
-"
-
-FILES:${PN}-bin = "${bindir}"
-FILES:${PN}-dev += "${datadir}/${BPN}/examples"
diff --git a/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb b/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb
new file mode 100644
index 0000000..6e5bc07
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb
@@ -0,0 +1,62 @@
+SUMMARY = "A C implementation of the Constrained Application Protocol"
+DESCRIPTION = "libcoap implements a lightweight application-protocol for \
+devices that are constrained their resources such as computing power, \
+RF range, memory, bandwith, or network packet sizes."
+HOMEPAGE ="https://libcoap.net/"
+
+LICENSE = "BSD-2-Clause & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1978dbc41673ab1c20e64b287c8317bc"
+
+SRC_URI = "git://github.com/obgm/libcoap.git;branch=main;protocol=https \
+           file://run-ptest \
+           "
+SRCREV = "9cde7cdee171e3f47486c6e70d479fdf49f3d2d6"
+
+S = "${WORKDIR}/git"
+
+inherit autotools manpages pkgconfig ptest
+
+DEPENDS += "ctags-native"
+
+PACKAGECONFIG ?= "\
+    async openssl tcp \
+    ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
+"
+PACKAGECONFIG[async] = "--enable-async,--disable-async"
+PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls,,,openssl mbedtls"
+PACKAGECONFIG[manpages] = "--enable-documentation --enable-doxygen --enable-manpages,--disable-documentation,asciidoc-native doxygen-native graphviz-native"
+PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,,,gnutls openssl"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,,,gnutls mbedtls"
+PACKAGECONFIG[small-stack] = "--enable-small-stack,--disable-small-stack"
+PACKAGECONFIG[tcp] = "--enable-tcp,--disable-tcp"
+PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,cunit"
+
+EXTRA_OECONF = "\
+    --with-epoll --enable-add-default-names \
+    --without-tinydtls --without-submodule-tinydtls \
+    ${@bb.utils.contains_any('PACKAGECONFIG', 'gnutls openssl mbedtls', '--enable-dtls', '--disable-dtls', d)} \
+"
+
+python () {
+    if d.getVar('PTEST_ENABLED') == "1":
+        d.setVar('DISABLE_STATIC', '')
+}
+
+export SGML_CATALOG_FILES="file://${STAGING_ETCDIR_NATIVE}/xml/catalog"
+
+do_compile:prepend() {
+    oe_runmake update-map-file
+}
+
+do_install_ptest () {
+	install -d ${D}${PTEST_PATH}
+	install -m 0755 ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/run-ptest
+	install -m 0755 ${B}/tests/testdriver ${D}${PTEST_PATH}/testdriver
+}
+
+PACKAGE_BEFORE_PN += "\
+    ${PN}-bin \
+"
+
+FILES:${PN}-bin = "${bindir}"
+FILES:${PN}-dev += "${datadir}/${BPN}/examples"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch
new file mode 100644
index 0000000..e8c3f1d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch
@@ -0,0 +1,53 @@
+From 4133a888aa256312186962ab70d4a36eed5920c1 Mon Sep 17 00:00:00 2001
+From: Brooks Davis <brooks@FreeBSD.org>
+Date: Mon, 26 Sep 2022 18:56:51 +0100
+Subject: [PATCH] telnetd: fix two-byte input crash
+
+Move initialization of the slc table earlier so it doesn't get
+accessed before that happens.
+
+For details on the issue, see:
+https://pierrekim.github.io/blog/2022-08-24-2-byte-dos-freebsd-netbsd-telnetd-netkit-telnetd-inetutils-telnetd-kerberos-telnetd.html
+
+Reviewed by:	cy
+Obtained from:	NetBSD via cy
+Differential Revision:	https://reviews.freebsd.org/D36680
+
+CVE: CVE-2022-39028
+Upstream-Status: Backport [https://cgit.freebsd.org/src/commit/?id=6914ffef4e23]
+
+(cherry picked from commit 6914ffef4e2318ca1d0ead28eafb6f06055ce0f8)
+Signed-off-by: Sanjay Chitroda <sanjay.chitroda@einfochips.com>
+
+---
+ telnetd/telnetd.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c
+index f36f505..efa0fe1 100644
+--- a/telnetd/telnetd.c
++++ b/telnetd/telnetd.c
+@@ -615,6 +615,11 @@ doit(struct sockaddr_in *who)
+ 	int level;
+ 	char user_name[256];
+ 
++	/*
++	 * Initialize the slc mapping table.
++	 */
++	get_slc_defaults();
++
+ 	/*
+ 	 * Find an available pty to use.
+ 	 */
+@@ -698,11 +703,6 @@ void telnet(int f, int p)
+     char *HE;
+     const char *IM;
+ 
+-    /*
+-     * Initialize the slc mapping table.
+-     */
+-    get_slc_defaults();
+-
+     /*
+      * Do some tests where it is desireable to wait for a response.
+      * Rather than doing them slowly, one at a time, do them all
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
index e28eeae..d3de038 100644
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
@@ -16,6 +16,7 @@
            file://0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch \
            file://0001-utility-Include-time.h-form-time-and-strftime-protot.patch \
            file://0001-Drop-using-register-keyword.patch \
+           file://CVE-2022-39028.patch \
            "
 
 UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/n/netkit-telnet/"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-m4-ax_python.m4-check-for-python-x.y-emded.pc-not-py.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-m4-ax_python.m4-check-for-python-x.y-emded.pc-not-py.patch
deleted file mode 100644
index 872a67c..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-m4-ax_python.m4-check-for-python-x.y-emded.pc-not-py.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From a82d704b1ec6ece47b01d12e0e067d4b62b10894 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Wed, 9 Nov 2022 20:24:45 +0100
-Subject: [PATCH] m4/ax_python.m4: check for python-x.y-emded.pc, not
- python-x.y.pc
-
-Only the embed version includes necessary linker flags to link
-with libpython.
-
-Upstream-Status: Backport
-[https://github.com/FRRouting/frr/commit/a82d704b1ec6ece47b01d12e0e067d4b62b10894]
-
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- m4/ax_python.m4 | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/m4/ax_python.m4 b/m4/ax_python.m4
-index 91d12b99b..f5e603b96 100644
---- a/m4/ax_python.m4
-+++ b/m4/ax_python.m4
-@@ -206,7 +206,7 @@ AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-     AC_MSG_CHECKING([whether pkg-config python-${tryver} is available])
-     unset PYTHON_CFLAGS
-     unset PYTHON_LIBS
--    pkg="python-${tryver}"
-+    pkg="python-${tryver}-embed"
-     pkg="${pkg%-}"
-     _PKG_CONFIG([PYTHON_CFLAGS], [cflags], [${pkg}])
-     _PKG_CONFIG([PYTHON_LIBS], [libs], [${pkg}])
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
new file mode 100644
index 0000000..3e93cf3c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/0001-tools-make-quiet-actually-suppress-output.patch
@@ -0,0 +1,58 @@
+From 312d5ee1592f8c5b616d330233d1de2643f759e2 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jonas.gorski@bisdn.de>
+Date: Thu, 14 Sep 2023 17:04:16 +0200
+Subject: [PATCH] tools: make --quiet actually suppress output
+
+When calling daemon_stop() with --quiet and e.g. the pidfile is empty,
+it won't return early since while "$fail" is set, "$2" is "--quiet", so
+the if condition isn't met and it will continue executing, resulting
+in error messages in the log:
+
+> Sep 14 14:48:33 localhost watchfrr[2085]: [YFT0P-5Q5YX] Forked background command [pid 2086]: /usr/lib/frr/watchfrr.sh restart all
+> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
+> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
+> Sep 14 14:48:33 localhost frrinit.sh[2075]: /usr/lib/frr/frrcommon.sh: line 216: kill: `': not a pid or valid job spec
+
+Fix this by moving the --quiet check into the block to log_failure_msg(),
+and also add the check to all other invocations of log_*_msg() to make
+--quiet properly suppress output.
+
+Fixes: 19a99d89f088 ("tools: suppress unuseful warnings during restarting frr")
+Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
+Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/312d5ee1592f8c5b616d330233d1de2643f759e2]
+---
+ tools/frrcommon.sh.in | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tools/frrcommon.sh.in b/tools/frrcommon.sh.in
+index f1f70119097e..00b63a78e2bc 100755
+--- a/tools/frrcommon.sh.in
++++ b/tools/frrcommon.sh.in
+@@ -207,8 +207,8 @@ daemon_stop() {
+ 	[ -z "$fail" -a -z "$pid" ] && fail="pid file is empty"
+ 	[ -n "$fail" ] || kill -0 "$pid" 2>/dev/null || fail="pid $pid not running"
+ 
+-	if [ -n "$fail" ] && [ "$2" != "--quiet" ]; then
+-		log_failure_msg "Cannot stop $dmninst: $fail"
++	if [ -n "$fail" ]; then
++		[ "$2" = "--quiet" ] || log_failure_msg "Cannot stop $dmninst: $fail"
+ 		return 1
+ 	fi
+ 
+@@ -220,11 +220,11 @@ daemon_stop() {
+ 		[ $(( cnt -= 1 )) -gt 0 ] || break
+ 	done
+ 	if kill -0 "$pid" 2>/dev/null; then
+-		log_failure_msg "Failed to stop $dmninst, pid $pid still running"
++		[ "$2" = "--quiet" ] || log_failure_msg "Failed to stop $dmninst, pid $pid still running"
+ 		still_running=1
+ 		return 1
+ 	else
+-		log_success_msg "Stopped $dmninst"
++		[ "$2" = "--quiet" ] || log_success_msg "Stopped $dmninst"
+ 		rm -f "$pidfile"
+ 		return 0
+ 	fi
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-3748.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-3748.patch
deleted file mode 100644
index 4a8a7e1..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-3748.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From e61593f2ded104c4c7f01eb93e2b404e93e0c560 Mon Sep 17 00:00:00 2001
-From: harryreps <harryreps@gmail.com>
-Date: Fri, 3 Mar 2023 23:17:14 +0000
-Subject: [PATCH] babeld: fix #11808 to avoid infinite loops
-
-Replacing continue in loops to goto done so that index of packet buffer
-increases.
-
-Signed-off-by: harryreps <harryreps@gmail.com>
-
-CVE: CVE-2023-3748
-
-Upstream-Status: Backport
-[https://github.com/FRRouting/frr/commit/ae1e0e1fed77716bc06f181ad68c4433fb5523d0]
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- babeld/message.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/babeld/message.c b/babeld/message.c
-index 7d45d91bf..2bf233796 100644
---- a/babeld/message.c
-+++ b/babeld/message.c
-@@ -439,7 +439,7 @@ parse_packet(const unsigned char *from, struct interface *ifp,
- 			debugf(BABEL_DEBUG_COMMON,
- 			       "Received Hello from %s on %s that does not have all 0's in the unused section of flags, ignoring",
- 			       format_address(from), ifp->name);
--			continue;
-+			goto done;
- 		}
- 
- 		/*
-@@ -451,7 +451,7 @@ parse_packet(const unsigned char *from, struct interface *ifp,
- 			debugf(BABEL_DEBUG_COMMON,
- 			       "Received Unicast Hello from %s on %s that FRR is not prepared to understand yet",
- 			       format_address(from), ifp->name);
--			continue;
-+			goto done;
- 		}
- 
- 		DO_NTOHS(seqno, message + 4);
-@@ -469,7 +469,7 @@ parse_packet(const unsigned char *from, struct interface *ifp,
- 			debugf(BABEL_DEBUG_COMMON,
- 			       "Received hello from %s on %s should be ignored as that this version of FRR does not know how to properly handle interval == 0",
- 			       format_address(from), ifp->name);
--			continue;
-+			goto done;
- 		}
- 
- 		changed = update_neighbour(neigh, seqno, interval);
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41358.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41358.patch
deleted file mode 100644
index 59633ef..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41358.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 9efd9a47db4f13ebf88c2ffe14301d7441bcb40d Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Tue, 22 Aug 2023 22:52:04 +0300
-Subject: [PATCH 1/2] bgpd: Do not process NLRIs if the attribute length is
- zero
-
-```
-3  0x00007f423aa42476 in __GI_raise (sig=sig@entry=11) at ../sysdeps/posix/raise.c:26
-4  0x00007f423aef9740 in core_handler (signo=11, siginfo=0x7fffc414deb0, context=<optimized out>) at lib/sigevent.c:246
-5  <signal handler called>
-6  0x0000564dea2fc71e in route_set_aspath_prepend (rule=0x564debd66d50, prefix=0x7fffc414ea30, object=0x7fffc414e400)
-    at bgpd/bgp_routemap.c:2258
-7  0x00007f423aeec7e0 in route_map_apply_ext (map=<optimized out>, prefix=prefix@entry=0x7fffc414ea30,
-    match_object=match_object@entry=0x7fffc414e400, set_object=set_object@entry=0x7fffc414e400, pref=pref@entry=0x0) at lib/routemap.c:2690
-8  0x0000564dea2d277e in bgp_input_modifier (peer=peer@entry=0x7f4238f59010, p=p@entry=0x7fffc414ea30, attr=attr@entry=0x7fffc414e770,
-    afi=afi@entry=AFI_IP, safi=safi@entry=SAFI_UNICAST, rmap_name=rmap_name@entry=0x0, label=0x0, num_labels=0, dest=0x564debdd5130)
-    at bgpd/bgp_route.c:1772
-9  0x0000564dea2df762 in bgp_update (peer=peer@entry=0x7f4238f59010, p=p@entry=0x7fffc414ea30, addpath_id=addpath_id@entry=0,
-    attr=0x7fffc414eb50, afi=afi@entry=AFI_IP, safi=<optimized out>, safi@entry=SAFI_UNICAST, type=9, sub_type=0, prd=0x0, label=0x0,
-    num_labels=0, soft_reconfig=0, evpn=0x0) at bgpd/bgp_route.c:4374
-10 0x0000564dea2e2047 in bgp_nlri_parse_ip (peer=0x7f4238f59010, attr=attr@entry=0x7fffc414eb50, packet=0x7fffc414eaf0)
-    at bgpd/bgp_route.c:6249
-11 0x0000564dea2c5a58 in bgp_nlri_parse (peer=peer@entry=0x7f4238f59010, attr=attr@entry=0x7fffc414eb50,
-    packet=packet@entry=0x7fffc414eaf0, mp_withdraw=mp_withdraw@entry=false) at bgpd/bgp_packet.c:339
-12 0x0000564dea2c5d66 in bgp_update_receive (peer=peer@entry=0x7f4238f59010, size=size@entry=109) at bgpd/bgp_packet.c:2024
-13 0x0000564dea2c901d in bgp_process_packet (thread=<optimized out>) at bgpd/bgp_packet.c:2933
-14 0x00007f423af0bf71 in event_call (thread=thread@entry=0x7fffc414ee40) at lib/event.c:1995
-15 0x00007f423aebb198 in frr_run (master=0x564deb73c670) at lib/libfrr.c:1213
-16 0x0000564dea261b83 in main (argc=<optimized out>, argv=<optimized out>) at bgpd/bgp_main.c:505
-```
-
-With the configuration:
-
-```
-frr version 9.1-dev-MyOwnFRRVersion
-frr defaults traditional
-hostname ip-172-31-13-140
-log file /tmp/debug.log
-log syslog
-service integrated-vtysh-config
-!
-debug bgp keepalives
-debug bgp neighbor-events
-debug bgp updates in
-debug bgp updates out
-!
-router bgp 100
- bgp router-id 9.9.9.9
- no bgp ebgp-requires-policy
- bgp bestpath aigp
- neighbor 172.31.2.47 remote-as 200
- !
- address-family ipv4 unicast
-  neighbor 172.31.2.47 default-originate
-  neighbor 172.31.2.47 route-map RM_IN in
- exit-address-family
-exit
-!
-route-map RM_IN permit 10
- set as-path prepend 200
-exit
-!
-```
-
-The issue is that we try to process NLRIs even if the attribute length is 0.
-
-Later bgp_update() will handle route-maps and a crash occurs because all the
-attributes are NULL, including aspath, where we dereference.
-
-According to the RFC 4271:
-
-A value of 0 indicates that neither the Network Layer
-         Reachability Information field nor the Path Attribute field is
-         present in this UPDATE message.
-
-But with a fuzzed UPDATE message this can be faked. I think it's reasonable
-to skip processing NLRIs if both update_len and attribute_len are 0.
-
-Reported-by: Iggy Frankovic <iggyfran@amazon.com>
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/28ccc24d38df1d51ed8a563507e5d6f6171fdd38]
-
-CVE: CVE-2023-41358
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- bgpd/bgp_packet.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
-index ec54943f3..3c2e73c59 100644
---- a/bgpd/bgp_packet.c
-+++ b/bgpd/bgp_packet.c
-@@ -1951,7 +1951,7 @@ static int bgp_update_receive(struct peer *peer, bgp_size_t size)
- 	/* Network Layer Reachability Information. */
- 	update_len = end - stream_pnt(s);
- 
--	if (update_len) {
-+	if (update_len && attribute_len) {
- 		/* Set NLRI portion to structure. */
- 		nlris[NLRI_UPDATE].afi = AFI_IP;
- 		nlris[NLRI_UPDATE].safi = SAFI_UNICAST;
--- 
-2.35.5
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41360.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41360.patch
deleted file mode 100644
index 8ee3985..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-41360.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 9ecacf2176d2bac4b90e17d49facb8712c1b467a Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas@opensourcerouting.org>
-Date: Sun, 20 Aug 2023 22:15:27 +0300
-Subject: [PATCH 2/2] bgpd: Don't read the first byte of ORF header if we are
- ahead of stream
-
-Reported-by: Iggy Frankovic iggyfran@amazon.com
-Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-
-Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/9b855a692e68e0d16467e190b466b4ecb6853702]
-
-CVE: CVE-2023-41360
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- bgpd/bgp_packet.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
-index 3c2e73c59..f1d0e54c0 100644
---- a/bgpd/bgp_packet.c
-+++ b/bgpd/bgp_packet.c
-@@ -2375,7 +2375,8 @@ static int bgp_route_refresh_receive(struct peer *peer, bgp_size_t size)
- 				 * and 7 bytes of ORF Address-filter entry from
- 				 * the stream
- 				 */
--				if (*p_pnt & ORF_COMMON_PART_REMOVE_ALL) {
-+				if (p_pnt < p_end &&
-+				    *p_pnt & ORF_COMMON_PART_REMOVE_ALL) {
- 					if (bgp_debug_neighbor_events(peer))
- 						zlog_debug(
- 							"%pBP rcvd Remove-All pfxlist ORF request",
--- 
-2.35.5
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.4.4.bb b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.4.4.bb
deleted file mode 100644
index 826b687..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_8.4.4.bb
+++ /dev/null
@@ -1,128 +0,0 @@
-SUMMARY = "BGP/OSPF/RIP routing daemon"
-DESCRIPTION = "FRRouting is a free and open source Internet routing protocol suite for Linux \
-and Unix platforms. It implements BGP, OSPF, RIP, IS-IS, PIM, LDP, BFD, Babel, PBR, OpenFabric \
-and VRRP, with alpha support for EIGRP and NHRP."
-HOMEPAGE = "https://frrouting.org/"
-SECTION = "net"
-
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-                    file://COPYING-LGPLv2.1;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/8.4 \
-           file://frr.pam \
-           file://0001-m4-ax_python.m4-check-for-python-x.y-emded.pc-not-py.patch \
-           file://CVE-2023-3748.patch \
-           file://CVE-2023-41358.patch \
-           file://CVE-2023-41360.patch \
-           "
-
-SRCREV = "45e36c0c00a517ad1606135b18c5753e210cfc0d"
-
-UPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"
-
-CVE_PRODUCT = "frrouting"
-
-S = "${WORKDIR}/git"
-
-inherit autotools-brokensep python3native pkgconfig useradd systemd
-
-DEPENDS:class-native = "bison-native elfutils-native"
-DEPENDS:class-target = "bison-native json-c readline c-ares libyang frr-native"
-
-RDEPENDS:${PN}:class-target = "iproute2 python3-core bash"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-PACKAGECONFIG:class-native = ""
-
-PACKAGECONFIG[fpm] = "--enable-fpm,--disable-fpm"
-PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam"
-PACKAGECONFIG[grpc] = "--enable-grpc,--disable-grpc,grpc-native grpc"
-PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
-PACKAGECONFIG[zeromq] = "--enable-zeromq,--disable-zeromq,zeromq"
-PACKAGECONFIG[protobuf] = "--enable-protobuf,--disable-protobuf,protobuf-c-native protobuf-c"
-PACKAGECONFIG[capabilities] = "--enable-capabilities,--disable-capabilities,libcap"
-PACKAGECONFIG[cumulus] = "--enable-cumulus,--disable-cumulus"
-PACKAGECONFIG[datacenter] = "--enable-datacenter,--disable-datacenter"
-PACKAGECONFIG[ospfclient] = "--enable-ospfapi --enable-ospfclient,--disable-ospfapi --disable-ospfclient"
-
-EXTRA_OECONF:class-native = "--enable-clippy-only"
-
-EXTRA_OECONF:class-target = "--sbindir=${libdir}/frr \
-                             --sysconfdir=${sysconfdir}/frr \
-                             --localstatedir=${localstatedir}/run/frr \
-                             --enable-vtysh \
-                             --enable-multipath=64 \
-                             --enable-user=frr \
-                             --enable-group=frr \
-                             --enable-vty-group=frrvty \
-                             --enable-configfile-mask=0640 \
-                             --enable-logfile-mask=0640 \
-                             --disable-doc \
-                             --with-clippy=${RECIPE_SYSROOT_NATIVE}/usr/lib/clippy \
-                            "
-
-CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
-
-LDFLAGS:append:mips = " -latomic"
-LDFLAGS:append:mipsel = " -latomic"
-LDFLAGS:append:powerpc = " -latomic"
-LDFLAGS:append:riscv32 = " -latomic"
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE:${PN} = "frr.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-do_compile:prepend () {
-   sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' \
-          -e 's#${RECIPE_SYSROOT}##g' ${S}/lib/version.h
-}
-
-do_compile:class-native () {
-    oe_runmake clippy-only
-}
-
-do_install:class-native () {
-    install -d ${D}${libdir}
-    install -m 755 ${S}/lib/clippy ${D}${libdir}/clippy
-}
-
-do_install:append:class-target () {
-    install -m 0755 -d ${D}${sysconfdir}/frr
-    install -m 0640 ${S}/tools/etc/frr/* ${D}${sysconfdir}/frr/
-    chown frr:frrvty ${D}${sysconfdir}/frr
-    chown frr:frr ${D}${sysconfdir}/frr/*
-    chown frr:frrvty ${D}${sysconfdir}/frr/vtysh.conf
-    chmod 640 ${D}${sysconfdir}/frr/*
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
-        install -d ${D}/${sysconfdir}/pam.d
-        install -m 644 ${WORKDIR}/frr.pam ${D}/${sysconfdir}/pam.d/frr
-    fi
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
-        install -d ${D}${sysconfdir}/init.d
-        install -m 0755 ${B}/tools/frrinit.sh ${D}${sysconfdir}/init.d/frr
-
-        install -d ${D}${sysconfdir}/default/volatiles
-        echo "d frr frr 0755 ${localstatedir}/run/frr none" \
-            > ${D}${sysconfdir}/default/volatiles/99_frr
-    fi
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        install -d ${D}${systemd_system_unitdir}
-        install -m 0644 ${B}/tools/frr*.service ${D}${systemd_system_unitdir}
-
-        install -d ${D}${sysconfdir}/tmpfiles.d
-        echo "d /run/frr 0755 frr frr -" \
-            > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
-    fi
-}
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM:${PN} = "--system frr ; --system frrvty"
-USERADD_PARAM:${PN} = "--system --home ${localstatedir}/run/frr/ -M -g frr -G frrvty --shell /bin/false frr"
-
-FILES:${PN} += "${datadir}/yang"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
new file mode 100644
index 0000000..bddc08a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
@@ -0,0 +1,128 @@
+SUMMARY = "BGP/OSPF/RIP routing daemon"
+DESCRIPTION = "FRRouting is a free and open source Internet routing protocol suite for Linux \
+and Unix platforms. It implements BGP, OSPF, RIP, IS-IS, PIM, LDP, BFD, Babel, PBR, OpenFabric \
+and VRRP, with alpha support for EIGRP and NHRP."
+HOMEPAGE = "https://frrouting.org/"
+SECTION = "net"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://doc/licenses/LGPL-2.1;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.0 \
+           file://frr.pam \
+           file://0001-tools-make-quiet-actually-suppress-output.patch \
+           "
+
+SRCREV = "31ed3dd753d62b5d8916998bc32814007e91364b"
+
+UPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"
+
+CVE_PRODUCT = "frrouting"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep python3native pkgconfig useradd systemd
+
+DEPENDS:class-native = "bison-native elfutils-native"
+DEPENDS:class-target = "bison-native json-c readline c-ares libyang frr-native protobuf-c-native protobuf-c"
+
+RDEPENDS:${PN}:class-target = "iproute2 python3-core bash"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG:class-native = ""
+
+PACKAGECONFIG[fpm] = "--enable-fpm,--disable-fpm"
+PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam"
+PACKAGECONFIG[grpc] = "--enable-grpc,--disable-grpc,grpc-native grpc"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
+PACKAGECONFIG[zeromq] = "--enable-zeromq,--disable-zeromq,zeromq"
+PACKAGECONFIG[protobuf] = "--enable-protobuf,--disable-protobuf,protobuf-c-native protobuf-c"
+PACKAGECONFIG[capabilities] = "--enable-capabilities,--disable-capabilities,libcap"
+PACKAGECONFIG[cumulus] = "--enable-cumulus,--disable-cumulus"
+PACKAGECONFIG[datacenter] = "--enable-datacenter,--disable-datacenter"
+PACKAGECONFIG[ospfclient] = "--enable-ospfapi --enable-ospfclient,--disable-ospfapi --disable-ospfclient"
+
+EXTRA_OECONF:class-native = "--enable-clippy-only"
+
+EXTRA_OECONF:class-target = "--sbindir=${libdir}/frr \
+                             --sysconfdir=${sysconfdir}/frr \
+                             --localstatedir=${localstatedir}/run/frr \
+                             --enable-vtysh \
+                             --enable-multipath=64 \
+                             --enable-user=frr \
+                             --enable-group=frr \
+                             --enable-vty-group=frrvty \
+                             --enable-configfile-mask=0640 \
+                             --enable-logfile-mask=0640 \
+                             --disable-doc \
+                             --with-clippy=${RECIPE_SYSROOT_NATIVE}/usr/lib/clippy \
+                            "
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
+
+# https://github.com/FRRouting/frr/issues/14469
+DEBUG_PREFIX_MAP:remove = "-fcanon-prefix-map"
+
+LDFLAGS:append:mips = " -latomic"
+LDFLAGS:append:mipsel = " -latomic"
+LDFLAGS:append:powerpc = " -latomic"
+LDFLAGS:append:riscv32 = " -latomic"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "frr.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_compile:prepend () {
+   sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' \
+          -e 's#${RECIPE_SYSROOT}##g' ${S}/lib/version.h
+}
+
+do_compile:class-native () {
+    oe_runmake clippy-only
+}
+
+do_install:class-native () {
+    install -d ${D}${libdir}
+    install -m 755 ${S}/lib/clippy ${D}${libdir}/clippy
+}
+
+do_install:append:class-target () {
+    install -m 0755 -d ${D}${sysconfdir}/frr
+    install -m 0640 ${S}/tools/etc/frr/* ${D}${sysconfdir}/frr/
+    chown frr:frrvty ${D}${sysconfdir}/frr
+    chown frr:frr ${D}${sysconfdir}/frr/*
+    chown frr:frrvty ${D}${sysconfdir}/frr/vtysh.conf
+    chmod 640 ${D}${sysconfdir}/frr/*
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
+        install -d ${D}/${sysconfdir}/pam.d
+        install -m 644 ${WORKDIR}/frr.pam ${D}/${sysconfdir}/pam.d/frr
+    fi
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+        install -d ${D}${sysconfdir}/init.d
+        install -m 0755 ${B}/tools/frrinit.sh ${D}${sysconfdir}/init.d/frr
+
+        install -d ${D}${sysconfdir}/default/volatiles
+        echo "d frr frr 0755 ${localstatedir}/run/frr none" \
+            > ${D}${sysconfdir}/default/volatiles/99_frr
+    fi
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${systemd_system_unitdir}
+        install -m 0644 ${B}/tools/frr*.service ${D}${systemd_system_unitdir}
+
+        install -d ${D}${sysconfdir}/tmpfiles.d
+        echo "d /run/frr 0755 frr frr -" \
+            > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+    fi
+}
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system frr ; --system frrvty"
+USERADD_PARAM:${PN} = "--system --home ${localstatedir}/run/frr/ -M -g frr -G frrvty --shell /bin/false frr"
+
+FILES:${PN} += "${datadir}/yang"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch
new file mode 100644
index 0000000..daee318
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch
@@ -0,0 +1,38 @@
+From 1cc54320306e07c1fc0eed98e7fbcbb07a2f3b28 Mon Sep 17 00:00:00 2001
+From: Stefan Agner <stefan@agner.ch>
+Date: Fri, 23 Jun 2023 10:10:00 +0200
+Subject: [PATCH] Handle interface without `ifa_addr`
+
+It seems that certain interface types may have `ifa_addr` set to null.
+Handle this case gracefully.
+
+Upstream-Status: Submitted [https://github.com/apple-oss-distributions/mDNSResponder/pull/2/commits/11b410d4d683c90e693c40315997bb3e8ec90e9a]
+
+Signed-off-by: Stefan Agner <stefan@agner.ch>
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+---
+ mDNSPosix/mDNSPosix.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
+index d7f31cc4d5cf..f10301253f58 100644
+--- a/mDNSPosix/mDNSPosix.c
++++ b/mDNSPosix/mDNSPosix.c
+@@ -1895,6 +1895,7 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+ 	    continue;
+ 
+         if ((ifa_loop4 == NULL) &&
++            ((*ifi)->ifa_addr != NULL) &&
+             ((*ifi)->ifa_addr->sa_family == AF_INET) &&
+             ((*ifi)->ifa_flags & IFF_UP) &&
+             ((*ifi)->ifa_flags & IFF_LOOPBACK))
+@@ -1903,7 +1904,8 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+             continue;
+         }
+ 
+-        if (     (((*ifi)->ifa_addr->sa_family == AF_INET)
++        if (     ((*ifi)->ifa_addr != NULL) &&
++                 (((*ifi)->ifa_addr->sa_family == AF_INET)
+ #if HAVE_IPV6
+                   || ((*ifi)->ifa_addr->sa_family == AF_INET6)
+ #endif
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-mDNSShared-Drop-MacOS-specific-__block-qualifier.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-mDNSShared-Drop-MacOS-specific-__block-qualifier.patch
deleted file mode 100644
index 0ac0bb6..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-mDNSShared-Drop-MacOS-specific-__block-qualifier.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 4c0954f77ba05d77192ee1519929a39fbc978321 Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Mon, 5 Dec 2022 15:14:22 +0000
-Subject: [PATCH 3/6] mDNSShared: Drop MacOS specific __block qualifier
-
-Support for this extension only exists in MacOS/Clang, also it's not
-actually used here, so we can just drop it.
-
-Upstream-Status: Pending
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
- mDNSShared/uds_daemon.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/mDNSShared/uds_daemon.c b/mDNSShared/uds_daemon.c
-index 9ae5f78542d6..8c006b71a4ea 100644
---- a/mDNSShared/uds_daemon.c
-+++ b/mDNSShared/uds_daemon.c
-@@ -2912,7 +2912,7 @@ exit:
- mDNSlocal mStatus add_domain_to_browser(request_state *info, const domainname *d)
- {
-     browser_t *b, *p;
--    __block mStatus err;
-+    mStatus err;
- 
-     for (p = info->u.browser.browsers; p; p = p->next)
-     {
--- 
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
index 39e67cd..4cda71b 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
@@ -1,28 +1,25 @@
-From 60533a8947af714cc593bae6b20d47f3a4828589 Mon Sep 17 00:00:00 2001
+From 764b6202402e9e5687ff873330e5ad6be6f69df7 Mon Sep 17 00:00:00 2001
 From: Alex Kiernan <alex.kiernan@gmail.com>
 Date: Mon, 5 Dec 2022 22:49:49 +0000
-Subject: [PATCH 5/6] mDNSCore: Fix broken debug parameter
+Subject: [PATCH] mDNSCore: Fix broken debug parameter
 
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
----
 Upstream-Status: Pending
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
 
+---
  mDNSCore/mDNS.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/mDNSCore/mDNS.c b/mDNSCore/mDNS.c
-index 66979587ee82..e0a982fa1762 100644
+index eecd7daa724e..1e843c081938 100644
 --- a/mDNSCore/mDNS.c
 +++ b/mDNSCore/mDNS.c
-@@ -9831,7 +9831,7 @@ mDNSlocal void mDNSCoreReceiveNoUnicastAnswers(mDNS *const m, const DNSMessage *
+@@ -10210,7 +10210,7 @@ mDNSlocal void mDNSCoreReceiveNoUnicastAnswers(mDNS *const m, const DNSMessage *
  #else
                              const DNSServRef dnsserv = qptr->qDNSServer;
  #endif
--                            debugf("mDNSCoreReceiveNoUnicastAnswers making negative cache entry TTL %d for %##s (%s)", negttl, name->c, DNSTypeName(q.qtype));
+-                            debugf("mDNSCoreReceiveNoUnicastAnswers making negative cache entry TTL %d for %##s (%s)", negttl, currentQName, DNSTypeName(q.qtype));
 +                            debugf("mDNSCoreReceiveNoUnicastAnswers making negative cache entry TTL %d for %##s (%s)", negttl, currentQName->c, DNSTypeName(q.qtype));
                              // Create a negative record for the current name in the CNAME chain.
                              MakeNegativeCacheRecord(m, &m->rec.r, currentQName, currentQNameHash, q.qtype, q.qclass, negttl, mDNSInterface_Any,
                                  dnsserv, response->h.flags);
--- 
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch
new file mode 100644
index 0000000..9fe721f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch
@@ -0,0 +1,23 @@
+From 9fc45a2cf3b78573a568abf538a6e6f4bd30b2d7 Mon Sep 17 00:00:00 2001
+From: Alex Kiernan <alex.kiernan@gmail.com>
+Date: Wed, 27 Sep 2023 11:45:26 +0100
+Subject: [PATCH] Add missing limits.h
+
+Upstream-Status: Pending
+Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
+---
+ mDNSShared/PlatformCommon.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/mDNSShared/PlatformCommon.c b/mDNSShared/PlatformCommon.c
+index 9ce15468e217..c308af3e8b0e 100644
+--- a/mDNSShared/PlatformCommon.c
++++ b/mDNSShared/PlatformCommon.c
+@@ -32,6 +32,7 @@
+ #include <time.h>
+ #include <sys/time.h>           // Needed for #include <sys/time.h>().
+ #include <assert.h>
++#include <limits.h>
+ 
+ 
+ #include "mDNSEmbeddedAPI.h"    // Defines the interface provided to the client layer above
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1790.80.10.bb b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1790.80.10.bb
deleted file mode 100644
index aff7954..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1790.80.10.bb
+++ /dev/null
@@ -1,133 +0,0 @@
-SUMMARY = "Publishes & browses available services on a link according to the Zeroconf / Bonjour protocol"
-DESCRIPTION = "Bonjour, also known as zero-configuration networking, enables automatic discovery of computers, devices, and services on IP networks."
-HOMEPAGE = "http://developer.apple.com/networking/bonjour/"
-LICENSE = "Apache-2.0 & BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=31c50371921e0fb731003bbc665f29bf"
-
-DEPENDS:append:libc-musl = " musl-nscd"
-
-SRC_URI = "git://github.com/apple-oss-distributions/mDNSResponder;protocol=https;branch=rel/mDNSResponder-1790 \
-           file://0001-dns-sd-Include-missing-headers.patch \
-           file://0002-make-Set-libdns_sd.so-soname-correctly.patch \
-           file://0003-mDNSShared-Drop-MacOS-specific-__block-qualifier.patch \
-           file://0004-make-Separate-TLS-targets-from-libraries.patch \
-           file://0005-mDNSCore-Fix-broken-debug-parameter.patch \
-           file://0006-make-Add-top-level-Makefile.patch \
-           file://0001-Create-subroutine-for-cleaning-recent-interfaces.patch \
-           file://0002-Create-subroutine-for-tearing-down-an-interface.patch \
-           file://0003-Track-interface-socket-family.patch \
-           file://0004-Indicate-loopback-interface-to-mDNS-core.patch \
-           file://0005-Use-list-for-changed-interfaces.patch \
-           file://0006-Handle-noisy-netlink-sockets.patch \
-           file://0007-Mark-deleted-interfaces-as-being-changed.patch \
-           file://0008-Handle-errors-from-socket-calls.patch \
-           file://0009-remove-unneeded-headers.patch \
-           file://mdns.service \
-           "
-SRCREV = "8769ab51605e465425d33d757f602ce5905ca639"
-
-# We install a stub Makefile in the top directory so that the various checks
-# in base.bbclass pass their tests for a Makefile, this ensures (that amongst
-# other things) the sstate checks will clean the build directory when the
-# task hashes changes.
-#
-# We can't use the approach of setting ${S} to mDNSPosix as we need
-# DEBUG_PREFIX_MAP to cover files which come from the Clients directory too.
-S = "${WORKDIR}/git"
-
-inherit github-releases manpages systemd update-rc.d
-
-PACKAGECONFIG ?= "tls \
-		  ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-PACKAGECONFIG[debug] = "DEBUG=1,DEBUG=0"
-PACKAGECONFIG[ipv6] = "HAVE_IPV6=1,HAVE_IPV6=0"
-PACKAGECONFIG[manpages] = ""
-PACKAGECONFIG[tls] = ",tls=no,mbedtls"
-
-CVE_PRODUCT = "apple:mdnsresponder"
-
-CVE_STATUS[CVE-2007-0613] = "not-applicable-platform: Issue affects Apple products \
-i.e. ichat,mdnsresponder, instant message framework and MacOS. Also, \
-https://www.exploit-db.com/exploits/3230 shows the part of code \
-affected by CVE-2007-0613 which is not preset in upstream source code. \
-Hence, CVE-2007-0613 does not affect other Yocto implementations and \
-is not reported for other distros can be marked whitelisted. \
-Links: https://vulmon.com/vulnerabilitydetails?qid=CVE-2007-0613 \
-https://www.incibe-cert.es/en/early-warning/vulnerabilities/cve-2007-0613 \
-https://security-tracker.debian.org/tracker/CVE-2007-0613 \
-https://vulmon.com/vulnerabilitydetails?qid=CVE-2007-0613"
-
-PARALLEL_MAKE = ""
-
-EXTRA_OEMAKE = "os=linux 'CC=${CCLD}' 'LD=${CCLD}' 'LINKOPTS=${LDFLAGS}' STRIP=: ${PACKAGECONFIG_CONFARGS}"
-
-# MDNS_VERSIONSTR_NODTS disables __DATE__ and __TIME__ in the version string,
-# which are fixed anyway for build reproducibility.
-TARGET_CPPFLAGS += "-DMDNS_VERSIONSTR_NODTS"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-MDNS_BUILDDIR = "build/${@bb.utils.contains('PACKAGECONFIG','debug','debug','prod', d)}"
-
-do_install () {
-	cd mDNSPosix
-
-	install -d ${D}${sbindir}
-	install ${MDNS_BUILDDIR}/mdnsd ${D}${sbindir}
-
-	install -d ${D}${libdir}
-	install -m 0644 ${MDNS_BUILDDIR}/libdns_sd.so ${D}${libdir}/libdns_sd.so.1
-	ln -s libdns_sd.so.1 ${D}${libdir}/libdns_sd.so
-
-	install -d ${D}${includedir}
-	install -m 0644 ../mDNSShared/dns_sd.h ${D}${includedir}
-
-	install -d ${D}${mandir}/man8
-	install -m 0644 ../mDNSShared/mDNSResponder.8 ${D}${mandir}/man8/mdnsd.8
-
-	install -d ${D}${bindir}
-	install -m 0755 ../Clients/build/dns-sd ${D}${bindir}
-
-	install -d ${D}${libdir}
-	oe_libinstall -C ${MDNS_BUILDDIR} -so libnss_mdns-0.2 ${D}${libdir}
-	ln -s libnss_mdns-0.2.so ${D}${libdir}/libnss_mdns.so.2
-
-	install -d ${D}${sysconfdir}
-	install -m 0644 nss_mdns.conf ${D}${sysconfdir}
-
-	install -d ${D}${mandir}/man5
-	install -m 0644 nss_mdns.conf.5 ${D}${mandir}/man5
-
-	install -d ${D}${mandir}/man8
-	install -m 0644 libnss_mdns.8 ${D}${mandir}/man8
-
-	install -d ${D}${systemd_system_unitdir}
-	install -m 0644 ${WORKDIR}/mdns.service ${D}${systemd_system_unitdir}
-
-	install -d ${D}${INIT_D_DIR}
-	install mdnsd.sh ${D}${INIT_D_DIR}/mdns
-}
-
-pkg_postinst:${PN} () {
-	if [ -r $D${sysconfdir}/nsswitch.conf ]; then
-		sed -e '/^hosts:/s/\s*\<mdns\>//' \
-			-e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 mdns\3\4\5/' \
-			-i $D${sysconfdir}/nsswitch.conf
-	fi
-}
-
-pkg_prerm:${PN} () {
-	if [ -r $D${sysconfdir}/nsswitch.conf ]; then
-		sed -e '/^hosts:/s/\s*\<mdns\>//' \
-			-e '/^hosts:/s/\s*mdns//' \
-				-i $D${sysconfdir}/nsswitch.conf
-	fi
-}
-
-SYSTEMD_SERVICE:${PN} = "mdns.service"
-INITSCRIPT_NAME = "mdns"
-
-FILES_SOLIBSDEV = "${libdir}/libdns_sd.so"
-FILES:${PN} += "${libdir}/libnss_mdns-0.2.so"
-
-RPROVIDES:${PN} += "libdns_sd.so"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb
new file mode 100644
index 0000000..8370ed5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb
@@ -0,0 +1,134 @@
+SUMMARY = "Publishes & browses available services on a link according to the Zeroconf / Bonjour protocol"
+DESCRIPTION = "Bonjour, also known as zero-configuration networking, enables automatic discovery of computers, devices, and services on IP networks."
+HOMEPAGE = "http://developer.apple.com/networking/bonjour/"
+LICENSE = "Apache-2.0 & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=31c50371921e0fb731003bbc665f29bf"
+
+DEPENDS:append:libc-musl = " musl-nscd"
+
+SRC_URI = "git://github.com/apple-oss-distributions/mDNSResponder;protocol=https;branch=main \
+           file://0001-dns-sd-Include-missing-headers.patch \
+           file://0002-make-Set-libdns_sd.so-soname-correctly.patch \
+           file://0004-make-Separate-TLS-targets-from-libraries.patch \
+           file://0005-mDNSCore-Fix-broken-debug-parameter.patch \
+           file://0006-make-Add-top-level-Makefile.patch \
+           file://0001-Create-subroutine-for-cleaning-recent-interfaces.patch \
+           file://0002-Create-subroutine-for-tearing-down-an-interface.patch \
+           file://0003-Track-interface-socket-family.patch \
+           file://0004-Indicate-loopback-interface-to-mDNS-core.patch \
+           file://0005-Use-list-for-changed-interfaces.patch \
+           file://0006-Handle-noisy-netlink-sockets.patch \
+           file://0007-Mark-deleted-interfaces-as-being-changed.patch \
+           file://0008-Handle-errors-from-socket-calls.patch \
+           file://0009-remove-unneeded-headers.patch \
+           file://mdns.service \
+           file://0015-Add-missing-limits.h.patch \
+           file://0001-Handle-interface-without-ifa_addr.patch \
+           "
+SRCREV = "d5029b5dff8aa59d1fc07ed796e994106ef58dee"
+
+# We install a stub Makefile in the top directory so that the various checks
+# in base.bbclass pass their tests for a Makefile, this ensures (that amongst
+# other things) the sstate checks will clean the build directory when the
+# task hashes changes.
+#
+# We can't use the approach of setting ${S} to mDNSPosix as we need
+# DEBUG_PREFIX_MAP to cover files which come from the Clients directory too.
+S = "${WORKDIR}/git"
+
+inherit github-releases manpages systemd update-rc.d
+
+PACKAGECONFIG ?= "tls \
+		  ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[debug] = "DEBUG=1,DEBUG=0"
+PACKAGECONFIG[ipv6] = "HAVE_IPV6=1,HAVE_IPV6=0"
+PACKAGECONFIG[manpages] = ""
+PACKAGECONFIG[tls] = ",tls=no,mbedtls"
+
+CVE_PRODUCT = "apple:mdnsresponder"
+
+CVE_STATUS[CVE-2007-0613] = "not-applicable-platform: Issue affects Apple products \
+i.e. ichat,mdnsresponder, instant message framework and MacOS. Also, \
+https://www.exploit-db.com/exploits/3230 shows the part of code \
+affected by CVE-2007-0613 which is not preset in upstream source code. \
+Hence, CVE-2007-0613 does not affect other Yocto implementations and \
+is not reported for other distros can be marked whitelisted. \
+Links: https://vulmon.com/vulnerabilitydetails?qid=CVE-2007-0613 \
+https://www.incibe-cert.es/en/early-warning/vulnerabilities/cve-2007-0613 \
+https://security-tracker.debian.org/tracker/CVE-2007-0613 \
+https://vulmon.com/vulnerabilitydetails?qid=CVE-2007-0613"
+
+PARALLEL_MAKE = ""
+
+EXTRA_OEMAKE = "os=linux 'CC=${CCLD}' 'LD=${CCLD}' 'LINKOPTS=${LDFLAGS}' STRIP=: ${PACKAGECONFIG_CONFARGS}"
+
+# MDNS_VERSIONSTR_NODTS disables __DATE__ and __TIME__ in the version string,
+# which are fixed anyway for build reproducibility.
+TARGET_CPPFLAGS += "-DMDNS_VERSIONSTR_NODTS"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+MDNS_BUILDDIR = "build/${@bb.utils.contains('PACKAGECONFIG','debug','debug','prod', d)}"
+
+do_install () {
+	cd mDNSPosix
+
+	install -d ${D}${sbindir}
+	install ${MDNS_BUILDDIR}/mdnsd ${D}${sbindir}
+
+	install -d ${D}${libdir}
+	install -m 0644 ${MDNS_BUILDDIR}/libdns_sd.so ${D}${libdir}/libdns_sd.so.1
+	ln -s libdns_sd.so.1 ${D}${libdir}/libdns_sd.so
+
+	install -d ${D}${includedir}
+	install -m 0644 ../mDNSShared/dns_sd.h ${D}${includedir}
+
+	install -d ${D}${mandir}/man8
+	install -m 0644 ../mDNSShared/mDNSResponder.8 ${D}${mandir}/man8/mdnsd.8
+
+	install -d ${D}${bindir}
+	install -m 0755 ../Clients/build/dns-sd ${D}${bindir}
+
+	install -d ${D}${libdir}
+	oe_libinstall -C ${MDNS_BUILDDIR} -so libnss_mdns-0.2 ${D}${libdir}
+	ln -s libnss_mdns-0.2.so ${D}${libdir}/libnss_mdns.so.2
+
+	install -d ${D}${sysconfdir}
+	install -m 0644 nss_mdns.conf ${D}${sysconfdir}
+
+	install -d ${D}${mandir}/man5
+	install -m 0644 nss_mdns.conf.5 ${D}${mandir}/man5
+
+	install -d ${D}${mandir}/man8
+	install -m 0644 libnss_mdns.8 ${D}${mandir}/man8
+
+	install -d ${D}${systemd_system_unitdir}
+	install -m 0644 ${WORKDIR}/mdns.service ${D}${systemd_system_unitdir}
+
+	install -d ${D}${INIT_D_DIR}
+	install mdnsd.sh ${D}${INIT_D_DIR}/mdns
+}
+
+pkg_postinst:${PN} () {
+	if [ -r $D${sysconfdir}/nsswitch.conf ]; then
+		sed -e '/^hosts:/s/\s*\<mdns\>//' \
+			-e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 mdns\3\4\5/' \
+			-i $D${sysconfdir}/nsswitch.conf
+	fi
+}
+
+pkg_prerm:${PN} () {
+	if [ -r $D${sysconfdir}/nsswitch.conf ]; then
+		sed -e '/^hosts:/s/\s*\<mdns\>//' \
+			-e '/^hosts:/s/\s*mdns//' \
+				-i $D${sysconfdir}/nsswitch.conf
+	fi
+}
+
+SYSTEMD_SERVICE:${PN} = "mdns.service"
+INITSCRIPT_NAME = "mdns"
+
+FILES_SOLIBSDEV = "${libdir}/libdns_sd.so"
+FILES:${PN} += "${libdir}/libnss_mdns-0.2.so"
+
+RPROVIDES:${PN} += "libdns_sd.so"
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.20.bb b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.20.bb
deleted file mode 100644
index e41dd93..0000000
--- a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.20.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SUMMARY = "Dovecot is an open source IMAP and POP3 email server"
-HOMEPAGE = "https://www.dovecot.org/"
-DESCRIPTION = "Dovecot is an open source IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, requires no special administration and it uses very little memory."
-SECTION = "mail"
-LICENSE = "LGPL-2.1-only & MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2956560272e5b31d9d64f03111732048"
-
-SRC_URI = "http://dovecot.org/releases/2.3/dovecot-${PV}.tar.gz \
-           file://0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch \
-           file://dovecot.service \
-           file://dovecot.socket \
-           file://0001-not-check-pandoc.patch \
-           file://0001-m4-Check-for-libunwind-instead-of-libunwind-generic.patch \
-           "
-SRC_URI[sha256sum] = "caa832eb968148abdf35ee9d0f534b779fa732c0ce4a913d9ab8c3469b218552"
-
-DEPENDS = "openssl xz zlib bzip2 libcap icu libtirpc bison-native"
-CFLAGS += "-I${STAGING_INCDIR}/tirpc"
-LDFLAGS += "-ltirpc"
-
-inherit autotools pkgconfig systemd useradd gettext multilib_header
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ldap pam systemd', d)}"
-
-PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
-PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd,"
-PACKAGECONFIG[ldap] = "--with-ldap=plugin,--without-ldap,openldap,"
-PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
-
-# From native build in armv7a-hf/eglibc
-CACHED_CONFIGUREVARS += "i_cv_signed_size_t=no \
-                         i_cv_gmtime_max_time_t=32 \
-                         i_cv_signed_time_t=yes \
-                         i_cv_mmap_plays_with_write=yes \
-                         i_cv_fd_passing=yes \
-                         i_cv_c99_vsnprintf=yes \
-                         lib_cv___va_copy=yes \
-                         lib_cv_va_copy=yes \
-                         lib_cv_va_val_copy=yes \
-                        "
-
-# hardcode epoll() to avoid running unsafe tests
-# BSD needs kqueue and uclibc poll()
-EXTRA_OECONF = " --with-ioloop=epoll"
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE:${PN} = "dovecot.service dovecot.socket"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-do_install:append () {
-    rm -rf ${D}${libdir}/dovecot/dovecot-config
-    install -d 755 ${D}/etc/dovecot
-    touch 644 ${D}/etc/dovecot/dovecot.conf
-    if [ "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" ]; then
-        install -m 0644 ${WORKDIR}/dovecot.service ${D}${systemd_unitdir}/system
-        sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/dovecot.service
-        sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/dovecot.service
-    fi
-    oe_multilib_header dovecot/config.h
-}
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "-r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovecot dovecot; \
-                      -r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovenull dovenull"
-GROUPADD_PARAM:${PN} = "-f -r dovecot;-f -r dovenull"
-
-FILES:${PN} += "${libdir}/dovecot/*plugin.so \
-                ${libdir}/dovecot/libfs_compress.so \
-                ${libdir}/dovecot/libssl_iostream_openssl.so"
-FILES:${PN}-staticdev += "${libdir}/dovecot/*/*.a"
-FILES:${PN}-dev += "${libdir}/dovecot/libdovecot*.so"
-FILES:${PN}-dbg += "${libdir}/dovecot/*/.debug"
-
-CVE_STATUS[CVE-2016-4983] = "not-applicable-platform: Affects only postinstall script on specific distribution."
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.21.bb b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.21.bb
new file mode 100644
index 0000000..17fbd78
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.3.21.bb
@@ -0,0 +1,74 @@
+SUMMARY = "Dovecot is an open source IMAP and POP3 email server"
+HOMEPAGE = "https://www.dovecot.org/"
+DESCRIPTION = "Dovecot is an open source IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, requires no special administration and it uses very little memory."
+SECTION = "mail"
+LICENSE = "LGPL-2.1-only & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2956560272e5b31d9d64f03111732048"
+
+SRC_URI = "http://dovecot.org/releases/2.3/dovecot-${PV}.tar.gz \
+           file://0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch \
+           file://dovecot.service \
+           file://dovecot.socket \
+           file://0001-not-check-pandoc.patch \
+           file://0001-m4-Check-for-libunwind-instead-of-libunwind-generic.patch \
+           "
+SRC_URI[sha256sum] = "05b11093a71c237c2ef309ad587510721cc93bbee6828251549fc1586c36502d"
+
+DEPENDS = "openssl xz zlib bzip2 libcap icu libtirpc bison-native"
+CFLAGS += "-I${STAGING_INCDIR}/tirpc"
+LDFLAGS += "-ltirpc"
+
+inherit autotools pkgconfig systemd useradd gettext multilib_header
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ldap pam systemd', d)}"
+
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
+PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd,"
+PACKAGECONFIG[ldap] = "--with-ldap=plugin,--without-ldap,openldap,"
+PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
+
+# From native build in armv7a-hf/eglibc
+CACHED_CONFIGUREVARS += "i_cv_signed_size_t=no \
+                         i_cv_gmtime_max_time_t=32 \
+                         i_cv_signed_time_t=yes \
+                         i_cv_mmap_plays_with_write=yes \
+                         i_cv_fd_passing=yes \
+                         i_cv_c99_vsnprintf=yes \
+                         lib_cv___va_copy=yes \
+                         lib_cv_va_copy=yes \
+                         lib_cv_va_val_copy=yes \
+                        "
+
+# hardcode epoll() to avoid running unsafe tests
+# BSD needs kqueue and uclibc poll()
+EXTRA_OECONF = " --with-ioloop=epoll"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "dovecot.service dovecot.socket"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install:append () {
+    rm -rf ${D}${libdir}/dovecot/dovecot-config
+    install -d 755 ${D}/etc/dovecot
+    touch 644 ${D}/etc/dovecot/dovecot.conf
+    if [ "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" ]; then
+        install -m 0644 ${WORKDIR}/dovecot.service ${D}${systemd_unitdir}/system
+        sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/dovecot.service
+        sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/dovecot.service
+    fi
+    oe_multilib_header dovecot/config.h
+}
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "-r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovecot dovecot; \
+                      -r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovenull dovenull"
+GROUPADD_PARAM:${PN} = "-f -r dovecot;-f -r dovenull"
+
+FILES:${PN} += "${libdir}/dovecot/*plugin.so \
+                ${libdir}/dovecot/libfs_compress.so \
+                ${libdir}/dovecot/libssl_iostream_openssl.so"
+FILES:${PN}-staticdev += "${libdir}/dovecot/*/*.a"
+FILES:${PN}-dev += "${libdir}/dovecot/libdovecot*.so"
+FILES:${PN}-dbg += "${libdir}/dovecot/*/.debug"
+
+CVE_STATUS[CVE-2016-4983] = "not-applicable-platform: Affects only postinstall script on specific distribution."
diff --git a/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/0001-Add-build-option-for-NTLM-support.patch b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/0001-Add-build-option-for-NTLM-support.patch
index 64938a4..dbdd644 100644
--- a/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/0001-Add-build-option-for-NTLM-support.patch
+++ b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/0001-Add-build-option-for-NTLM-support.patch
@@ -11,7 +11,7 @@
 Like 1.0.6, it will check openssl MD4 algorithm support as MD4 is
 insecure and modern systems may drop MD4 support.
 
-Upstream-Status: Accepted [https://github.com/libesmtp/libESMTP/commit/1c304e7886a08fb56485e41614ff3f8685afb59d]
+Upstream-Status: Backport [https://github.com/libesmtp/libESMTP/commit/1c304e7886a08fb56485e41614ff3f8685afb59d]
 Signed-off-by: Jiaqing Zhao <jiaqing.zhao@intel.com>
 ---
  meson.build       | 13 ++++++++++---
diff --git a/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2.bb b/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2.bb
deleted file mode 100644
index d11ada6..0000000
--- a/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2.bb
+++ /dev/null
@@ -1,129 +0,0 @@
-SUMMARY = "The Network Time Protocol suite, refactored"
-HOMEPAGE = "https://www.ntpsec.org/"
-
-LICENSE = "CC-BY-4.0 & BSD-2-Clause & NTP & BSD-3-Clause & MIT"
-LIC_FILES_CHKSUM = "file://LICENSES/BSD-2;md5=653830da7b770a32f6f50f6107e0b186 \
-                    file://LICENSES/BSD-3;md5=55e9dcf6a625a2dcfcda4ef6a647fbfd \
-                    file://LICENSES/CC-BY-4.0;md5=2ab724713fdaf49e4523c4503bfd068d \
-                    file://LICENSES/MIT;md5=5a9dfc801af3eb49df2055c9b07918b2 \
-                    file://LICENSES/NTP;md5=cb56b7747f86157c78ca81f224806694"
-
-DEPENDS += "bison-native \
-            openssl \
-            python3"
-
-SRC_URI = "https://ftp.ntpsec.org/pub/releases/ntpsec-${PV}.tar.gz \
-           file://volatiles.ntpsec \
-           file://0001-wscript-Add-BISONFLAGS-support.patch \
-           "
-
-SRC_URI[sha256sum] = "2f2848760b915dfe185b9217f777738b36ceeb78a7fc208b7e74e039dec22df5"
-
-UPSTREAM_CHECK_URI = "ftp://ftp.ntpsec.org/pub/releases/"
-
-inherit pkgconfig python3-dir python3targetconfig systemd update-alternatives update-rc.d useradd waf features_check
-
-# RDEPENDS on gnuplot with this restriction
-REQUIRED_DISTRO_FEATURES = "x11"
-
-PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'seccomp systemd', d)} \
-                 cap \
-                 leap-smear \
-                 mdns \
-                 mssntp \
-                 nts \
-                 refclocks"
-
-PACKAGECONFIG:remove:riscv32 = "seccomp"
-
-PACKAGECONFIG[cap] = ",,libcap"
-PACKAGECONFIG[docs] = "--enable-doc --enable-manpage,--disable-doc --disable-manpage,"
-PACKAGECONFIG[leap-smear] = "--enable-leap-smear"
-PACKAGECONFIG[mdns] = ",,mdns"
-PACKAGECONFIG[mssntp] = "--enable-mssntp"
-PACKAGECONFIG[nts] = ",--disable-nts"
-PACKAGECONFIG[refclocks] = "--refclock=all,,pps-tools"
-PACKAGECONFIG[seccomp] = "--enable-seccomp,,libseccomp"
-PACKAGECONFIG[systemd] = ",,systemd"
-
-CC[unexport] = "1"
-CFLAGS[unexport] = "1"
-LDFLAGS[unexport] = "1"
-
-export PYTHON_VERSION = "${PYTHON_BASEVERSION}"
-export PYTAG = "cpython${@ d.getVar('PYTHON_BASEVERSION').replace('.', '')}"
-export pyext_PATTERN = "%s.so"
-export PYTHON_LDFLAGS = "-lpthread -ldl"
-
-CFLAGS:append = " -I${PYTHON_INCLUDE_DIR} -D_GNU_SOURCE"
-
-EXTRA_OECONF = "--cross-compiler='${CC}' \
-                --cross-cflags='${CFLAGS}' \
-                --cross-ldflags='${LDFLAGS}' \
-                --pyshebang=${bindir}/python3 \
-                --pythondir=${PYTHON_SITEPACKAGES_DIR} \
-                --pythonarchdir=${PYTHON_SITEPACKAGES_DIR} \
-                --enable-debug-gdb \
-                --enable-early-droproot"
-
-EXTRA_OEWAF_BUILD ?= "-v"
-
-NTP_USER_HOME ?= "/var/lib/ntp"
-
-BISONFLAGS = "--file-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
-
-do_configure:prepend() {
-	export BISONFLAGS="${BISONFLAGS}"
-}
-
-do_install:append() {
-	install -d ${D}${sysconfdir}/init.d
-	install -m 755 ${S}/etc/rc/ntpd ${D}${sysconfdir}/init.d
-	cp -r ${S}/etc/ntp.d ${D}${sysconfdir}
-
-	sed -e 's:@NTP_USER_HOME@:${NTP_USER_HOME}:g' ${WORKDIR}/volatiles.ntpsec >${T}/volatiles.ntpsec
-	if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
-		cp ${B}/main/etc/* ${D}${systemd_system_unitdir}
-		awk '{print $1, $5, $4, $2, $3, "-"}' ${T}/volatiles.ntpsec >${T}/tmpfiles.ntpsec
-		install -D -m 0644 ${T}/tmpfiles.ntpsec ${D}${nonarch_libdir}/tmpfiles.d/${BPN}.conf
-	else
-		install -D -m 0644 ${T}/volatiles.ntpsec ${D}${sysconfdir}/default/volatiles/99_${BPN}
-	fi
-}
-
-PACKAGE_BEFORE_PN = "${PN}-python ${PN}-utils ${PN}-viz"
-
-FILES:${PN} += "${nonarch_libdir}/tmpfiles.d/ntpsec.conf"
-FILES:${PN}-python = "${PYTHON_SITEPACKAGES_DIR} \
-                      ${libdir}/libntpc.so.*"
-FILES:${PN}-utils = "${bindir}/ntpdig \
-                     ${bindir}/ntpkeygen \
-                     ${bindir}/ntpleapfetch \
-                     ${bindir}/ntpmon \
-                     ${bindir}/ntpq \
-                     ${bindir}/ntpsnmpd \
-                     ${bindir}/ntpsweep \
-                     ${bindir}/ntptrace \
-                     ${bindir}/ntpwait"
-FILES:${PN}-viz = "${bindir}/ntplogtemp \
-                   ${bindir}/ntpviz"
-
-RDEPENDS:${PN} += "libgcc"
-RDEPENDS:${PN}-utils += "${PN}-python python3-core"
-RDEPENDS:${PN}-viz += "gnuplot ${PN}-python python3-core python3-compression python3-ctypes python3-logging python3-shell"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --home-dir ${NTP_USER_HOME} \
-                       --no-create-home \
-                       --shell /bin/false --user-group ntp"
-
-INITSCRIPT_NAME = "ntpd"
-
-SYSTEMD_PACKAGES = "${PN} ${PN}-viz"
-SYSTEMD_SERVICE:${PN} = "ntpd.service ntp-wait.service"
-SYSTEMD_SERVICE:${PN}-viz = "ntplogtemp.service ntpviz-weekly.timer ntpviz-weekly.service ntpviz-daily.timer ntpviz-daily.service ntplogtemp.timer"
-
-ALTERNATIVE_PRIORITY = "80"
-
-ALTERNATIVE:${PN} = "ntpd"
-ALTERNATIVE_LINK_NAME[ntpd] = "${sbindir}/ntpd"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb b/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb
new file mode 100644
index 0000000..af41d49
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb
@@ -0,0 +1,129 @@
+SUMMARY = "The Network Time Protocol suite, refactored"
+HOMEPAGE = "https://www.ntpsec.org/"
+
+LICENSE = "CC-BY-4.0 & BSD-2-Clause & NTP & BSD-3-Clause & MIT"
+LIC_FILES_CHKSUM = "file://LICENSES/BSD-2;md5=653830da7b770a32f6f50f6107e0b186 \
+                    file://LICENSES/BSD-3;md5=55e9dcf6a625a2dcfcda4ef6a647fbfd \
+                    file://LICENSES/CC-BY-4.0;md5=2ab724713fdaf49e4523c4503bfd068d \
+                    file://LICENSES/MIT;md5=5a9dfc801af3eb49df2055c9b07918b2 \
+                    file://LICENSES/NTP;md5=cb56b7747f86157c78ca81f224806694"
+
+DEPENDS += "bison-native \
+            openssl \
+            python3"
+
+SRC_URI = "https://ftp.ntpsec.org/pub/releases/ntpsec-${PV}.tar.gz \
+           file://volatiles.ntpsec \
+           file://0001-wscript-Add-BISONFLAGS-support.patch \
+           "
+
+SRC_URI[sha256sum] = "e0ce93af222a0a9860e6f5a51aadba9bb5ca601d80b2aea118a62f0a3226950e"
+
+UPSTREAM_CHECK_URI = "ftp://ftp.ntpsec.org/pub/releases/"
+
+inherit pkgconfig python3-dir python3targetconfig systemd update-alternatives update-rc.d useradd waf features_check
+
+# RDEPENDS on gnuplot with this restriction
+REQUIRED_DISTRO_FEATURES = "x11"
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'seccomp systemd', d)} \
+                 cap \
+                 leap-smear \
+                 mdns \
+                 mssntp \
+                 nts \
+                 refclocks"
+
+PACKAGECONFIG:remove:riscv32 = "seccomp"
+
+PACKAGECONFIG[cap] = ",,libcap"
+PACKAGECONFIG[docs] = "--enable-doc --enable-manpage,--disable-doc --disable-manpage,"
+PACKAGECONFIG[leap-smear] = "--enable-leap-smear"
+PACKAGECONFIG[mdns] = ",,mdns"
+PACKAGECONFIG[mssntp] = "--enable-mssntp"
+PACKAGECONFIG[nts] = ",--disable-nts"
+PACKAGECONFIG[refclocks] = "--refclock=all,,pps-tools"
+PACKAGECONFIG[seccomp] = "--enable-seccomp,,libseccomp"
+PACKAGECONFIG[systemd] = ",,systemd"
+
+CC[unexport] = "1"
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+
+export PYTHON_VERSION = "${PYTHON_BASEVERSION}"
+export PYTAG = "cpython${@ d.getVar('PYTHON_BASEVERSION').replace('.', '')}"
+export pyext_PATTERN = "%s.so"
+export PYTHON_LDFLAGS = "-lpthread -ldl"
+
+CFLAGS:append = " -I${PYTHON_INCLUDE_DIR} -D_GNU_SOURCE"
+
+EXTRA_OECONF = "--cross-compiler='${CC}' \
+                --cross-cflags='${CFLAGS}' \
+                --cross-ldflags='${LDFLAGS}' \
+                --pyshebang=${bindir}/python3 \
+                --pythondir=${PYTHON_SITEPACKAGES_DIR} \
+                --pythonarchdir=${PYTHON_SITEPACKAGES_DIR} \
+                --enable-debug-gdb \
+                --enable-early-droproot"
+
+EXTRA_OEWAF_BUILD ?= "-v"
+
+NTP_USER_HOME ?= "/var/lib/ntp"
+
+BISONFLAGS = "--file-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+
+do_configure:prepend() {
+	export BISONFLAGS="${BISONFLAGS}"
+}
+
+do_install:append() {
+	install -d ${D}${sysconfdir}/init.d
+	install -m 755 ${S}/etc/rc/ntpd ${D}${sysconfdir}/init.d
+	cp -r ${S}/etc/ntp.d ${D}${sysconfdir}
+
+	sed -e 's:@NTP_USER_HOME@:${NTP_USER_HOME}:g' ${WORKDIR}/volatiles.ntpsec >${T}/volatiles.ntpsec
+	if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+		cp ${B}/main/etc/* ${D}${systemd_system_unitdir}
+		awk '{print $1, $5, $4, $2, $3, "-"}' ${T}/volatiles.ntpsec >${T}/tmpfiles.ntpsec
+		install -D -m 0644 ${T}/tmpfiles.ntpsec ${D}${nonarch_libdir}/tmpfiles.d/${BPN}.conf
+	else
+		install -D -m 0644 ${T}/volatiles.ntpsec ${D}${sysconfdir}/default/volatiles/99_${BPN}
+	fi
+}
+
+PACKAGE_BEFORE_PN = "${PN}-python ${PN}-utils ${PN}-viz"
+
+FILES:${PN} += "${nonarch_libdir}/tmpfiles.d/ntpsec.conf"
+FILES:${PN}-python = "${PYTHON_SITEPACKAGES_DIR} \
+                      ${libdir}/libntpc.so.*"
+FILES:${PN}-utils = "${bindir}/ntpdig \
+                     ${bindir}/ntpkeygen \
+                     ${bindir}/ntpleapfetch \
+                     ${bindir}/ntpmon \
+                     ${bindir}/ntpq \
+                     ${bindir}/ntpsnmpd \
+                     ${bindir}/ntpsweep \
+                     ${bindir}/ntptrace \
+                     ${bindir}/ntpwait"
+FILES:${PN}-viz = "${bindir}/ntplogtemp \
+                   ${bindir}/ntpviz"
+
+RDEPENDS:${PN} += "libgcc"
+RDEPENDS:${PN}-utils += "${PN}-python python3-core"
+RDEPENDS:${PN}-viz += "gnuplot ${PN}-python python3-core python3-compression python3-ctypes python3-logging python3-shell"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --home-dir ${NTP_USER_HOME} \
+                       --no-create-home \
+                       --shell /bin/false --user-group ntp"
+
+INITSCRIPT_NAME = "ntpd"
+
+SYSTEMD_PACKAGES = "${PN} ${PN}-viz"
+SYSTEMD_SERVICE:${PN} = "ntpd.service ntp-wait.service"
+SYSTEMD_SERVICE:${PN}-viz = "ntplogtemp.service ntpviz-weekly.timer ntpviz-weekly.service ntpviz-daily.timer ntpviz-daily.service ntplogtemp.timer"
+
+ALTERNATIVE_PRIORITY = "80"
+
+ALTERNATIVE:${PN} = "ntpd"
+ALTERNATIVE_LINK_NAME[ntpd] = "${sbindir}/ntpd"
diff --git a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index 06f3e16..81094bf 100644
--- a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -24,7 +24,6 @@
     libssh \
     libtinyxml2 \
     libxml++-5.0 \
-    libxmlb \
     libyang \
     lmdb \
     minicoredumper \
@@ -49,6 +48,7 @@
     fftw \
     libusb-compat \
     rsyslog \
+    mariadb \
 "
 
 PTESTS_PROBLEMS_META_OE ="\
diff --git a/meta-openembedded/meta-oe/conf/layer.conf b/meta-openembedded/meta-oe/conf/layer.conf
index e5970cf..b0e48de 100644
--- a/meta-openembedded/meta-oe/conf/layer.conf
+++ b/meta-openembedded/meta-oe/conf/layer.conf
@@ -85,6 +85,7 @@
   ttf-dejavu->fontconfig \
   ttf-droid->fontconfig \
   ttf-gentium->fontconfig \
+  ttf-google-fira->fontconfig \
   ttf-hunkyfonts->fontconfig \
   ttf-inconsolata->fontconfig \
   ttf-ipa->fontconfig \
diff --git a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/7_6.diff b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/7_6.diff
index 8ab5386..cdb29f2 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/7_6.diff
+++ b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/7_6.diff
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 === modified file 'openbox-xdgmenu.c'
 --- openbox-xdgmenu.c	2011-09-03 20:13:39 +0000
 +++ openbox-xdgmenu.c	2013-12-28 17:41:04 +0000
diff --git a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/fix-menu-generation.patch b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/fix-menu-generation.patch
index 03b3572..3def090 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/fix-menu-generation.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/fix-menu-generation.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Index: openbox-xdgmenu-0.3/openbox-xdgmenu.c
 ===================================================================
 --- openbox-xdgmenu-0.3.orig/openbox-xdgmenu.c
diff --git a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/port-gnome-menus3.patch b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/port-gnome-menus3.patch
index 3fcc319..6d12348 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/port-gnome-menus3.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/gnome-layer/recipes-graphics/openbox/openbox-xdgmenu/port-gnome-menus3.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Index: openbox-xdgmenu-0.3/openbox-xdgmenu.c
 ===================================================================
 --- openbox-xdgmenu-0.3.orig/openbox-xdgmenu.c
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
index 0e38f7d..d4c8a3d 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
@@ -10,6 +10,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
+Upstream-Status: Pending
+
  plugins/devinput.c | 7 ++++++-
  1 file changed, 6 insertions(+), 1 deletion(-)
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Makefile.am-do-not-clobber-PYTHONPATH-from-build-env.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Makefile.am-do-not-clobber-PYTHONPATH-from-build-env.patch
index 089ed23..11f6485 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Makefile.am-do-not-clobber-PYTHONPATH-from-build-env.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Makefile.am-do-not-clobber-PYTHONPATH-from-build-env.patch
@@ -8,6 +8,8 @@
 
 Signed-off-by: Alexander Kanavin <alex@linutronix.de>
 ---
+Upstream-Status: Pending
+
  Makefile.am       | 2 +-
  pylint.mak        | 2 +-
  tools/Makefile.am | 2 +-
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Unbolt-ubuntu-hack.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Unbolt-ubuntu-hack.patch
index e58a93b..73bacc9 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Unbolt-ubuntu-hack.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Unbolt-ubuntu-hack.patch
@@ -7,7 +7,7 @@
 build host and build host might be ubuntu but that does not matter in
 cross compilation case. This fails builds when usrmerge feature is used
 
-Upstream-Status: Inappropriates [ Cross-compile specific ]
+Upstream-Status: Inappropriate [ Cross-compile specific ]
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
  configure.ac | 2 +-
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/fix_build_errors.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/fix_build_errors.patch
index 41353db..ed840cd 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/fix_build_errors.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/fix_build_errors.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 diff --git a/configure.ac b/configure.ac
 index 58347d8..8c7fca2 100644
 --- a/configure.ac
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/netplan/netplan/0001-don-t-fail-if-GLOB_BRACE-is-not-defined.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/netplan/netplan/0001-don-t-fail-if-GLOB_BRACE-is-not-defined.patch
index 8779c25..0bd7f80 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/netplan/netplan/0001-don-t-fail-if-GLOB_BRACE-is-not-defined.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/netplan/netplan/0001-don-t-fail-if-GLOB_BRACE-is-not-defined.patch
@@ -5,6 +5,8 @@
 
 Signed-off-by: Zang Ruochen <zangrc.fnst@cn.fujitsu.com>
 ---
+Upstream-Status: Pending
+
  src/util.c | 6 ++++++
  1 file changed, 6 insertions(+)
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-build-on-32bit.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-build-on-32bit.patch
new file mode 100644
index 0000000..4abc044
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-build-on-32bit.patch
@@ -0,0 +1,38 @@
+From b172ebe7e709b10338c1b260310dacc15c557cff Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Fri, 22 Sep 2023 15:37:29 +0200
+Subject: [PATCH] Fix build on 32bit
+
+* fixes:
+  src/mongo/util/net/http_client_curl.cpp: In function 'size_t mongo::{anonymous}::ReadMemoryCallback(char*, size_t, size_t, void*)':
+  src/mongo/util/net/http_client_curl.cpp:172:21: error: no matching function for call to 'min(size_t, long unsigned int)'
+    172 |             std::min(size * nitems, static_cast<unsigned long>(bufReader->remaining()));
+        |             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* reported in:
+  https://jira.mongodb.org/browse/SERVER-73007
+  but will probably get closed like:
+  mongodb/0001-Fix-type-mismatch-on-32bit-arches.patch
+  submitted in:
+  https://jira.mongodb.org/browse/SERVER-74633
+  as they don't support 32bit builds
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+Upstream-Status: Pending
+---
+ src/mongo/util/net/http_client_curl.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mongo/util/net/http_client_curl.cpp b/src/mongo/util/net/http_client_curl.cpp
+index 57290d0f8ed..f251fe2a550 100644
+--- a/src/mongo/util/net/http_client_curl.cpp
++++ b/src/mongo/util/net/http_client_curl.cpp
+@@ -169,7 +169,7 @@ size_t ReadMemoryCallback(char* buffer, size_t size, size_t nitems, void* instre
+ 
+     if (bufReader->remaining() > 0) {
+         size_t readSize =
+-            std::min(size * nitems, static_cast<unsigned long>(bufReader->remaining()));
++            std::min(size * nitems, static_cast<size_t>(bufReader->remaining()));
+         auto buf = bufReader->readBytes(readSize);
+         memcpy(buffer, buf.rawData(), readSize);
+         ret = readSize;
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
index e636adc..500e76b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
@@ -13,6 +13,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
index b8a3252..4d84d3d 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
@@ -6,6 +6,8 @@
 
 Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  SConstruct | 8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
index 8d82be1..cfbcbd9 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
@@ -5,6 +5,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/mongo/util/processinfo_linux.cpp | 8 ++++----
  1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
index 958e09c..310301d 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
@@ -9,6 +9,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/mongo/util/procparser.cpp | 10 +++++-----
  1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
index e726933..ad944e4 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
@@ -5,6 +5,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/third_party/asio-master/asio/include/asio/detail/string_view.hpp | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-free_mon-Include-missing-cstdint.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-free_mon-Include-missing-cstdint.patch
index 1373d1a..8cee148 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-free_mon-Include-missing-cstdint.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-free_mon-Include-missing-cstdint.patch
@@ -10,6 +10,8 @@
 [1] https://gcc.gnu.org/gcc-13/porting_to.html#header-dep-changes
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/mongo/db/free_mon/free_mon_options.h | 1 +
  1 file changed, 1 insertion(+)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
index 57f4168..d1e662f 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
@@ -7,6 +7,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/mongo/util/stacktrace_posix.cpp | 9 +++++++++
  1 file changed, 9 insertions(+)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
index 910ef0b..d2ba6eb 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Index: git/SConstruct
 ===================================================================
 --- git.orig/SConstruct
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
index 2cea9bc..45051e1 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
@@ -4,6 +4,8 @@
 Subject: [PATCH 09/10] wiredtiger: Disable strtouq on musl
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Pending
 ---
  src/third_party/wiredtiger/build_linux/wiredtiger_config.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
index e4ae307..9259f96 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
@@ -1,4 +1,3 @@
-Upstream-Status: submitted https://github.com/mongodb/mongo/pull/1296
 From 362be06fc16a5ad0f9e9aa90cc763c5242e8e35c Mon Sep 17 00:00:00 2001
 From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
 Date: Sat, 9 Feb 2019 12:41:45 +0100
@@ -14,6 +13,8 @@
 src/mongo/util/net/ssl_manager.cpp:575:79: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
   if (mongoUnsignedAddOverflow64(tagAndLengthByteCount, derLength, outLength) ||
 
+Upstream-Status: Submitted [https://github.com/mongodb/mongo/pull/1296]
+
 Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
 ---
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/PTHREAD_STACK_MIN.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/PTHREAD_STACK_MIN.patch
deleted file mode 100644
index f08177d..0000000
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/PTHREAD_STACK_MIN.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-PTHREAD_STACK_MIN is no longer a compile time define in glibc 2.34+ and since
-we only care for glibc and musl where PTHREAD_STACK_MIN is always defined there
-is no need to check for constant called PTHREAD_STACK_MIN since its already defined
-this fix may not work for wider audience but for OE needs its sufficient
-
-Upstream-Status: Inappropriate [OE-only fix]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/src/third_party/boost-1.70.0/boost/thread/pthread/thread_data.hpp
-+++ b/src/third_party/boost-1.70.0/boost/thread/pthread/thread_data.hpp
-@@ -57,9 +57,7 @@ namespace boost
- #else
-           std::size_t page_size = ::sysconf( _SC_PAGESIZE);
- #endif
--#if PTHREAD_STACK_MIN > 0
-           if (size<PTHREAD_STACK_MIN) size=PTHREAD_STACK_MIN;
--#endif
-           size = ((size+page_size-1)/page_size)*page_size;
-           int res = pthread_attr_setstacksize(&val_, size);
-           BOOST_VERIFY(!res && "pthread_attr_setstacksize failed");
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
index 1a7bf0f..24b0ad5 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
@@ -5,6 +5,8 @@
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+
+Upstream-Status: Pending
 ---
  SConstruct                                      | 1 +
  src/third_party/IntelRDFPMathLib20U1/SConscript | 2 +-
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
index 21c3b10..037d58c 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
@@ -11,9 +11,9 @@
 
 inherit scons dos2unix siteinfo python3native systemd useradd
 
-PV = "4.4.19"
-#v4.4.18
-SRCREV = "9a996e0ad993148b9650dc402e6d3b1804ad3b8a"
+PV = "4.4.24"
+#v4.4.24
+SRCREV = "0b86b9b7b42ad9970c5f818c527dd86c0634243a"
 SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.4;protocol=https \
            file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
            file://0001-Use-long-long-instead-of-int64_t.patch \
@@ -29,13 +29,13 @@
            file://0001-include-needed-c-header.patch \
            file://disable_runtime_check.patch \
            file://ppc64_ARCH_BITS.patch \
-           file://PTHREAD_STACK_MIN.patch \
            file://0001-add-explict-static_cast-size_t-to-maxMemoryUsageByte.patch \
            file://0001-server-Adjust-the-cache-alignment-assumptions.patch \
            file://0001-The-std-lib-unary-binary_function-base-classes-are-d.patch \
            file://0001-free_mon-Include-missing-cstdint.patch \
            file://0001-apply-msvc-workaround-for-clang-16.patch \
            file://0001-Fix-type-mismatch-on-32bit-arches.patch \
+           file://0001-Fix-build-on-32bit.patch \
            "
 SRC_URI:append:libc-musl ="\
            file://0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch \
@@ -143,3 +143,5 @@
 SYSTEMD_SERVICE:${PN} = "mongod.service"
 
 FILES:${PN} += "${nonarch_libdir}/tmpfiles.d"
+
+RDEPENDS:${PN} += "tzdata-core"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0001-Fixes-for-yocto-build.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0001-Fixes-for-yocto-build.patch
index dcf27d8..1d18d47 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0001-Fixes-for-yocto-build.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0001-Fixes-for-yocto-build.patch
@@ -8,6 +8,8 @@
 Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
 
 ---
+Upstream-Status: Pending
+
  system/core/adb/daemon/file_sync_service.cpp | 4 ++--
  system/core/adb/daemon/framebuffer_service.h | 2 --
  system/core/adb/daemon/main.cpp              | 5 +++--
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0002-android-tools-modifications-to-make-it-build-in-yoct.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0002-android-tools-modifications-to-make-it-build-in-yoct.patch
index 2b95ad2..e749366 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0002-android-tools-modifications-to-make-it-build-in-yoct.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0002-android-tools-modifications-to-make-it-build-in-yoct.patch
@@ -13,6 +13,8 @@
 Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
 
 ---
+Upstream-Status: Pending
+
  debian/external/boringssl/libcrypto.mk         |  1 +
  debian/system/core/append2simg.mk              |  2 +-
  debian/system/core/fastboot.mk                 |  2 +-
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0003-Update-usage-of-usbdevfs_urb-to-match-new-kernel-UAP.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0003-Update-usage-of-usbdevfs_urb-to-match-new-kernel-UAP.patch
index 7ea040c..ea934f4 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0003-Update-usage-of-usbdevfs_urb-to-match-new-kernel-UAP.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0003-Update-usage-of-usbdevfs_urb-to-match-new-kernel-UAP.patch
@@ -37,6 +37,8 @@
 Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
 
 ---
+Upstream-Status: Pending
+
  system/core/adb/client/usb_linux.cpp | 24 ++++++++++++++----------
  1 file changed, 14 insertions(+), 10 deletions(-)
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0004-adb-Fix-build-on-big-endian-systems.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0004-adb-Fix-build-on-big-endian-systems.patch
index 83fe447..c824239 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0004-adb-Fix-build-on-big-endian-systems.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0004-adb-Fix-build-on-big-endian-systems.patch
@@ -21,6 +21,8 @@
 Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
 
 ---
+Upstream-Status: Pending
+
  system/core/adb/daemon/usb_ffs.cpp | 11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0005-adb-Allow-adbd-to-be-run-as-root.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0005-adb-Allow-adbd-to-be-run-as-root.patch
index 3fbdcd4..dfbdc2a 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0005-adb-Allow-adbd-to-be-run-as-root.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/0005-adb-Allow-adbd-to-be-run-as-root.patch
@@ -6,6 +6,8 @@
 Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
 
 ---
+Upstream-Status: Pending
+
  system/core/adb/daemon/main.cpp | 1 +
  1 file changed, 1 insertion(+)
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Add-riscv64-support.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Add-riscv64-support.patch
index 4669f89..9fd0fa7 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Add-riscv64-support.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Add-riscv64-support.patch
@@ -24,6 +24,8 @@
 Signed-off-by: Mao Han <han_mao@linux.alibaba.com>
 Change-Id: Ib21ddf23cc83f332af202df7bffcaceec16063e0
 ---
+Upstream-Status: Pending
+
  system/core/libunwindstack/Android.bp              |   1 +
  system/core/libunwindstack/Elf.cpp                 |   2 +
  system/core/libunwindstack/Regs.cpp                |  10 ++
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Added-missing-headers.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Added-missing-headers.patch
index c07e936..d827d7d 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Added-missing-headers.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Added-missing-headers.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Added missing headers causing compile errors
 Author: Umang Parmar <umangjparmar@gmail.com>
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Nonnull.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Nonnull.patch
index 8d1408a..54bd52c 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Nonnull.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Nonnull.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Bring Clang's _Nonnull keyword to GCC
 Author: Kai-Chung Yan
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Vector-cast.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Vector-cast.patch
index b32d5f6..b2881e0 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Vector-cast.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/Vector-cast.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Fix the weird error by GCC7 that fails to match the correct parent method.
 Author: Kai-Chung Yan
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/add-missing-headers.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/add-missing-headers.patch
index 49d3ece..681d2c6 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/add-missing-headers.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/add-missing-headers.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Forwarded: not-needed
 --- a/system/core/fs_mgr/liblp/reader.cpp
 +++ b/system/core/fs_mgr/liblp/reader.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/20150704-CVE-2015-3239_dwarf_i.h.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/20150704-CVE-2015-3239_dwarf_i.h.patch
index b926edd..e8e2161 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/20150704-CVE-2015-3239_dwarf_i.h.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/20150704-CVE-2015-3239_dwarf_i.h.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Off-by-one error in the dwarf_to_unw_regnum function in include/dwarf_i.h in
 libunwind 1.1 allows local users to have unspecified impact via invalid dwarf opcodes.
 --- a/external/libunwind/include/dwarf_i.h
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/legacy_built-in_sync_functions.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/legacy_built-in_sync_functions.patch
index ce1d4e5..a04a887 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/legacy_built-in_sync_functions.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/legacy_built-in_sync_functions.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Replace the legacy __sync built-in functions with __atomic ones
  libunwind uses the built-in __sync_* functions which are deprecated by GCC and
  should be replaced by __atomic_* ones. See the official manuals [1].
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/user_pt_regs.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/user_pt_regs.patch
index 600471f..35df944 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/user_pt_regs.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/external/libunwind/user_pt_regs.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Author: Kai-Chung Yan <seamlikok@gmail.com>
 Last-Update: 2016-08-24
 Description: Manual definition of struct user_pt_regs
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-attribute-issue-with-gcc.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-attribute-issue-with-gcc.patch
index e0b4275..441031f 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-attribute-issue-with-gcc.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-attribute-issue-with-gcc.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: remove clang-ism
 Forwarded: not-needed
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-build-on-non-x86.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-build-on-non-x86.patch
index 98a5078..b1caa60 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-build-on-non-x86.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-build-on-non-x86.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: non-x86 arches do not have PAGE_SIZE
 Forwarded: not-needed
 --- a/system/core/base/cmsg.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-gettid-exception-declaration.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-gettid-exception-declaration.patch
index 7fd228b..5f24d0b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-gettid-exception-declaration.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-gettid-exception-declaration.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: get libcutils building
 Forwarded: not-needed
 --- a/system/core/libcutils/include/cutils/threads.h
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-standard-namespace-errors.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-standard-namespace-errors.patch
index e41a357..4380308 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-standard-namespace-errors.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/fix-standard-namespace-errors.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Add missing 'std::' scope identifiers.
 Forwarded: not-needed
 --- a/system/core/libunwindstack/include/unwindstack/DwarfMemory.h
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/hard-code-build-number.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/hard-code-build-number.patch
index 2a332eb..4d7323b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/hard-code-build-number.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/hard-code-build-number.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: just hard code rather than deal with circular deps
 Forwarded: not-needed
 --- a/system/core/adb/adb.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/libusb-header-path.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/libusb-header-path.patch
index 1663aae..122bd70 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/libusb-header-path.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/libusb-header-path.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: libusb.h comes from different location
 Author: Umang Parmar <umangjparmar@gmail.com>
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/move-log-file-to-proper-dir.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/move-log-file-to-proper-dir.patch
index 006564b..e8494ab 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/move-log-file-to-proper-dir.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/move-log-file-to-proper-dir.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Update log file directory.
 Author: Umang Parmar <umangjparmar@gmail.com>
 Last Updated: 2018-05-17
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/simg_dump-python3.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/simg_dump-python3.patch
index e6933ef..6664dc2 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/simg_dump-python3.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/simg_dump-python3.patch
@@ -5,6 +5,8 @@
 Origin: https://bugs.debian.org/945646
 
 ---
+Upstream-Status: Pending
+
 Index: android-platform-tools/system/core/libsparse/simg_dump.py
 ===================================================================
 --- android-platform-tools.orig/system/core/libsparse/simg_dump.py
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stdatomic.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stdatomic.patch
index ea3711d..e11f3cc 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stdatomic.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stdatomic.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Fix incompatibility between <stdatomic.h> and <atomic>
  This 2 headers combined will cause errors for both GCC and Clang. This patch
  makes sure only one of them is present at any time.
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stub-out-fastdeploy.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stub-out-fastdeploy.patch
index d2426a7..d86ef23 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stub-out-fastdeploy.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/stub-out-fastdeploy.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Defer packaging fastdeploy with adb for 29.x.x tags.
 Forwarded: not-needed
 --- a/system/core/adb/client/commandline.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Add-riscv64-support.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Add-riscv64-support.patch
index 4669f89..9fd0fa7 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Add-riscv64-support.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Add-riscv64-support.patch
@@ -24,6 +24,8 @@
 Signed-off-by: Mao Han <han_mao@linux.alibaba.com>
 Change-Id: Ib21ddf23cc83f332af202df7bffcaceec16063e0
 ---
+Upstream-Status: Pending
+
  system/core/libunwindstack/Android.bp              |   1 +
  system/core/libunwindstack/Elf.cpp                 |   2 +
  system/core/libunwindstack/Regs.cpp                |  10 ++
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Added-missing-headers.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Added-missing-headers.patch
index c07e936..d827d7d 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Added-missing-headers.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Added-missing-headers.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Added missing headers causing compile errors
 Author: Umang Parmar <umangjparmar@gmail.com>
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Nonnull.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Nonnull.patch
index 8d1408a..54bd52c 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Nonnull.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Nonnull.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Bring Clang's _Nonnull keyword to GCC
 Author: Kai-Chung Yan
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Vector-cast.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Vector-cast.patch
index b32d5f6..b2881e0 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Vector-cast.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/Vector-cast.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Fix the weird error by GCC7 that fails to match the correct parent method.
 Author: Kai-Chung Yan
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/add-missing-headers.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/add-missing-headers.patch
index 49d3ece..681d2c6 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/add-missing-headers.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/add-missing-headers.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Forwarded: not-needed
 --- a/system/core/fs_mgr/liblp/reader.cpp
 +++ b/system/core/fs_mgr/liblp/reader.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-attribute-issue-with-gcc.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-attribute-issue-with-gcc.patch
index e0b4275..441031f 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-attribute-issue-with-gcc.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-attribute-issue-with-gcc.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: remove clang-ism
 Forwarded: not-needed
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-build-on-non-x86.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-build-on-non-x86.patch
index 98a5078..b1caa60 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-build-on-non-x86.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-build-on-non-x86.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: non-x86 arches do not have PAGE_SIZE
 Forwarded: not-needed
 --- a/system/core/base/cmsg.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-gettid-exception-declaration.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-gettid-exception-declaration.patch
index 7fd228b..5f24d0b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-gettid-exception-declaration.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-gettid-exception-declaration.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: get libcutils building
 Forwarded: not-needed
 --- a/system/core/libcutils/include/cutils/threads.h
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-standard-namespace-errors.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-standard-namespace-errors.patch
index e41a357..4380308 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-standard-namespace-errors.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/fix-standard-namespace-errors.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Add missing 'std::' scope identifiers.
 Forwarded: not-needed
 --- a/system/core/libunwindstack/include/unwindstack/DwarfMemory.h
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/hard-code-build-number.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/hard-code-build-number.patch
index 2a332eb..4d7323b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/hard-code-build-number.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/hard-code-build-number.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: just hard code rather than deal with circular deps
 Forwarded: not-needed
 --- a/system/core/adb/adb.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/libusb-header-path.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/libusb-header-path.patch
index 1663aae..122bd70 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/libusb-header-path.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/libusb-header-path.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: libusb.h comes from different location
 Author: Umang Parmar <umangjparmar@gmail.com>
 Forwarded: not-needed
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/move-log-file-to-proper-dir.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/move-log-file-to-proper-dir.patch
index 006564b..e8494ab 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/move-log-file-to-proper-dir.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/move-log-file-to-proper-dir.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Update log file directory.
 Author: Umang Parmar <umangjparmar@gmail.com>
 Last Updated: 2018-05-17
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/simg_dump-python3.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/simg_dump-python3.patch
index e6933ef..6664dc2 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/simg_dump-python3.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/simg_dump-python3.patch
@@ -5,6 +5,8 @@
 Origin: https://bugs.debian.org/945646
 
 ---
+Upstream-Status: Pending
+
 Index: android-platform-tools/system/core/libsparse/simg_dump.py
 ===================================================================
 --- android-platform-tools.orig/system/core/libsparse/simg_dump.py
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stdatomic.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stdatomic.patch
index ea3711d..e11f3cc 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stdatomic.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stdatomic.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Fix incompatibility between <stdatomic.h> and <atomic>
  This 2 headers combined will cause errors for both GCC and Clang. This patch
  makes sure only one of them is present at any time.
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stub-out-fastdeploy.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stub-out-fastdeploy.patch
index d2426a7..d86ef23 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stub-out-fastdeploy.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/stub-out-fastdeploy.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Defer packaging fastdeploy with adb for 29.x.x tags.
 Forwarded: not-needed
 --- a/system/core/adb/client/commandline.cpp
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/throw-exception-on-unknown-os.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/throw-exception-on-unknown-os.patch
index 6b07f17..70e7321 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/throw-exception-on-unknown-os.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/system/core/throw-exception-on-unknown-os.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Turn #error into exceptions
  So the library can be built on non-Linux platforms too, although can't
  guarauntee its functionality regarding that piece of code.
diff --git a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/throw-exception-on-unknown-os.patch b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/throw-exception-on-unknown-os.patch
index 6b07f17..70e7321 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/throw-exception-on-unknown-os.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/selinux/recipes-devtool/android-tools/android-tools/debian/throw-exception-on-unknown-os.patch
@@ -1,3 +1,5 @@
+Upstream-Status: Pending
+
 Description: Turn #error into exceptions
  So the library can be built on non-Linux platforms too, although can't
  guarauntee its functionality regarding that piece of code.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.14.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.14.bb
deleted file mode 100644
index 13f620f..0000000
--- a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.14.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Network benchmark tool"
-DESCRIPTION = "\
-iperf is a tool for active measurements of the maximum achievable bandwidth \
-on IP networks. It supports tuning of various parameters related to timing, \
-protocols, and buffers. For each test it reports the bandwidth, loss, and \
-other parameters."
-
-HOMEPAGE = "http://software.es.net/iperf/"
-SECTION = "console/network"
-BUGTRACKER = "https://github.com/esnet/iperf/issues"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=dc6301c8256ceb8f71c9e3c2ae9096b9"
-
-SRC_URI = "git://github.com/esnet/iperf.git;branch=master;protocol=https \
-           file://0002-Remove-pg-from-profile_CFLAGS.patch \
-           file://0001-configure.ac-check-for-CPP-prog.patch \
-           "
-
-SRCREV = "a0be85934144bc04712a6695b14ea6e45c379e1d"
-
-S = "${WORKDIR}/git"
-
-inherit autotools
-
-PACKAGECONFIG ?= "openssl"
-
-PACKAGECONFIG[lksctp] = "ac_cv_header_netinet_sctp_h=yes,ac_cv_header_netinet_sctp_h=no,lksctp-tools"
-PACKAGECONFIG[openssl] = "--with-openssl=${RECIPE_SYSROOT}${prefix},--without-openssl,openssl"
-
-CFLAGS += "-D_GNU_SOURCE"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb
new file mode 100644
index 0000000..156bb5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Network benchmark tool"
+DESCRIPTION = "\
+iperf is a tool for active measurements of the maximum achievable bandwidth \
+on IP networks. It supports tuning of various parameters related to timing, \
+protocols, and buffers. For each test it reports the bandwidth, loss, and \
+other parameters."
+
+HOMEPAGE = "http://software.es.net/iperf/"
+SECTION = "console/network"
+BUGTRACKER = "https://github.com/esnet/iperf/issues"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc6301c8256ceb8f71c9e3c2ae9096b9"
+
+SRC_URI = "git://github.com/esnet/iperf.git;branch=master;protocol=https \
+           file://0002-Remove-pg-from-profile_CFLAGS.patch \
+           file://0001-configure.ac-check-for-CPP-prog.patch \
+           "
+
+SRCREV = "917d2f02188f6f4cdc443df7923a4bde72017d92"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGECONFIG ?= "openssl"
+
+PACKAGECONFIG[lksctp] = "ac_cv_header_netinet_sctp_h=yes,ac_cv_header_netinet_sctp_h=no,lksctp-tools"
+PACKAGECONFIG[openssl] = "--with-openssl=${RECIPE_SYSROOT}${prefix},--without-openssl,openssl"
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
index b6ad633..583cc63 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
@@ -12,6 +12,8 @@
 
 S = "${WORKDIR}/git"
 
+CVE_CHECK_SKIP_RECIPE = "${PN}"
+
 inherit cmake pkgconfig meson features_check
 
 FILES:${PN} += "${datadir}/dbus-1/* \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.5.bb b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.5.bb
deleted file mode 100644
index 00053c8..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.5.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "A library to abstract stream I/O like serial port, TCP, telnet, etc"
-HOMEPAGE = "https://github.com/cminyard/gensio"
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
-                    file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-                    "
-
-SRCREV = "ecfc538d516cee1d2c7904a645cb74bba48b6514"
-
-SRC_URI = "git://github.com/cminyard/gensio;protocol=https;branch=master"
-
-S = "${WORKDIR}/git"
-
-inherit autotools
-
-PACKAGECONFIG ??= "openssl tcp-wrappers"
-
-PACKAGECONFIG[openssl] = "--with-openssl=${STAGING_DIR_HOST}${prefix},--without-openssl, openssl"
-PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,--without-tcp-wrappers, tcp-wrappers"
-PACKAGECONFIG[swig] = "--with-swig,--without-swig, swig"
-
-EXTRA_OECONF = "--without-python"
-
-RDEPENDS:${PN} += "bash"
-
-FILES:${PN}-staticdev += "${libexecdir}/gensio/${PV}/libgensio_*.a"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb
new file mode 100644
index 0000000..21b9f3f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A library to abstract stream I/O like serial port, TCP, telnet, etc"
+HOMEPAGE = "https://github.com/cminyard/gensio"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+                    file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    "
+
+SRCREV = "7a26bcec16453d01790b41d9d5495f40cc668bb6"
+
+SRC_URI = "git://github.com/cminyard/gensio;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGECONFIG ??= "openssl tcp-wrappers"
+
+PACKAGECONFIG[openssl] = "--with-openssl=${STAGING_DIR_HOST}${prefix},--without-openssl, openssl"
+PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,--without-tcp-wrappers, tcp-wrappers"
+PACKAGECONFIG[swig] = "--with-swig,--without-swig, swig"
+
+EXTRA_OECONF = "--without-python"
+
+RDEPENDS:${PN} += "bash"
+
+FILES:${PN}-staticdev += "${libexecdir}/gensio/${PV}/libgensio_*.a"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.2.bb
deleted file mode 100644
index 455561f..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.2.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "ncurses IRC client"
-DESCRIPTION = "Irssi is an ncurses IRC client"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=55fdc1113306167d6ea2561404ce02f8"
-
-DEPENDS = "glib-2.0 ncurses openssl"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "79a4765d2dfe153c440a1775b074d5d0682b96814c7cf92325b5e15ce50e26a8"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF += "--with-textui \
-                 --with-proxy \
-                 --with-bot \
-                 --with-perl=no \
-                 --enable-true-color"
-
-FILES:${PN}-staticdev += "${libdir}/${BPN}/modules/*.a"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb
new file mode 100644
index 0000000..52de589
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "ncurses IRC client"
+DESCRIPTION = "Irssi is an ncurses IRC client"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55fdc1113306167d6ea2561404ce02f8"
+
+DEPENDS = "glib-2.0 ncurses openssl"
+
+SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "fefe9ec8c7b1475449945c934a2360ab12693454892be47a6d288c63eb107ead"
+
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--with-textui \
+                 --with-proxy \
+                 --with-bot \
+                 --with-perl=no \
+                 --enable-true-color"
+
+FILES:${PN}-staticdev += "${libdir}/${BPN}/modules/*.a"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libnfs/libnfs_5.0.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/libnfs/libnfs_5.0.2.bb
index e0df18a..afec275 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libnfs/libnfs_5.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libnfs/libnfs_5.0.2.bb
@@ -3,10 +3,15 @@
 LICENSE = "LGPL-2.1-only & BSD-2-Clause & GPL-3.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=825301ba17efc9d188ee0abd4b924ada"
 
-SRC_URI = "git://github.com/sahlberg/libnfs.git;protocol=https;branch=master \
-    file://0001-CMakeLists.txt-respect-CMAKE_INSTALL_LIBDIR-for-mult.patch \
+SRC_URI = " \
+	git://github.com/sahlberg/libnfs.git;protocol=https;branch=master \
+	file://0001-CMakeLists.txt-respect-CMAKE_INSTALL_LIBDIR-for-mult.patch \
 "
 SRCREV = "40348f45d6beb8a8f50b6b63414a98fc1a061b7d"
 S = "${WORKDIR}/git"
 
 inherit cmake
+
+do_install:append() {
+	rm -f ${D}${libdir}/cmake/libnfs/libnfs-config.cmake
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh/0001-configure.ac-add-support-of-protobuf-4.22.x.patch b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh/0001-configure.ac-add-support-of-protobuf-4.22.x.patch
new file mode 100644
index 0000000..0881243
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh/0001-configure.ac-add-support-of-protobuf-4.22.x.patch
@@ -0,0 +1,63 @@
+From d9a1a6aac5a3b270449d09ec0d2a556807ab9287 Mon Sep 17 00:00:00 2001
+From: Xiangyu Chen <xiangyu.chen@windriver.com>
+Date: Wed, 29 Mar 2023 13:53:44 +0800
+Subject: [PATCH] configure.ac: add support of protobuf 4.22.x
+
+the protobuf 4.22x is using c++14 as default, this caused the mosh cannot compile anymore and report following error:
+
+....
+/usr/include/google/protobuf/port_def.inc:200:15: error: static assertion failed: Protobuf only supports C++14 and newer.
+| 200 | static_assert(PROTOBUF_CPLUSPLUS_MIN(201402L), "Protobuf only supports C++14 and newer.");
+| | ^~~~~~~~~~~~~~~~~~~~~~
+....
+
+Upstream-Status: Pending [https://github.com/mobile-shell/mosh/pull/1266]
+
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ configure.ac             | 8 ++++++++
+ src/frontend/Makefile.am | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index ee70c7b..5457009 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -26,6 +26,10 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
+ AS_IF([pkg-config --atleast-version 3.6.0 protobuf],
+   [AX_CXX_COMPILE_STDCXX([11])])
+ 
++# If current protobuf 4.22+ update the requires to C++14.
++AS_IF([pkg-config --atleast-version 4.22.0 protobuf],
++  [AX_CXX_COMPILE_STDCXX([14])])
++
+ WARNING_CXXFLAGS=""
+ PICKY_CXXFLAGS=""
+ DISTCHECK_CXXFLAGS=""
+@@ -311,6 +315,10 @@ AC_CHECK_FUNCS(m4_normalize([
+   pledge
+   ]))
+ 
++AS_IF([pkg-config --atleast-version 4.22.0 protobuf],
++  [PKG_CHECK_MODULES([ABSL_LOG_INTERNAL_CHECK_OP], [absl_log_internal_check_op],[],
++     [AC_MSG_ERROR([Missing abseil-cpp library.])])])
++
+ # Start by trying to find the needed tinfo parts by pkg-config
+ PKG_CHECK_MODULES([TINFO], [tinfo],
+   [AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if <curses.h> is present])],
+diff --git a/src/frontend/Makefile.am b/src/frontend/Makefile.am
+index 1aa83fd..399ecd6 100644
+--- a/src/frontend/Makefile.am
++++ b/src/frontend/Makefile.am
+@@ -1,7 +1,7 @@
+ AM_CPPFLAGS = -I$(srcdir)/../statesync -I$(srcdir)/../terminal -I$(srcdir)/../network -I$(srcdir)/../crypto -I../protobufs -I$(srcdir)/../util $(TINFO_CFLAGS) $(protobuf_CFLAGS) $(CRYPTO_CFLAGS)
+ AM_CXXFLAGS = $(WARNING_CXXFLAGS) $(PICKY_CXXFLAGS) $(HARDEN_CFLAGS) $(MISC_CXXFLAGS) $(CODE_COVERAGE_CXXFLAGS)
+ AM_LDFLAGS  = $(HARDEN_LDFLAGS) $(CODE_COVERAGE_LIBS)
+-LDADD = ../crypto/libmoshcrypto.a ../network/libmoshnetwork.a ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../util/libmoshutil.a ../protobufs/libmoshprotos.a -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS)
++LDADD = ../crypto/libmoshcrypto.a ../network/libmoshnetwork.a ../statesync/libmoshstatesync.a ../terminal/libmoshterminal.a ../util/libmoshutil.a ../protobufs/libmoshprotos.a -lm $(TINFO_LIBS) $(protobuf_LIBS) $(CRYPTO_LIBS) $(ABSL_LOG_INTERNAL_CHECK_OP_LIBS)
+ 
+ mosh_server_LDADD = $(LDADD)
+ 
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.4.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.4.0.bb
index 2869e06..0ee050d 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/mosh/mosh_1.4.0.bb
@@ -12,9 +12,12 @@
 LICENSE = "GPL-3.0-or-later"
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 
-DEPENDS = "protobuf-native protobuf ncurses zlib libio-pty-perl openssl libutempter"
+DEPENDS = "protobuf-native protobuf ncurses zlib libio-pty-perl openssl libutempter abseil-cpp"
 
-SRC_URI = "https://mosh.org/${BP}.tar.gz"
+SRC_URI = "https://mosh.org/${BP}.tar.gz \
+           file://0001-configure.ac-add-support-of-protobuf-4.22.x.patch \
+           "
+
 SRC_URI[sha256sum] = "872e4b134e5df29c8933dff12350785054d2fd2839b5ae6b5587b14db1465ddd"
 
 inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-core/images/meta-oe-ptest-image.bb b/meta-openembedded/meta-oe/recipes-core/images/meta-oe-ptest-image.bb
index 951d91f..613da02 100644
--- a/meta-openembedded/meta-oe/recipes-core/images/meta-oe-ptest-image.bb
+++ b/meta-openembedded/meta-oe/recipes-core/images/meta-oe-ptest-image.bb
@@ -23,6 +23,7 @@
 IMAGE_ROOTFS_EXTRA_SPACE = "324288"
 # If a particular ptest needs more space, it can be customized:
 #IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-<pn> = "1024288"
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-poco = "1024288"
 
 # ptests need more memory than standard to avoid the OOM killer
 QB_MEM = "-m 1024"
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
index c580479..639388d 100644
--- a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
@@ -468,7 +468,6 @@
     pyxdg \
     vte9 \
     gnome-theme-adwaita \
-    libxmlb \
 "
 
 RDEPENDS:packagegroup-meta-oe-graphics ="\
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
index 39269d7..90a5017 100644
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
@@ -3,9 +3,7 @@
 # from Cargo.lock
 SRC_URI += " \
     crate://crates.io/adler/1.0.2 \
-    crate://crates.io/ahash/0.7.6 \
-    crate://crates.io/aho-corasick/0.7.19 \
-    crate://crates.io/aho-corasick/1.0.1 \
+    crate://crates.io/aho-corasick/1.0.4 \
     crate://crates.io/android-tzdata/0.1.1 \
     crate://crates.io/android_system_properties/0.1.5 \
     crate://crates.io/anstream/0.3.2 \
@@ -20,6 +18,7 @@
     crate://crates.io/binary-heap-plus/0.5.0 \
     crate://crates.io/bindgen/0.63.0 \
     crate://crates.io/bitflags/1.3.2 \
+    crate://crates.io/bitflags/2.3.3 \
     crate://crates.io/blake2b_simd/1.0.1 \
     crate://crates.io/blake3/1.4.0 \
     crate://crates.io/block-buffer/0.10.3 \
@@ -30,10 +29,10 @@
     crate://crates.io/cc/1.0.79 \
     crate://crates.io/cexpr/0.6.0 \
     crate://crates.io/cfg-if/1.0.0 \
-    crate://crates.io/chrono/0.4.26 \
+    crate://crates.io/chrono/0.4.28 \
     crate://crates.io/clang-sys/1.4.0 \
-    crate://crates.io/clap/4.3.0 \
-    crate://crates.io/clap_builder/4.3.0 \
+    crate://crates.io/clap/4.3.21 \
+    crate://crates.io/clap_builder/4.3.21 \
     crate://crates.io/clap_complete/4.3.0 \
     crate://crates.io/clap_lex/0.5.0 \
     crate://crates.io/clap_mangen/0.2.9 \
@@ -46,18 +45,18 @@
     crate://crates.io/conv/0.3.3 \
     crate://crates.io/core-foundation-sys/0.8.3 \
     crate://crates.io/coz/0.1.3 \
-    crate://crates.io/cpp/0.5.7 \
-    crate://crates.io/cpp_build/0.5.7 \
-    crate://crates.io/cpp_common/0.5.7 \
-    crate://crates.io/cpp_macros/0.5.7 \
+    crate://crates.io/cpp/0.5.9 \
+    crate://crates.io/cpp_build/0.5.9 \
+    crate://crates.io/cpp_common/0.5.9 \
+    crate://crates.io/cpp_macros/0.5.9 \
     crate://crates.io/cpufeatures/0.2.5 \
     crate://crates.io/crc32fast/1.3.2 \
     crate://crates.io/crossbeam-channel/0.5.8 \
     crate://crates.io/crossbeam-deque/0.8.2 \
     crate://crates.io/crossbeam-epoch/0.9.14 \
     crate://crates.io/crossbeam-utils/0.8.15 \
-    crate://crates.io/crossterm/0.26.1 \
-    crate://crates.io/crossterm_winapi/0.9.0 \
+    crate://crates.io/crossterm/0.27.0 \
+    crate://crates.io/crossterm_winapi/0.9.1 \
     crate://crates.io/crunchy/0.2.2 \
     crate://crates.io/crypto-common/0.1.6 \
     crate://crates.io/ctrlc/3.4.0 \
@@ -76,32 +75,31 @@
     crate://crates.io/errno/0.3.1 \
     crate://crates.io/errno-dragonfly/0.1.2 \
     crate://crates.io/exacl/0.10.0 \
-    crate://crates.io/fastrand/1.8.0 \
+    crate://crates.io/fastrand/2.0.0 \
     crate://crates.io/file_diff/1.0.0 \
-    crate://crates.io/filetime/0.2.20 \
+    crate://crates.io/filetime/0.2.22 \
     crate://crates.io/flate2/1.0.24 \
     crate://crates.io/fnv/1.0.7 \
     crate://crates.io/fs_extra/1.3.0 \
     crate://crates.io/fsevent-sys/4.1.0 \
     crate://crates.io/fts-sys/0.2.4 \
-    crate://crates.io/fundu/1.2.0 \
-    crate://crates.io/fundu-core/0.2.0 \
-    crate://crates.io/futures/0.3.25 \
-    crate://crates.io/futures-channel/0.3.25 \
-    crate://crates.io/futures-core/0.3.25 \
-    crate://crates.io/futures-executor/0.3.25 \
-    crate://crates.io/futures-io/0.3.25 \
-    crate://crates.io/futures-macro/0.3.25 \
-    crate://crates.io/futures-sink/0.3.25 \
-    crate://crates.io/futures-task/0.3.25 \
+    crate://crates.io/fundu/2.0.0 \
+    crate://crates.io/fundu-core/0.3.0 \
+    crate://crates.io/futures/0.3.28 \
+    crate://crates.io/futures-channel/0.3.28 \
+    crate://crates.io/futures-core/0.3.28 \
+    crate://crates.io/futures-executor/0.3.28 \
+    crate://crates.io/futures-io/0.3.28 \
+    crate://crates.io/futures-macro/0.3.28 \
+    crate://crates.io/futures-sink/0.3.28 \
+    crate://crates.io/futures-task/0.3.28 \
     crate://crates.io/futures-timer/3.0.2 \
-    crate://crates.io/futures-util/0.3.25 \
+    crate://crates.io/futures-util/0.3.28 \
     crate://crates.io/gcd/2.3.0 \
     crate://crates.io/generic-array/0.14.6 \
     crate://crates.io/getrandom/0.2.9 \
     crate://crates.io/glob/0.3.1 \
     crate://crates.io/half/2.2.1 \
-    crate://crates.io/hashbrown/0.12.3 \
     crate://crates.io/hashbrown/0.13.2 \
     crate://crates.io/hermit-abi/0.3.2 \
     crate://crates.io/hex/0.4.3 \
@@ -112,12 +110,11 @@
     crate://crates.io/indicatif/0.17.3 \
     crate://crates.io/inotify/0.9.6 \
     crate://crates.io/inotify-sys/0.1.5 \
-    crate://crates.io/instant/0.1.12 \
     crate://crates.io/io-lifetimes/1.0.11 \
-    crate://crates.io/is-terminal/0.4.7 \
+    crate://crates.io/is-terminal/0.4.9 \
     crate://crates.io/itertools/0.11.0 \
     crate://crates.io/itoa/1.0.4 \
-    crate://crates.io/js-sys/0.3.60 \
+    crate://crates.io/js-sys/0.3.64 \
     crate://crates.io/keccak/0.1.4 \
     crate://crates.io/kqueue/1.0.7 \
     crate://crates.io/kqueue-sys/1.0.3 \
@@ -128,12 +125,13 @@
     crate://crates.io/libm/0.2.7 \
     crate://crates.io/linux-raw-sys/0.1.4 \
     crate://crates.io/linux-raw-sys/0.3.8 \
+    crate://crates.io/linux-raw-sys/0.4.5 \
     crate://crates.io/lock_api/0.4.9 \
     crate://crates.io/log/0.4.17 \
-    crate://crates.io/lscolors/0.14.0 \
+    crate://crates.io/lscolors/0.15.0 \
     crate://crates.io/match_cfg/0.1.0 \
     crate://crates.io/md-5/0.10.5 \
-    crate://crates.io/memchr/2.5.0 \
+    crate://crates.io/memchr/2.6.2 \
     crate://crates.io/memmap2/0.7.0 \
     crate://crates.io/memoffset/0.8.0 \
     crate://crates.io/minimal-lexical/0.2.1 \
@@ -142,10 +140,10 @@
     crate://crates.io/nix/0.26.2 \
     crate://crates.io/nom/7.1.3 \
     crate://crates.io/notify/6.0.1 \
-    crate://crates.io/nu-ansi-term/0.47.0 \
-    crate://crates.io/num-bigint/0.4.3 \
+    crate://crates.io/nu-ansi-term/0.49.0 \
+    crate://crates.io/num-bigint/0.4.4 \
     crate://crates.io/num-integer/0.1.45 \
-    crate://crates.io/num-traits/0.2.15 \
+    crate://crates.io/num-traits/0.2.16 \
     crate://crates.io/num_cpus/1.16.0 \
     crate://crates.io/num_threads/0.1.6 \
     crate://crates.io/number_prefix/0.4.0 \
@@ -155,7 +153,7 @@
     crate://crates.io/ordered-multimap/0.6.0 \
     crate://crates.io/os_display/0.1.3 \
     crate://crates.io/parking_lot/0.12.1 \
-    crate://crates.io/parking_lot_core/0.9.7 \
+    crate://crates.io/parking_lot_core/0.9.8 \
     crate://crates.io/parse_datetime/0.4.0 \
     crate://crates.io/peeking_take_while/0.1.2 \
     crate://crates.io/phf/0.11.2 \
@@ -181,22 +179,22 @@
     crate://crates.io/rand_pcg/0.3.1 \
     crate://crates.io/rayon/1.7.0 \
     crate://crates.io/rayon-core/1.11.0 \
-    crate://crates.io/redox_syscall/0.2.16 \
     crate://crates.io/redox_syscall/0.3.5 \
     crate://crates.io/reference-counted-singleton/0.1.2 \
-    crate://crates.io/regex/1.9.1 \
-    crate://crates.io/regex-automata/0.3.1 \
-    crate://crates.io/regex-syntax/0.7.3 \
+    crate://crates.io/regex/1.9.5 \
+    crate://crates.io/regex-automata/0.3.8 \
+    crate://crates.io/regex-syntax/0.7.5 \
     crate://crates.io/relative-path/1.8.0 \
-    crate://crates.io/rlimit/0.10.0 \
+    crate://crates.io/rlimit/0.10.1 \
     crate://crates.io/roff/0.2.1 \
-    crate://crates.io/rstest/0.18.1 \
-    crate://crates.io/rstest_macros/0.18.1 \
+    crate://crates.io/rstest/0.18.2 \
+    crate://crates.io/rstest_macros/0.18.2 \
     crate://crates.io/rust-ini/0.19.0 \
     crate://crates.io/rustc-hash/1.1.0 \
     crate://crates.io/rustc_version/0.4.0 \
-    crate://crates.io/rustix/0.36.14 \
-    crate://crates.io/rustix/0.37.19 \
+    crate://crates.io/rustix/0.36.15 \
+    crate://crates.io/rustix/0.37.23 \
+    crate://crates.io/rustix/0.38.8 \
     crate://crates.io/same-file/1.0.6 \
     crate://crates.io/scopeguard/1.1.0 \
     crate://crates.io/self_cell/1.0.1 \
@@ -208,7 +206,7 @@
     crate://crates.io/sha2/0.10.7 \
     crate://crates.io/sha3/0.10.8 \
     crate://crates.io/shlex/1.1.0 \
-    crate://crates.io/signal-hook/0.3.15 \
+    crate://crates.io/signal-hook/0.3.17 \
     crate://crates.io/signal-hook-mio/0.2.3 \
     crate://crates.io/signal-hook-registry/1.4.0 \
     crate://crates.io/siphasher/0.3.10 \
@@ -222,7 +220,7 @@
     crate://crates.io/subtle/2.4.1 \
     crate://crates.io/syn/1.0.109 \
     crate://crates.io/syn/2.0.23 \
-    crate://crates.io/tempfile/3.6.0 \
+    crate://crates.io/tempfile/3.8.0 \
     crate://crates.io/term_grid/0.1.7 \
     crate://crates.io/terminal_size/0.2.6 \
     crate://crates.io/textwrap/0.16.0 \
@@ -234,7 +232,7 @@
     crate://crates.io/tiny-keccak/2.0.2 \
     crate://crates.io/typenum/1.15.0 \
     crate://crates.io/unicode-ident/1.0.5 \
-    crate://crates.io/unicode-linebreak/0.1.4 \
+    crate://crates.io/unicode-linebreak/0.1.5 \
     crate://crates.io/unicode-segmentation/1.10.1 \
     crate://crates.io/unicode-width/0.1.10 \
     crate://crates.io/unicode-xid/0.2.4 \
@@ -244,11 +242,11 @@
     crate://crates.io/version_check/0.9.4 \
     crate://crates.io/walkdir/2.3.2 \
     crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
-    crate://crates.io/wasm-bindgen/0.2.83 \
-    crate://crates.io/wasm-bindgen-backend/0.2.83 \
-    crate://crates.io/wasm-bindgen-macro/0.2.83 \
-    crate://crates.io/wasm-bindgen-macro-support/0.2.83 \
-    crate://crates.io/wasm-bindgen-shared/0.2.83 \
+    crate://crates.io/wasm-bindgen/0.2.87 \
+    crate://crates.io/wasm-bindgen-backend/0.2.87 \
+    crate://crates.io/wasm-bindgen-macro/0.2.87 \
+    crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
+    crate://crates.io/wasm-bindgen-shared/0.2.87 \
     crate://crates.io/which/4.3.0 \
     crate://crates.io/wild/2.1.0 \
     crate://crates.io/winapi/0.3.9 \
@@ -273,16 +271,14 @@
     crate://crates.io/windows_x86_64_gnullvm/0.48.0 \
     crate://crates.io/windows_x86_64_msvc/0.42.2 \
     crate://crates.io/windows_x86_64_msvc/0.48.0 \
-    crate://crates.io/xattr/1.0.0 \
+    crate://crates.io/xattr/1.0.1 \
     crate://crates.io/yansi/0.5.1 \
     crate://crates.io/z85/3.0.5 \
     crate://crates.io/zip/0.6.6 \
 "
 
 SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-SRC_URI[ahash-0.7.6.sha256sum] = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-SRC_URI[aho-corasick-0.7.19.sha256sum] = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
-SRC_URI[aho-corasick-1.0.1.sha256sum] = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+SRC_URI[aho-corasick-1.0.4.sha256sum] = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
 SRC_URI[android-tzdata-0.1.1.sha256sum] = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
 SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
 SRC_URI[anstream-0.3.2.sha256sum] = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
@@ -297,6 +293,7 @@
 SRC_URI[binary-heap-plus-0.5.0.sha256sum] = "e4551d8382e911ecc0d0f0ffb602777988669be09447d536ff4388d1def11296"
 SRC_URI[bindgen-0.63.0.sha256sum] = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
 SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.3.3.sha256sum] = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
 SRC_URI[blake2b_simd-1.0.1.sha256sum] = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
 SRC_URI[blake3-1.4.0.sha256sum] = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
 SRC_URI[block-buffer-0.10.3.sha256sum] = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
@@ -307,10 +304,10 @@
 SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
 SRC_URI[cexpr-0.6.0.sha256sum] = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
 SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[chrono-0.4.26.sha256sum] = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+SRC_URI[chrono-0.4.28.sha256sum] = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f"
 SRC_URI[clang-sys-1.4.0.sha256sum] = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
-SRC_URI[clap-4.3.0.sha256sum] = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
-SRC_URI[clap_builder-4.3.0.sha256sum] = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+SRC_URI[clap-4.3.21.sha256sum] = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
+SRC_URI[clap_builder-4.3.21.sha256sum] = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
 SRC_URI[clap_complete-4.3.0.sha256sum] = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12"
 SRC_URI[clap_lex-0.5.0.sha256sum] = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
 SRC_URI[clap_mangen-0.2.9.sha256sum] = "bb0f09a0ca8f0dd8ac92c546b426f466ef19828185c6d504c80c48c9c2768ed9"
@@ -323,18 +320,18 @@
 SRC_URI[conv-0.3.3.sha256sum] = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"
 SRC_URI[core-foundation-sys-0.8.3.sha256sum] = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
 SRC_URI[coz-0.1.3.sha256sum] = "cef55b3fe2f5477d59e12bc792e8b3c95a25bd099eadcfae006ecea136de76e2"
-SRC_URI[cpp-0.5.7.sha256sum] = "dec5e86d4f6547f0218ad923d9508244a71ef83b763196e6698b4f70f3595185"
-SRC_URI[cpp_build-0.5.7.sha256sum] = "16f4d303b8ec35fb3afd7e963e2c898117f1e49930becb703e4a7ac528ad2dd0"
-SRC_URI[cpp_common-0.5.7.sha256sum] = "76071bb9c8c4dd2b5eb209907deab7b031323cf1be3dfdc6ec5d37f4f187d8a1"
-SRC_URI[cpp_macros-0.5.7.sha256sum] = "7fdaa01904c12a8989dbfa110b41ef27efc432ac9934f691b9732f01cb64dc01"
+SRC_URI[cpp-0.5.9.sha256sum] = "bfa65869ef853e45c60e9828aa08cdd1398cb6e13f3911d9cb2a079b144fcd64"
+SRC_URI[cpp_build-0.5.9.sha256sum] = "0e361fae2caf9758164b24da3eedd7f7d7451be30d90d8e7b5d2be29a2f0cf5b"
+SRC_URI[cpp_common-0.5.9.sha256sum] = "3e1a2532e4ed4ea13031c13bc7bc0dbca4aae32df48e9d77f0d1e743179f2ea1"
+SRC_URI[cpp_macros-0.5.9.sha256sum] = "47ec9cc90633446f779ef481a9ce5a0077107dd5b87016440448d908625a83fd"
 SRC_URI[cpufeatures-0.2.5.sha256sum] = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
 SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
 SRC_URI[crossbeam-channel-0.5.8.sha256sum] = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
 SRC_URI[crossbeam-deque-0.8.2.sha256sum] = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
 SRC_URI[crossbeam-epoch-0.9.14.sha256sum] = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
 SRC_URI[crossbeam-utils-0.8.15.sha256sum] = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
-SRC_URI[crossterm-0.26.1.sha256sum] = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13"
-SRC_URI[crossterm_winapi-0.9.0.sha256sum] = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+SRC_URI[crossterm-0.27.0.sha256sum] = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+SRC_URI[crossterm_winapi-0.9.1.sha256sum] = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
 SRC_URI[crunchy-0.2.2.sha256sum] = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
 SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
 SRC_URI[ctrlc-3.4.0.sha256sum] = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
@@ -353,32 +350,31 @@
 SRC_URI[errno-0.3.1.sha256sum] = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
 SRC_URI[errno-dragonfly-0.1.2.sha256sum] = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
 SRC_URI[exacl-0.10.0.sha256sum] = "1cfeb22a59deb24c3262c43ffcafd1eb807180f371f9fcc99098d181b5d639be"
-SRC_URI[fastrand-1.8.0.sha256sum] = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+SRC_URI[fastrand-2.0.0.sha256sum] = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
 SRC_URI[file_diff-1.0.0.sha256sum] = "31a7a908b8f32538a2143e59a6e4e2508988832d5d4d6f7c156b3cbc762643a5"
-SRC_URI[filetime-0.2.20.sha256sum] = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+SRC_URI[filetime-0.2.22.sha256sum] = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
 SRC_URI[flate2-1.0.24.sha256sum] = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
 SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 SRC_URI[fs_extra-1.3.0.sha256sum] = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
 SRC_URI[fsevent-sys-4.1.0.sha256sum] = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
 SRC_URI[fts-sys-0.2.4.sha256sum] = "9a66c0a21e344f20c87b4ca12643cf4f40a7018f132c98d344e989b959f49dd1"
-SRC_URI[fundu-1.2.0.sha256sum] = "34804ed59f10b3a630c79822ebf7370b562b7281028369e9baa40547c17f8bdc"
-SRC_URI[fundu-core-0.2.0.sha256sum] = "71a99190954ca83bade03ba054799b17a158ea948a6855c6bb8121adb6b49d9f"
-SRC_URI[futures-0.3.25.sha256sum] = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
-SRC_URI[futures-channel-0.3.25.sha256sum] = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
-SRC_URI[futures-core-0.3.25.sha256sum] = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
-SRC_URI[futures-executor-0.3.25.sha256sum] = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
-SRC_URI[futures-io-0.3.25.sha256sum] = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
-SRC_URI[futures-macro-0.3.25.sha256sum] = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
-SRC_URI[futures-sink-0.3.25.sha256sum] = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
-SRC_URI[futures-task-0.3.25.sha256sum] = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+SRC_URI[fundu-2.0.0.sha256sum] = "6c04cb831a8dccadfe3774b07cba4574a1ec24974d761510e65d8a543c2d7cb4"
+SRC_URI[fundu-core-0.3.0.sha256sum] = "76a889e633afd839fb5b04fe53adfd588cefe518e71ec8d3c929698c6daf2acd"
+SRC_URI[futures-0.3.28.sha256sum] = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+SRC_URI[futures-channel-0.3.28.sha256sum] = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+SRC_URI[futures-core-0.3.28.sha256sum] = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+SRC_URI[futures-executor-0.3.28.sha256sum] = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+SRC_URI[futures-io-0.3.28.sha256sum] = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+SRC_URI[futures-macro-0.3.28.sha256sum] = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+SRC_URI[futures-sink-0.3.28.sha256sum] = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+SRC_URI[futures-task-0.3.28.sha256sum] = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
 SRC_URI[futures-timer-3.0.2.sha256sum] = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
-SRC_URI[futures-util-0.3.25.sha256sum] = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+SRC_URI[futures-util-0.3.28.sha256sum] = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
 SRC_URI[gcd-2.3.0.sha256sum] = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a"
 SRC_URI[generic-array-0.14.6.sha256sum] = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
 SRC_URI[getrandom-0.2.9.sha256sum] = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
 SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
 SRC_URI[half-2.2.1.sha256sum] = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
-SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 SRC_URI[hashbrown-0.13.2.sha256sum] = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
 SRC_URI[hermit-abi-0.3.2.sha256sum] = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
 SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
@@ -389,12 +385,11 @@
 SRC_URI[indicatif-0.17.3.sha256sum] = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
 SRC_URI[inotify-0.9.6.sha256sum] = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
 SRC_URI[inotify-sys-0.1.5.sha256sum] = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
-SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
 SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-SRC_URI[is-terminal-0.4.7.sha256sum] = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
 SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
 SRC_URI[itoa-1.0.4.sha256sum] = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
-SRC_URI[js-sys-0.3.60.sha256sum] = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
 SRC_URI[keccak-0.1.4.sha256sum] = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
 SRC_URI[kqueue-1.0.7.sha256sum] = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
 SRC_URI[kqueue-sys-1.0.3.sha256sum] = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
@@ -405,12 +400,13 @@
 SRC_URI[libm-0.2.7.sha256sum] = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
 SRC_URI[linux-raw-sys-0.1.4.sha256sum] = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+SRC_URI[linux-raw-sys-0.4.5.sha256sum] = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
 SRC_URI[lock_api-0.4.9.sha256sum] = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
 SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-SRC_URI[lscolors-0.14.0.sha256sum] = "18a9df1d1fb6d9e92fa043e9eb9a3ecf6892c7b542bae5137cd1e419e40aa8bf"
+SRC_URI[lscolors-0.15.0.sha256sum] = "bf7015a04103ad78abb77e4b79ed151e767922d1cfde5f62640471c629a2320d"
 SRC_URI[match_cfg-0.1.0.sha256sum] = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
 SRC_URI[md-5-0.10.5.sha256sum] = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
-SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[memchr-2.6.2.sha256sum] = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
 SRC_URI[memmap2-0.7.0.sha256sum] = "180d4b35be83d33392d1d1bfbd2ae1eca7ff5de1a94d3fc87faaa99a069e7cbd"
 SRC_URI[memoffset-0.8.0.sha256sum] = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
 SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
@@ -419,10 +415,10 @@
 SRC_URI[nix-0.26.2.sha256sum] = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
 SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
 SRC_URI[notify-6.0.1.sha256sum] = "5738a2795d57ea20abec2d6d76c6081186709c0024187cd5977265eda6598b51"
-SRC_URI[nu-ansi-term-0.47.0.sha256sum] = "1df031e117bca634c262e9bd3173776844b6c17a90b3741c9163663b4385af76"
-SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+SRC_URI[nu-ansi-term-0.49.0.sha256sum] = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68"
+SRC_URI[num-bigint-0.4.4.sha256sum] = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
 SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[num-traits-0.2.16.sha256sum] = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
 SRC_URI[num_cpus-1.16.0.sha256sum] = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
 SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
 SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
@@ -432,7 +428,7 @@
 SRC_URI[ordered-multimap-0.6.0.sha256sum] = "4ed8acf08e98e744e5384c8bc63ceb0364e68a6854187221c18df61c4797690e"
 SRC_URI[os_display-0.1.3.sha256sum] = "7a6229bad892b46b0dcfaaeb18ad0d2e56400f5aaea05b768bde96e73676cf75"
 SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
-SRC_URI[parking_lot_core-0.9.7.sha256sum] = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+SRC_URI[parking_lot_core-0.9.8.sha256sum] = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
 SRC_URI[parse_datetime-0.4.0.sha256sum] = "fecceaede7767a9a98058687a321bc91742eff7670167a34104afb30fc8757df"
 SRC_URI[peeking_take_while-0.1.2.sha256sum] = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
 SRC_URI[phf-0.11.2.sha256sum] = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
@@ -458,22 +454,22 @@
 SRC_URI[rand_pcg-0.3.1.sha256sum] = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
 SRC_URI[rayon-1.7.0.sha256sum] = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
 SRC_URI[rayon-core-1.11.0.sha256sum] = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
-SRC_URI[redox_syscall-0.2.16.sha256sum] = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
 SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
 SRC_URI[reference-counted-singleton-0.1.2.sha256sum] = "f1bfbf25d7eb88ddcbb1ec3d755d0634da8f7657b2cb8b74089121409ab8228f"
-SRC_URI[regex-1.9.1.sha256sum] = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
-SRC_URI[regex-automata-0.3.1.sha256sum] = "e9aaecc05d5c4b5f7da074b9a0d1a0867e71fd36e7fc0482d8bcfe8e8fc56290"
-SRC_URI[regex-syntax-0.7.3.sha256sum] = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846"
+SRC_URI[regex-1.9.5.sha256sum] = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+SRC_URI[regex-automata-0.3.8.sha256sum] = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+SRC_URI[regex-syntax-0.7.5.sha256sum] = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
 SRC_URI[relative-path-1.8.0.sha256sum] = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
-SRC_URI[rlimit-0.10.0.sha256sum] = "9b5b8be0bc0ef630d24f8fa836b3a3463479b2343b29f9a8fa905c71a8c7b69b"
+SRC_URI[rlimit-0.10.1.sha256sum] = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8"
 SRC_URI[roff-0.2.1.sha256sum] = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
-SRC_URI[rstest-0.18.1.sha256sum] = "2b96577ca10cb3eade7b337eb46520108a67ca2818a24d0b63f41fd62bc9651c"
-SRC_URI[rstest_macros-0.18.1.sha256sum] = "225e674cf31712b8bb15fdbca3ec0c1b9d825c5a24407ff2b7e005fb6a29ba03"
+SRC_URI[rstest-0.18.2.sha256sum] = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
+SRC_URI[rstest_macros-0.18.2.sha256sum] = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
 SRC_URI[rust-ini-0.19.0.sha256sum] = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b58de9869a0908930385091"
 SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
-SRC_URI[rustix-0.36.14.sha256sum] = "14e4d67015953998ad0eb82887a0eb0129e18a7e2f3b7b0f6c422fddcd503d62"
-SRC_URI[rustix-0.37.19.sha256sum] = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+SRC_URI[rustix-0.36.15.sha256sum] = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"
+SRC_URI[rustix-0.37.23.sha256sum] = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+SRC_URI[rustix-0.38.8.sha256sum] = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
 SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
 SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 SRC_URI[self_cell-1.0.1.sha256sum] = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6"
@@ -485,7 +481,7 @@
 SRC_URI[sha2-0.10.7.sha256sum] = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 SRC_URI[sha3-0.10.8.sha256sum] = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
 SRC_URI[shlex-1.1.0.sha256sum] = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
-SRC_URI[signal-hook-0.3.15.sha256sum] = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+SRC_URI[signal-hook-0.3.17.sha256sum] = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
 SRC_URI[signal-hook-mio-0.2.3.sha256sum] = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
 SRC_URI[signal-hook-registry-1.4.0.sha256sum] = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
 SRC_URI[siphasher-0.3.10.sha256sum] = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
@@ -499,7 +495,7 @@
 SRC_URI[subtle-2.4.1.sha256sum] = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
 SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
 SRC_URI[syn-2.0.23.sha256sum] = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737"
-SRC_URI[tempfile-3.6.0.sha256sum] = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+SRC_URI[tempfile-3.8.0.sha256sum] = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
 SRC_URI[term_grid-0.1.7.sha256sum] = "230d3e804faaed5a39b08319efb797783df2fd9671b39b7596490cb486d702cf"
 SRC_URI[terminal_size-0.2.6.sha256sum] = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
 SRC_URI[textwrap-0.16.0.sha256sum] = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
@@ -511,7 +507,7 @@
 SRC_URI[tiny-keccak-2.0.2.sha256sum] = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
 SRC_URI[typenum-1.15.0.sha256sum] = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
 SRC_URI[unicode-ident-1.0.5.sha256sum] = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
-SRC_URI[unicode-linebreak-0.1.4.sha256sum] = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
+SRC_URI[unicode-linebreak-0.1.5.sha256sum] = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
 SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
 SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
 SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
@@ -521,11 +517,11 @@
 SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
 SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-SRC_URI[wasm-bindgen-0.2.83.sha256sum] = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
-SRC_URI[wasm-bindgen-backend-0.2.83.sha256sum] = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
-SRC_URI[wasm-bindgen-macro-0.2.83.sha256sum] = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
-SRC_URI[wasm-bindgen-macro-support-0.2.83.sha256sum] = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
-SRC_URI[wasm-bindgen-shared-0.2.83.sha256sum] = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
 SRC_URI[which-4.3.0.sha256sum] = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
 SRC_URI[wild-2.1.0.sha256sum] = "05b116685a6be0c52f5a103334cbff26db643826c7b3735fc0a3ba9871310a74"
 SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
@@ -550,7 +546,7 @@
 SRC_URI[windows_x86_64_gnullvm-0.48.0.sha256sum] = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
 SRC_URI[windows_x86_64_msvc-0.42.2.sha256sum] = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
 SRC_URI[windows_x86_64_msvc-0.48.0.sha256sum] = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
-SRC_URI[xattr-1.0.0.sha256sum] = "ea263437ca03c1522846a4ddafbca2542d0ad5ed9b784909d4b27b76f62bc34a"
+SRC_URI[xattr-1.0.1.sha256sum] = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
 SRC_URI[yansi-0.5.1.sha256sum] = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
 SRC_URI[z85-3.0.5.sha256sum] = "2a599daf1b507819c1121f0bf87fa37eb19daac6aff3aefefd4e6e2e0f2020fc"
 SRC_URI[zip-0.6.6.sha256sum] = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.20.bb b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.20.bb
deleted file mode 100644
index 1121e9a..0000000
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.20.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust"
-HOMEPAGE = "https://github.com/uutils/coreutils"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=41f7469eaacac62c67d5664fff2c062d"
-
-inherit cargo cargo-update-recipe-crates
-
-SRC_URI += "git://github.com/uutils/coreutils.git;protocol=https;branch=main"
-
-# musl not supported because the libc crate does not support functions like "endutxent" at the moment,
-# so src/uucore/src/lib/features.rs disables utmpx when targetting musl.
-COMPATIBLE_HOST:libc-musl = "null"
-
-SRCREV = "8093d81dac0fb87ff3984ba9fe22ab171e630443"
-S = "${WORKDIR}/git"
-
-require ${BPN}-crates.inc
-
-include uutils-coreutils.inc
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb
new file mode 100644
index 0000000..a070fe7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb
@@ -0,0 +1,19 @@
+SUMMARY = "coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust"
+HOMEPAGE = "https://github.com/uutils/coreutils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41f7469eaacac62c67d5664fff2c062d"
+
+inherit cargo cargo-update-recipe-crates
+
+SRC_URI += "git://github.com/uutils/coreutils.git;protocol=https;branch=main"
+
+# musl not supported because the libc crate does not support functions like "endutxent" at the moment,
+# so src/uucore/src/lib/features.rs disables utmpx when targetting musl.
+COMPATIBLE_HOST:libc-musl = "null"
+
+SRCREV = "7c7a6083d90af031ed14b585a9c60fa3b79422a0"
+S = "${WORKDIR}/git"
+
+require ${BPN}-crates.inc
+
+include uutils-coreutils.inc
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-Add-missing-includes-cstdint-and-cstdio.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-Add-missing-includes-cstdint-and-cstdio.patch
index 12fbd75..f8ccb99 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-Add-missing-includes-cstdint-and-cstdio.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/0001-Add-missing-includes-cstdint-and-cstdio.patch
@@ -15,7 +15,8 @@
  storage/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h   | 1 +
  .../rocksdb/rocksdb/table/block_based/data_block_hash_index.h    | 1 +
  storage/rocksdb/rocksdb/util/slice.cc                            | 1 +
- 4 files changed, 4 insertions(+)
+ storage/rocksdb/rocksdb/util/string_util.h                       | 1 +
+ 5 files changed, 5 insertions(+)
 
 diff --git a/storage/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h b/storage/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h
 index 963c1d8e..73487edd 100644
@@ -65,6 +66,19 @@
  #include "rocksdb/slice_transform.h"
  #include "rocksdb/slice.h"
  #include "util/string_util.h"
+
+diff --git a/util/string_util.h b/util/string_util.h
+index 55d106fff02..11178fd1d7b 100644
+--- a/storage/rocksdb/rocksdb/util/string_util.h
++++ b/storage/rocksdb/rocksdb/util/string_util.h
+@@ -6,6 +6,7 @@
+
+ #pragma once
+
++#include <cstdint>
+ #include <sstream>
+ #include <string>
+ #include <unordered_map>
 -- 
 2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/run-ptest b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/run-ptest
new file mode 100644
index 0000000..2f905cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/run-ptest
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# test case test-connect is excluded. Becasue this test case need following steps before running.
+# Without these steps, test case test-connect will fail.
+# 1. Disable 'skip-networking' in /etc/my.cnf
+#    $ sed -i '/skip-networking/s/^/#/g' /etc/my.cnf
+# 2. Restart mysqld.service
+#    $ systemctl restart mysqld
+# 3. Set password for MySQL user "root"
+#    $ mysql -u root
+#    MariaDB [(none)]> SET PASSWORD FOR "root"@"localhost" = PASSWORD("myReallyStrongPwd");
+#    MariaDB [(none)]> FLUSH PRIVILEGES;
+
+# If test-connect is included, please uncomment these lines.
+#export MASTER_MYPORT=3306
+#export MYSQL_TEST_HOST=127.0.0.1
+#export MYSQL_TEST_USER=root
+#export MYSQL_TEST_PASSWD=myReallyStrongPwd
+
+ctest --force-new-ctest-process -E test-connect | sed -u 's/\*\*\*/   /g' | awk '/Test +#/{gsub(/Passed/,"PASS"); gsub(/Failed/,"FAIL"); gsub(/Skipped/,"SKIP"); print $6": "$4; fflush();}'
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.11.5.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.11.5.bb
index 87faabf..a4498fa 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.11.5.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.11.5.bb
@@ -1,5 +1,36 @@
 require mariadb.inc
 
+inherit ptest
+SRC_URI += "${@bb.utils.contains('PTEST_ENABLED', '1', 'file://run-ptest', '', d)}"
+DEPENDS += "${@bb.utils.contains('PTEST_ENABLED', '1', 'rsync-native', '', d)}"
+RDEPENDS:${PN}-ptest += "cmake sed perl-module-test-more"
+
+do_install_ptest () {
+    rsync -a ${B}/unittest ${B}/dbug ${D}${PTEST_PATH} \
+          --exclude CMakeFiles \
+          --exclude cmake_install.cmake \
+          --exclude Makefile \
+          --exclude=*.a \
+          --exclude=*.h \
+          --exclude=*.o \
+          --exclude=*.so \
+          --exclude=*.d \
+          --exclude=*.txt
+    install -m 0755 -d ${D}${PTEST_PATH}/storage
+    rsync -a ${B}/storage/maria ${B}/storage/perfschema ${B}/storage/innobase ${D}${PTEST_PATH}/storage \
+          --exclude CMakeFiles \
+          --exclude cmake_install.cmake \
+          --exclude Makefile \
+          --exclude=*.a \
+          --exclude=*.h \
+          --exclude=*.o \
+          --exclude=*.so \
+          --exclude=*.d \
+          --exclude=*.txt
+    cp -r ${B}/CTestTestfile.cmake ${D}${PTEST_PATH}
+    sed -i -e 's#${WORKDIR}##g' `find ${D}${PTEST_PATH} -name CTestTestfile.cmake`
+}
+
 DEPENDS += "mariadb-native bison-native boost libpcre2 curl ncurses \
             zlib libaio libedit libevent libxml2 gnutls fmt lzo zstd"
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_15.00.0000.bb b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_15.00.0000.bb
deleted file mode 100644
index be79cae..0000000
--- a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_15.00.0000.bb
+++ /dev/null
@@ -1,62 +0,0 @@
-SUMMARY = "ODBC driver for PostgreSQL"
-DESCRIPTION = "\
- This package provides a driver that allows ODBC-enabled applications to \
- access PostgreSQL databases.  ODBC is an abstraction layer that allows \
- applications written for that layer to access databases in a manner \
- that is relatively independent of the particular database management \
- system. \
- . \
- You need to install this package if you want to use an application that \
- provides database access through ODBC and you want that application to \
- access a PostgreSQL database.  This package would need to be installed \
- on the same machine as that client application; the PostgreSQL database \
- server can be on a different machine and does not need any additional \
- software to accept ODBC clients. \
-"
-SECTION = "libs"
-HOMEPAGE = "https://odbc.postgresql.org/"
-
-LICENSE = "LGPL-2.0-only"
-LIC_FILES_CHKSUM = "file://license.txt;md5=6db3822fc7512e83087ba798da013692"
-
-SRC_URI = "http://ftp.postgresql.org/pub/odbc/versions/src/${BPN}-${PV}.tar.gz \
-    file://psqlodbc-remove-some-checks-for-cross-compiling.patch \
-    file://psqlodbc-donot-use-the-hardcode-libdir.patch \
-    file://psqlodbc-fix-for-ptest-support.patch \
-    file://run-ptest \
-"
-
-SRC_URI[sha256sum] = "ca57d6349532ea7fb4fae17bbfc107abe5a155ca2f43446315f9e23764b3f8ec"
-
-DEPENDS += "postgresql unixodbc"
-
-EXTRA_OECONF = "\
-    ac_cv_lib_ltdl_lt_dlopen=no \
-    ac_cv_lib_pq_PQconnectdb=yes \
-    --with-unixodbc=yes \
-    --with-libpq=${STAGING_LIBDIR}/.. \
-    --enable-pthreads \
-    LIBS='-lpthread' \
-"
-
-inherit autotools pkgconfig ptest
-
-do_compile_ptest() {
-    oe_runmake -C ${B}/test
-}
-
-do_install_ptest() {
-    install -d ${D}${PTEST_PATH}
-    cp -a --no-preserve=ownership ${B}/test/exe ${S}/test/expected ${D}${PTEST_PATH}
-    install -m 0755 ${B}/test/reset-db ${D}${PTEST_PATH}
-    install -m 0755 ${B}/test/runsuite ${D}${PTEST_PATH}
-    install -m 0755 ${S}/test/odbcini-gen.sh ${D}${PTEST_PATH}
-    install -m 0755 ${S}/test/sampletables.sql ${D}${PTEST_PATH}
-    sed -i -e 's|@LIBDIR@|${libdir}|' ${D}${PTEST_PATH}/odbcini-gen.sh
-}
-
-FILES:${PN} += "${libdir}"
-
-# The tests need a local PostgreSQL server running
-RDEPENDS:${PN}-ptest = "postgresql"
-
diff --git a/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_16.00.0000.bb b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_16.00.0000.bb
new file mode 100644
index 0000000..97333f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/psqlodbc/psqlodbc_16.00.0000.bb
@@ -0,0 +1,62 @@
+SUMMARY = "ODBC driver for PostgreSQL"
+DESCRIPTION = "\
+ This package provides a driver that allows ODBC-enabled applications to \
+ access PostgreSQL databases.  ODBC is an abstraction layer that allows \
+ applications written for that layer to access databases in a manner \
+ that is relatively independent of the particular database management \
+ system. \
+ . \
+ You need to install this package if you want to use an application that \
+ provides database access through ODBC and you want that application to \
+ access a PostgreSQL database.  This package would need to be installed \
+ on the same machine as that client application; the PostgreSQL database \
+ server can be on a different machine and does not need any additional \
+ software to accept ODBC clients. \
+"
+SECTION = "libs"
+HOMEPAGE = "https://odbc.postgresql.org/"
+
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://license.txt;md5=6db3822fc7512e83087ba798da013692"
+
+SRC_URI = "http://ftp.postgresql.org/pub/odbc/versions/src/${BPN}-${PV}.tar.gz \
+    file://psqlodbc-remove-some-checks-for-cross-compiling.patch \
+    file://psqlodbc-donot-use-the-hardcode-libdir.patch \
+    file://psqlodbc-fix-for-ptest-support.patch \
+    file://run-ptest \
+"
+
+SRC_URI[sha256sum] = "afd892f89d2ecee8d3f3b2314f1bd5bf2d02201872c6e3431e5c31096eca4c8b"
+
+DEPENDS += "postgresql unixodbc"
+
+EXTRA_OECONF = "\
+    ac_cv_lib_ltdl_lt_dlopen=no \
+    ac_cv_lib_pq_PQconnectdb=yes \
+    --with-unixodbc=yes \
+    --with-libpq=${STAGING_LIBDIR}/.. \
+    --enable-pthreads \
+    LIBS='-lpthread' \
+"
+
+inherit autotools pkgconfig ptest
+
+do_compile_ptest() {
+    oe_runmake -C ${B}/test
+}
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}
+    cp -a --no-preserve=ownership ${B}/test/exe ${S}/test/expected ${D}${PTEST_PATH}
+    install -m 0755 ${B}/test/reset-db ${D}${PTEST_PATH}
+    install -m 0755 ${B}/test/runsuite ${D}${PTEST_PATH}
+    install -m 0755 ${S}/test/odbcini-gen.sh ${D}${PTEST_PATH}
+    install -m 0755 ${S}/test/sampletables.sql ${D}${PTEST_PATH}
+    sed -i -e 's|@LIBDIR@|${libdir}|' ${D}${PTEST_PATH}/odbcini-gen.sh
+}
+
+FILES:${PN} += "${libdir}"
+
+# The tests need a local PostgreSQL server running
+RDEPENDS:${PN}-ptest = "postgresql"
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230827.0.bb b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230827.0.bb
deleted file mode 100644
index 7d25e2e..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230827.0.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2015 Igor Santos <igor.santos@aker.com.br>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "Universal Ctags"
-DESCRIPTION = "Universal Ctags is a multilanguage reimplementation of the \
-               Unix ctags utility. Ctags generates an index of source code \
-               definitions which is used by numerous editors and utilities \
-               to instantly locate the definitions."
-
-HOMEPAGE = "https://ctags.io/"
-
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
-
-inherit autotools-brokensep pkgconfig manpages
-
-SRCREV = "713c557bd30e729be54af12edafd90dc041ce534"
-SRC_URI = "git://github.com/universal-ctags/ctags;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ??= " \
-    readcmd \
-    xml \
-    json \
-    yaml \
-"
-PACKAGECONFIG[readcmd] = "--enable-readcmd,--disable-readcmd"
-PACKAGECONFIG[etags] = "--enable-etags,--disable-etags"
-PACKAGECONFIG[xml] = "--enable-xml,--disable-xml,libxml2"
-PACKAGECONFIG[json] = "--enable-json,--disable-json,jansson"
-PACKAGECONFIG[seccomp] = "--enable-seccomp,--disable-seccomp,libseccomp"
-PACKAGECONFIG[yaml] = "--enable-yaml,--disable-yaml,libyaml"
-PACKAGECONFIG[manpages] = ",,python3-docutils-native"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb
new file mode 100644
index 0000000..02afbfb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb
@@ -0,0 +1,36 @@
+# Copyright (C) 2015 Igor Santos <igor.santos@aker.com.br>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Universal Ctags"
+DESCRIPTION = "Universal Ctags is a multilanguage reimplementation of the \
+               Unix ctags utility. Ctags generates an index of source code \
+               definitions which is used by numerous editors and utilities \
+               to instantly locate the definitions."
+
+HOMEPAGE = "https://ctags.io/"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+inherit autotools-brokensep pkgconfig manpages
+
+SRCREV = "481ad1b36daca1d40060dd32b0d825cddc97e9cb"
+SRC_URI = "git://github.com/universal-ctags/ctags;branch=master;protocol=https"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= " \
+    readcmd \
+    xml \
+    json \
+    yaml \
+"
+PACKAGECONFIG[readcmd] = "--enable-readcmd,--disable-readcmd"
+PACKAGECONFIG[etags] = "--enable-etags,--disable-etags"
+PACKAGECONFIG[xml] = "--enable-xml,--disable-xml,libxml2"
+PACKAGECONFIG[json] = "--enable-json,--disable-json,jansson"
+PACKAGECONFIG[seccomp] = "--enable-seccomp,--disable-seccomp,libseccomp"
+PACKAGECONFIG[yaml] = "--enable-yaml,--disable-yaml,libyaml"
+PACKAGECONFIG[manpages] = ",,python3-docutils-native"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-Revert-Changed-GRPCPP_ABSEIL_SYNC-to-GPR_ABSEIL_SYNC.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-Revert-Changed-GRPCPP_ABSEIL_SYNC-to-GPR_ABSEIL_SYNC.patch
deleted file mode 100644
index b245ad8..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-Revert-Changed-GRPCPP_ABSEIL_SYNC-to-GPR_ABSEIL_SYNC.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From dc593958e556dd496b774f35c5992285510d6859 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Tue, 19 Oct 2021 17:09:55 +0200
-Subject: [PATCH] Revert "Changed GRPCPP_ABSEIL_SYNC to GPR_ABSEIL_SYNC
- (#25681)"
-
-This reverts commit 931f91b745cd5b2864a0d1787815871d0bd844ae.
-
-Fixes sysdig from meta-oe and other recipes (like com.webos.service.tts
-libgoogleassistant from meta-webosose) failing with:
-
-| FAILED: userspace/sysdig/sysdig
-| : && /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/x86_64-oe-linux-g++ -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-sec
-urity  --sysroot=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -f
-debug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot=                      -fdebug-prefix-map=/OE/bu
-ild/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot-native=  -fvisibility-inlines-hidden  -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security  --sysroot=/OE/build
-/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot -Wall -ggdb   -std=c++0x -O3 -fno-strict-aliasing -DNDEBUG  -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security
---sysroot=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-p
-refix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot=                      -fdebug-prefix-map=/OE/build/oe-
-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot-native=  -fvisibility-inlines-hidden  -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security  --sysroot=/OE/build/oe-cor
-e/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/oe-cor
-e/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot=                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-
-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot-native=  -Wl,-z,relro,-z,now -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/
-oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot=                      -fdebug-prefix-map=/OE/build/oe-core/tmp-glibc/work/
-core2-64-oe-linux/sysdig/0.27.1-r0/recipe-sysroot-native=  -Wl,-z,relro,-z,now   -rdynamic userspace/sysdig/CMakeFiles/sysdig.dir/fields_info.cpp.o userspace/sysdig/CMakeFiles/sysdig.dir/sysdig.cpp.o -o userspace/sysdig/sysdig  userspace/libsinsp/libsinsp.a  userspace/libscap/libscap.a
- -lelf  -lz  -lcurl  -ljsoncpp  -ltbb  -lcares  -lgrpc++_unsecure  -lgrpc_unsecure  -lprotobuf  -lcares  -lgrpc++_unsecure  -lgrpc_unsecure  -lprotobuf  -ljq  -lb64  -lrt  -lanl  -lssl  -lcrypto  -lluajit-5.1  -ldl  -lpthread && :
-| /usr/include/grpcpp/impl/codegen/completion_queue.h:121: error: undefined reference to 'absl::lts_20210324::Mutex::~Mutex()'
-| /usr/include/grpcpp/impl/codegen/completion_queue.h:121: error: undefined reference to 'absl::lts_20210324::Mutex::~Mutex()'
-| /usr/include/grpcpp/impl/codegen/completion_queue.h:121: error: undefined reference to 'absl::lts_20210324::Mutex::~Mutex()'
-| /usr/include/grpcpp/impl/codegen/completion_queue.h:259: error: undefined reference to 'absl::lts_20210324::Mutex::~Mutex()'
-| collect2: error: ld returned 1 exit status
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
----
-Upstream-Status: Pending
-
- include/grpcpp/impl/codegen/sync.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/include/grpcpp/impl/codegen/sync.h b/include/grpcpp/impl/codegen/sync.h
-index 4cb8133c7c..3d10d9a3a0 100644
---- a/include/grpcpp/impl/codegen/sync.h
-+++ b/include/grpcpp/impl/codegen/sync.h
-@@ -47,7 +47,7 @@
- namespace grpc {
- namespace internal {
- 
--#ifdef GPR_ABSEIL_SYNC
-+#ifdef GRPCPP_ABSEIL_SYNC
- 
- using Mutex = absl::Mutex;
- using MutexLock = absl::MutexLock;
-@@ -142,7 +142,7 @@ class CondVar {
-   gpr_cv cv_;
- };
- 
--#endif  // GPR_ABSEIL_SYNC
-+#endif  // GRPCPP_ABSEIL_SYNC
- 
- template <typename Predicate>
- GRPC_DEPRECATED("incompatible with thread safety analysis")
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-add-separate-export-for-plugin-targets.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-add-separate-export-for-plugin-targets.patch
deleted file mode 100644
index 679bd38..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-add-separate-export-for-plugin-targets.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 3150cb043363e05588062dd392b940be25594713 Mon Sep 17 00:00:00 2001
-From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
-Date: Tue, 18 Feb 2020 14:17:07 +0100
-Subject: [PATCH] cmake: add separate export for plugin targets
-
-Upstream-Status: Submitted [https://github.com/grpc/grpc/pull/29328]
-
-
----
- CMakeLists.txt | 18 +++++++++++-------
- 1 file changed, 11 insertions(+), 7 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index efdaf8936d..6608b1b00c 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -10935,7 +10935,7 @@ target_link_libraries(grpc_cpp_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_cpp_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_cpp_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -10975,7 +10975,7 @@ target_link_libraries(grpc_csharp_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_csharp_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_csharp_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -11015,7 +11015,7 @@ target_link_libraries(grpc_node_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_node_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_node_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -11055,7 +11055,7 @@ target_link_libraries(grpc_objective_c_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_objective_c_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_objective_c_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -11095,7 +11095,7 @@ target_link_libraries(grpc_php_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_php_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_php_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -11135,7 +11135,7 @@ target_link_libraries(grpc_python_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_python_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_python_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -11175,7 +11175,7 @@ target_link_libraries(grpc_ruby_plugin
- 
- 
- if(gRPC_INSTALL)
--  install(TARGETS grpc_ruby_plugin EXPORT gRPCTargets
-+  install(TARGETS grpc_ruby_plugin EXPORT gRPCPluginTargets
-     RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
-     BUNDLE DESTINATION  ${gRPC_INSTALL_BINDIR}
-     LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
-@@ -17349,6 +17349,10 @@ if(gRPC_INSTALL)
-     DESTINATION ${gRPC_INSTALL_CMAKEDIR}
-     NAMESPACE gRPC::
-   )
-+  install(EXPORT gRPCPluginTargets
-+    DESTINATION ${gRPC_INSTALL_CMAKEDIR}
-+    NAMESPACE gRPC::
-+  )
- endif()
- 
- include(CMakePackageConfigHelpers)
--- 
-2.30.2
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-fix-CVE-2023-32732.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-fix-CVE-2023-32732.patch
deleted file mode 100644
index ab46897..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-fix-CVE-2023-32732.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From d39489045b5aa73e27713e3cbacb8832c1140ec8 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Wed, 9 Aug 2023 13:33:45 +0800
-Subject: [PATCH] fix CVE-2023-32732
-
-CVE: CVE-2023-32732
-
-Upstream-Status: Backport [https://github.com/grpc/grpc/pull/32309/commits/6a7850ef4f042ac26559854266dddc79bfbc75b2]
-The original patch is adjusted to fit the current 1.50.1 version.
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- .../ext/transport/chttp2/transport/hpack_parser.cc     | 10 +++++++---
- src/core/ext/transport/chttp2/transport/internal.h     |  2 --
- src/core/ext/transport/chttp2/transport/parsing.cc     |  6 ++----
- 3 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.cc b/src/core/ext/transport/chttp2/transport/hpack_parser.cc
-index f2e49022dc3..cd459d15238 100644
---- a/src/core/ext/transport/chttp2/transport/hpack_parser.cc
-+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.cc
-@@ -1211,12 +1211,16 @@ class HPackParser::Parser {
-             "). GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.",
-             *frame_length_, metadata_size_limit_);
-     if (metadata_buffer_ != nullptr) metadata_buffer_->Clear();
-+    // StreamId is used as a signal to skip this stream but keep the connection
-+    // alive
-     return input_->MaybeSetErrorAndReturn(
-         [] {
-           return grpc_error_set_int(
--              GRPC_ERROR_CREATE_FROM_STATIC_STRING(
--                  "received initial metadata size exceeds limit"),
--              GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
-+	      grpc_error_set_int(
-+                  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
-+                      "received initial metadata size exceeds limit"),
-+                  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED),
-+	      GRPC_ERROR_INT_STREAM_ID, 0);
-         },
-         false);
-   }
-diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h
-index 4a2f4261d83..f8b544d9583 100644
---- a/src/core/ext/transport/chttp2/transport/internal.h
-+++ b/src/core/ext/transport/chttp2/transport/internal.h
-@@ -542,8 +542,6 @@ struct grpc_chttp2_stream {
- 
-   grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture();
- 
--  /** saw some stream level error */
--  grpc_error_handle forced_close_error = GRPC_ERROR_NONE;
-   /** how many header frames have we received? */
-   uint8_t header_frames_received = 0;
-   /** number of bytes received - reset at end of parse thread execution */
-diff --git a/src/core/ext/transport/chttp2/transport/parsing.cc b/src/core/ext/transport/chttp2/transport/parsing.cc
-index 980f13543f6..afe6da190b6 100644
---- a/src/core/ext/transport/chttp2/transport/parsing.cc
-+++ b/src/core/ext/transport/chttp2/transport/parsing.cc
-@@ -22,6 +22,7 @@
- #include <string.h>
- 
- #include <string>
-+#include <utility>
- 
- #include "absl/base/attributes.h"
- #include "absl/status/status.h"
-@@ -719,10 +720,7 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
-     }
-     grpc_chttp2_parsing_become_skip_parser(t);
-     if (s) {
--      s->forced_close_error = err;
--      grpc_chttp2_add_rst_stream_to_next_write(t, t->incoming_stream_id,
--                                               GRPC_HTTP2_PROTOCOL_ERROR,
--                                               &s->stats.outgoing);
-+      grpc_chttp2_cancel_stream(t, s, std::exchange(err, absl::OkStatus()));
-     } else {
-       GRPC_ERROR_UNREF(err);
-     }
--- 
-2.34.1
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.50.1.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.50.1.bb
deleted file mode 100644
index 45bfcb8..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.50.1.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-DESCRIPTION = "A high performance, open source, general-purpose RPC framework. \
-Provides gRPC libraries for multiple languages written on top of shared C core library \
-(C++, Node.js, Python, Ruby, Objective-C, PHP, C#)"
-HOMEPAGE = "https://github.com/grpc/grpc"
-SECTION = "libs"
-LICENSE = "Apache-2.0 & BSD-3-Clause & MPL-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=731e401b36f8077ae0c134b59be5c906"
-
-DEPENDS = "c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl libnsl2 abseil-cpp re2"
-DEPENDS:append:class-target = " googletest grpc-native "
-DEPENDS:append:class-nativesdk = " grpc-native "
-
-PACKAGE_BEFORE_PN = "${PN}-compiler"
-
-RDEPENDS:${PN}-compiler = "${PN}"
-RDEPENDS:${PN}-dev:append:class-native = " ${PN}-compiler"
-# Configuration above allows to cross-compile gRPC applications
-# In order to compile applications on the target, use the dependency below
-# Both dependencies are mutually exclusive
-# RDEPENDS:${PN}-dev += "${PN}-compiler"
-
-S = "${WORKDIR}/git"
-SRCREV_grpc = "90ccf24d22b6fc909a1021ebd89fd8c838467d26"
-BRANCH = "v1.50.x"
-SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
-           file://0001-Revert-Changed-GRPCPP_ABSEIL_SYNC-to-GPR_ABSEIL_SYNC.patch \
-           file://0001-cmake-add-separate-export-for-plugin-targets.patch \
-           file://0001-cmake-Link-with-libatomic-on-rv32-rv64.patch \
-           file://0001-fix-CVE-2023-32732.patch \
-           "
-# Fixes build with older compilers 4.8 especially on ubuntu 14.04
-CXXFLAGS:append:class-native = " -Wl,--no-as-needed"
-
-inherit cmake pkgconfig
-
-EXTRA_OECMAKE = " \
-    -DgRPC_CARES_PROVIDER=package \
-    -DgRPC_ZLIB_PROVIDER=package \
-    -DgRPC_SSL_PROVIDER=package \
-    -DgRPC_PROTOBUF_PROVIDER=package \
-    -D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
-    -DgRPC_ABSL_PROVIDER=package \
-    -DgRPC_RE2_PROVIDER=package \
-    -DgRPC_INSTALL=ON \
-    -DCMAKE_CROSSCOMPILING=ON \
-    -DgRPC_INSTALL_LIBDIR=${baselib} \
-    -DgRPC_INSTALL_CMAKEDIR=${baselib}/cmake/${BPN} \
-    "
-
-PACKAGECONFIG ??= "cpp shared"
-PACKAGECONFIG[cpp] = "-DgRPC_BUILD_GRPC_CPP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF"
-PACKAGECONFIG[csharp] = "-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF"
-PACKAGECONFIG[node] = "-DgRPC_BUILD_GRPC_NODE_PLUGIN=ON,-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF"
-PACKAGECONFIG[objective-c] = "-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=ON,-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF"
-PACKAGECONFIG[php] = "-DgRPC_BUILD_GRPC_PHP_PLUGIN=ON,-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF"
-PACKAGECONFIG[python] = "-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON,-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF"
-PACKAGECONFIG[ruby] = "-DgRPC_BUILD_GRPC_RUBY_PLUGIN=ON,-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF"
-PACKAGECONFIG[protobuf-lite] = "-DgRPC_USE_PROTO_LITE=ON,-DgRPC_USE_PROTO_LITE=OFF,protobuf-lite"
-PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF,,"
-
-do_configure:prepend() {
-    sed -i -e "s#lib/pkgconfig/#${baselib}/pkgconfig/#g" ${S}/CMakeLists.txt
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-FILES:${PN}-compiler += " \
-    ${bindir} \
-    ${libdir}/libgrpc_plugin_support${SOLIBS} \
-    "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb
new file mode 100644
index 0000000..c4dd6b9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb
@@ -0,0 +1,67 @@
+DESCRIPTION = "A high performance, open source, general-purpose RPC framework. \
+Provides gRPC libraries for multiple languages written on top of shared C core library \
+(C++, Node.js, Python, Ruby, Objective-C, PHP, C#)"
+HOMEPAGE = "https://github.com/grpc/grpc"
+SECTION = "libs"
+LICENSE = "Apache-2.0 & BSD-3-Clause & MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=731e401b36f8077ae0c134b59be5c906"
+
+DEPENDS = "c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl libnsl2 abseil-cpp re2"
+DEPENDS:append:class-target = " googletest grpc-native "
+DEPENDS:append:class-nativesdk = " grpc-native "
+
+PACKAGE_BEFORE_PN = "${PN}-compiler"
+
+RDEPENDS:${PN}-compiler = "${PN}"
+RDEPENDS:${PN}-dev:append:class-native = " ${PN}-compiler"
+# Configuration above allows to cross-compile gRPC applications
+# In order to compile applications on the target, use the dependency below
+# Both dependencies are mutually exclusive
+# RDEPENDS:${PN}-dev += "${PN}-compiler"
+
+S = "${WORKDIR}/git"
+SRCREV_grpc = "c0d1c393d9365664d47df41746e992ae97b651ef"
+BRANCH = "v1.56.x"
+SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
+           file://0001-cmake-Link-with-libatomic-on-rv32-rv64.patch \
+           "
+# Fixes build with older compilers 4.8 especially on ubuntu 14.04
+CXXFLAGS:append:class-native = " -Wl,--no-as-needed"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE = " \
+    -DgRPC_CARES_PROVIDER=package \
+    -DgRPC_ZLIB_PROVIDER=package \
+    -DgRPC_SSL_PROVIDER=package \
+    -DgRPC_PROTOBUF_PROVIDER=package \
+    -D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
+    -DgRPC_ABSL_PROVIDER=package \
+    -DgRPC_RE2_PROVIDER=package \
+    -DgRPC_INSTALL=ON \
+    -DCMAKE_CROSSCOMPILING=ON \
+    -DgRPC_INSTALL_LIBDIR=${baselib} \
+    -DgRPC_INSTALL_CMAKEDIR=${baselib}/cmake/${BPN} \
+    "
+
+PACKAGECONFIG ??= "cpp shared"
+PACKAGECONFIG[cpp] = "-DgRPC_BUILD_GRPC_CPP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF"
+PACKAGECONFIG[csharp] = "-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF"
+PACKAGECONFIG[node] = "-DgRPC_BUILD_GRPC_NODE_PLUGIN=ON,-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF"
+PACKAGECONFIG[objective-c] = "-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=ON,-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF"
+PACKAGECONFIG[php] = "-DgRPC_BUILD_GRPC_PHP_PLUGIN=ON,-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF"
+PACKAGECONFIG[python] = "-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON,-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF"
+PACKAGECONFIG[ruby] = "-DgRPC_BUILD_GRPC_RUBY_PLUGIN=ON,-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF"
+PACKAGECONFIG[protobuf-lite] = "-DgRPC_USE_PROTO_LITE=ON,-DgRPC_USE_PROTO_LITE=OFF,protobuf-lite"
+PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF,,"
+
+do_configure:prepend() {
+    sed -i -e "s#lib/pkgconfig/#${baselib}/pkgconfig/#g" ${S}/CMakeLists.txt
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+FILES:${PN}-compiler += " \
+    ${bindir} \
+    ${libdir}/libgrpc_plugin_support${SOLIBS} \
+    "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0001-configure-Pass-_XOPEN_SOURCE-when-checking-for-strpt.patch b/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0001-configure-Pass-_XOPEN_SOURCE-when-checking-for-strpt.patch
deleted file mode 100644
index e4d6ebb..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0001-configure-Pass-_XOPEN_SOURCE-when-checking-for-strpt.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 40bbd419ad8d1bd9cbe8b17063c323f8a40ab327 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Sep 2022 09:59:31 -0700
-Subject: [PATCH 1/2] configure: Pass _XOPEN_SOURCE when checking for strptime
-
-Include sys/time.h for gettimeofday since thats where its in glibc
-
-Upstream-Status: Submitted [https://github.com/stedolan/jq/pull/2480]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index a2cd99e..95afe06 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -139,7 +139,10 @@ AC_FUNC_ALLOCA
- 
- AC_FIND_FUNC([isatty], [c], [#include <unistd.h>], [0])
- AC_FIND_FUNC([_isatty], [c], [#include <io.h>], [0])
-+OLD_CFLAGS=$CFLAGS
-+CFLAGS="$CFLAGS -D_XOPEN_SOURCE"
- AC_FIND_FUNC([strptime], [c], [#include <time.h>], [0, 0, 0])
-+CFLAGS=$OLD_CFLAGS
- AC_FIND_FUNC([strftime], [c], [#include <time.h>], [0, 0, 0, 0])
- AC_FIND_FUNC([setenv], [c], [#include <stdlib.h>], [0, 0, 0])
- AC_FIND_FUNC([timegm], [c], [#include <time.h>], [0])
-@@ -147,7 +150,7 @@ AC_FIND_FUNC([gmtime_r], [c], [#include <time.h>], [0, 0])
- AC_FIND_FUNC([gmtime], [c], [#include <time.h>], [0])
- AC_FIND_FUNC([localtime_r], [c], [#include <time.h>], [0, 0])
- AC_FIND_FUNC([localtime], [c], [#include <time.h>], [0])
--AC_FIND_FUNC([gettimeofday], [c], [#include <time.h>], [0, 0])
-+AC_FIND_FUNC([gettimeofday], [c], [#include <sys/time.h>], [0, 0])
- AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_TM_GMT_OFF],1,[Define to 1 if the system has the tm_gmt_off field in struct tm])],
-                 [], [[#include <time.h>]])
- AC_CHECK_MEMBER([struct tm.__tm_gmtoff], [AC_DEFINE([HAVE_TM___TM_GMT_OFF],1,[Define to 1 if the system has the __tm_gmt_off field in struct tm])],
--- 
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0002-builtin-Replace-_BSD_SOURCE-with-_DEFAULT_SOURCE.patch b/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0002-builtin-Replace-_BSD_SOURCE-with-_DEFAULT_SOURCE.patch
deleted file mode 100644
index e849436..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/jq/jq/0002-builtin-Replace-_BSD_SOURCE-with-_DEFAULT_SOURCE.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From cda1734bed3b048c01452c798877d05b8c2f4c15 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Sep 2022 10:00:59 -0700
-Subject: [PATCH 2/2] builtin: Replace _BSD_SOURCE with _DEFAULT_SOURCE
-
-newer glibc has remove _BSD_SOURCE and wants it to be replaced with _DEFAULT_SOURCE
-
-Fixes
-/usr/include/features.h:194:3: warning: "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-W#warnings]
-warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
-
-Uptream-Status: Submitted [https://github.com/stedolan/jq/pull/2480]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- src/builtin.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/builtin.c b/src/builtin.c
-index 1c6b08c..2a31496 100644
---- a/src/builtin.c
-+++ b/src/builtin.c
-@@ -1,4 +1,4 @@
--#define _BSD_SOURCE
-+#define _DEFAULT_SOURCE
- #define _GNU_SOURCE
- #ifndef __sun__
- # define _XOPEN_SOURCE
--- 
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.7.bb b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.7.bb
new file mode 100644
index 0000000..5c2e3aa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.7.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Lightweight and flexible command-line JSON processor"
+DESCRIPTION = "jq is like sed for JSON data, you can use it to slice and \
+               filter and map and transform structured data with the same \
+               ease that sed, awk, grep and friends let you play with text."
+HOMEPAGE = "https://jqlang.github.io/jq/"
+BUGTRACKER = "https://github.com/jqlang/jq/issues"
+SECTION = "utils"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=488f4e0b04c0456337fb70d1ac1758ba"
+
+GITHUB_BASE_URI = "https://github.com/jqlang/${BPN}/releases/"
+SRC_URI = "${GITHUB_BASE_URI}/download/${BPN}-${PV}/${BPN}-${PV}.tar.gz \
+    file://run-ptest \
+    "
+SRC_URI[sha256sum] = "402a0d6975d946e6f4e484d1a84320414a0ff8eb6cf49d2c11d144d4d344db62"
+
+inherit autotools github-releases ptest
+
+UPSTREAM_CHECK_REGEX = "releases/tag/${BPN}-(?P<pver>\d+(\.\d+)+)"
+
+PACKAGECONFIG ?= "oniguruma"
+
+PACKAGECONFIG[docs] = "--enable-docs,--disable-docs,ruby-native"
+PACKAGECONFIG[maintainer-mode] = "--enable-maintainer-mode,--disable-maintainer-mode,flex-native bison-native"
+PACKAGECONFIG[oniguruma] = "--with-oniguruma,--without-oniguruma,onig"
+# enable if you want ptest running under valgrind
+PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind"
+
+do_configure:append() {
+	sed -i -e "/^ac_cs_config=/ s:${WORKDIR}::g" ${B}/config.status
+}
+
+do_install_ptest() {
+    cp -rf ${S}/tests ${D}${PTEST_PATH}
+    cp -rf ${B}/.libs ${D}${PTEST_PATH}
+    # libjq.so.* is packaged in the main jq component, so remove it from ptest
+    rm -f ${D}${PTEST_PATH}/.libs/libjq.so.*
+    ln -sf ${bindir}/jq ${D}${PTEST_PATH}
+    if [ "${@bb.utils.contains('PACKAGECONFIG', 'valgrind', 'true', 'false', d)}" = "false" ]; then
+        sed -i 's:#export NO_VALGRIND=1:export NO_VALGRIND=1:g' ${D}${PTEST_PATH}/run-ptest
+    fi
+    # handle multilib
+    sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_git.bb b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_git.bb
deleted file mode 100644
index 4fa98aa..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_git.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Lightweight and flexible command-line JSON processor"
-DESCRIPTION = "jq is like sed for JSON data, you can use it to slice and \
-               filter and map and transform structured data with the same \
-               ease that sed, awk, grep and friends let you play with text."
-HOMEPAGE = "https://stedolan.github.io/jq/"
-BUGTRACKER = "https://github.com/stedolan/jq/issues"
-SECTION = "utils"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2814b59e00e7918c864fa3b6bbe049b4"
-
-PV = "1.6+git${SRCPV}"
-SRC_URI = "git://github.com/stedolan/jq;protocol=https;branch=master \
-    file://0001-configure-Pass-_XOPEN_SOURCE-when-checking-for-strpt.patch \
-    file://0002-builtin-Replace-_BSD_SOURCE-with-_DEFAULT_SOURCE.patch \
-    file://run-ptest \
-    "
-SRCREV = "cff5336ec71b6fee396a95bb0e4bea365e0cd1e8"
-S = "${WORKDIR}/git"
-
-inherit autotools-brokensep ptest
-
-PACKAGECONFIG ?= "oniguruma"
-
-PACKAGECONFIG[docs] = "--enable-docs,--disable-docs,ruby-native"
-PACKAGECONFIG[maintainer-mode] = "--enable-maintainer-mode,--disable-maintainer-mode,flex-native bison-native"
-PACKAGECONFIG[oniguruma] = "--with-oniguruma,--without-oniguruma,onig"
-# enable if you want ptest running under valgrind
-PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind"
-
-do_install_ptest() {
-    cp -rf ${B}/tests ${D}${PTEST_PATH}
-    cp -rf ${B}/.libs ${D}${PTEST_PATH}
-    # libjq.so.* is packaged in the main jq component, so remove it from ptest
-    rm -f ${D}${PTEST_PATH}/.libs/libjq.so.*
-    ln -sf ${bindir}/jq ${D}${PTEST_PATH}
-    if [ "${@bb.utils.contains('PACKAGECONFIG', 'valgrind', 'true', 'false', d)}" = "false" ]; then
-        sed -i 's:#export NO_VALGRIND=1:export NO_VALGRIND=1:g' ${D}${PTEST_PATH}/run-ptest
-    fi
-    # handle multilib
-    sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0002-Fix-assumed-signed-char.patch b/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0002-Fix-assumed-signed-char.patch
index 2ee0a39..1c4b871 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0002-Fix-assumed-signed-char.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0002-Fix-assumed-signed-char.patch
@@ -11,7 +11,7 @@
 
 Fix this by specifying signed char.
 
-Upstream-Status: Accepted [https://github.com/pboettch/json-schema-validator/commit/491ac44026e08f31790f5cacffa62e168bb35e32]
+Upstream-Status: Backport [https://github.com/pboettch/json-schema-validator/commit/491ac44026e08f31790f5cacffa62e168bb35e32]
 
 Signed-off-by: Parian Golchin <Parian.Golchin@iris-sensing.com>
 ---
diff --git a/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0003-For-root-value-use-empty-pointer.patch b/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0003-For-root-value-use-empty-pointer.patch
index e0d0cf8..eac997a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0003-For-root-value-use-empty-pointer.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/json-schema-validator/json-schema-validator/0003-For-root-value-use-empty-pointer.patch
@@ -3,7 +3,7 @@
 Date: Fri, 13 Jan 2023 09:15:42 +0100
 Subject: [PATCH 3/3] For root value, use empty pointer
 
-Upstream-Status: Accepted [https://github.com/pboettch/json-schema-validator/commit/59c9d6200bf3cd54b4fc717ec1660c91eddb4d1a]
+Upstream-Status: Backport [https://github.com/pboettch/json-schema-validator/commit/59c9d6200bf3cd54b4fc717ec1660c91eddb4d1a]
 
 Signed-off-by: Parian Golchin <Parian.Golchin@iris-sensing.com>
 ---
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-18.17/oe-npm-cache b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-20.5/oe-npm-cache
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-18.17/oe-npm-cache
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-20.5/oe-npm-cache
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-native_18.17.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-native_20.5.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-native_18.17.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs-oe-cache-native_20.5.bb
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Using-native-binaries.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Using-native-binaries.patch
index 66e10a0..0178cec 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Using-native-binaries.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Using-native-binaries.patch
@@ -12,7 +12,7 @@
 
 Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
 ---
- node.gyp                 | 1 +
+ node.gyp                 | 3 +
  tools/v8_gypfiles/v8.gyp | 5 +++++
  2 files changed, 6 insertions(+)
 
@@ -28,6 +28,23 @@
                      '<(node_mksnapshot_exec)',
                      '<(node_snapshot_main)',
                    ],
+@@ -935,6 +935,7 @@
+           'action_name': 'node_js2c',
+           'process_outputs_as_sources': 1,
+           'inputs': [
++            '<(PRODUCT_DIR)/v8-qemu-wrapper.sh',
+             '<(node_js2c_exec)',
+             '<@(library_files)',
+             '<@(deps_files)',
+@@ -944,6 +945,7 @@
+             '<(SHARED_INTERMEDIATE_DIR)/node_javascript.cc',
+           ],
+           'action': [
++            '<(PRODUCT_DIR)/v8-qemu-wrapper.sh',
+             '<(node_js2c_exec)',
+             '<@(_outputs)',
+             'lib',
+
 diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp
 index 42e26cd9..bc721991 100644
 --- a/tools/v8_gypfiles/v8.gyp
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-liftoff-Correct-function-signatures.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-liftoff-Correct-function-signatures.patch
index c9a522d..5af87d8 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-liftoff-Correct-function-signatures.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-liftoff-Correct-function-signatures.patch
@@ -1,6 +1,6 @@
 From dc3652c0abcdf8573fd044907b19d8eda7ca1124 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 20 Oct 2021 12:49:58 -0700
+Date: Mon, 3 Jul 2023 12:33:16 +0000
 Subject: [PATCH] [liftoff] Correct function signatures
 
 Fixes builds on mips where clang reports an error
@@ -13,16 +13,15 @@
 Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
 ---
  deps/v8/src/wasm/baseline/liftoff-assembler.h               | 6 +++---
- deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h     | 2 +-
  deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h | 2 +-
- .../src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h   | 2 +-
- 4 files changed, 6 insertions(+), 6 deletions(-)
+ deps/v8/src/wasm/baseline/riscv/liftoff-assembler-riscv64.h | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/deps/v8/src/wasm/baseline/liftoff-assembler.h b/deps/v8/src/wasm/baseline/liftoff-assembler.h
-index 22c7f73a..db4cb168 100644
+index aef63c64..f2a11b01 100644
 --- a/deps/v8/src/wasm/baseline/liftoff-assembler.h
 +++ b/deps/v8/src/wasm/baseline/liftoff-assembler.h
-@@ -646,7 +646,7 @@ class LiftoffAssembler : public TurboAssembler {
+@@ -717,7 +717,7 @@ class LiftoffAssembler : public MacroAssembler {
    void FinishCall(const ValueKindSig*, compiler::CallDescriptor*);
  
    // Move {src} into {dst}. {src} and {dst} must be different.
@@ -31,7 +30,7 @@
  
    // Parallel register move: For a list of tuples <dst, src, kind>, move the
    // {src} register of kind {kind} into {dst}. If {src} equals {dst}, ignore
-@@ -795,8 +795,8 @@ class LiftoffAssembler : public TurboAssembler {
+@@ -884,8 +884,8 @@ class LiftoffAssembler : public MacroAssembler {
    inline void MoveStackValue(uint32_t dst_offset, uint32_t src_offset,
                               ValueKind);
  
@@ -42,24 +41,11 @@
  
    inline void Spill(int offset, LiftoffRegister, ValueKind);
    inline void Spill(int offset, WasmValue);
-diff --git a/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h b/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h
-index c76fd2f4..0fffe231 100644
---- a/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h
-+++ b/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h
-@@ -661,7 +661,7 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
-     pinned = pinned | LiftoffRegList{dst_op.rm(), src};
-     LiftoffRegister tmp = GetUnusedRegister(src.reg_class(), pinned);
-     // Save original value.
--    Move(tmp, src, type.value_type());
-+    Move(tmp, src, type.value_type().kind());
- 
-     src = tmp;
-     pinned.set(tmp);
 diff --git a/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h b/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h
-index 36413545..48207337 100644
+index 96cba24c..53e1842d 100644
 --- a/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h
 +++ b/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h
-@@ -593,7 +593,7 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
+@@ -592,7 +592,7 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
      pinned.set(dst_op.rm());
      LiftoffRegister tmp = GetUnusedRegister(src.reg_class(), pinned);
      // Save original value.
@@ -68,11 +54,11 @@
  
      src = tmp;
      pinned.set(tmp);
-diff --git a/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h b/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h
-index 642a7d2a..56ffcc2a 100644
---- a/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h
-+++ b/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h
-@@ -589,7 +589,7 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
+diff --git a/deps/v8/src/wasm/baseline/riscv/liftoff-assembler-riscv64.h b/deps/v8/src/wasm/baseline/riscv/liftoff-assembler-riscv64.h
+index 1d6ae09e..397e82b2 100644
+--- a/deps/v8/src/wasm/baseline/riscv/liftoff-assembler-riscv64.h
++++ b/deps/v8/src/wasm/baseline/riscv/liftoff-assembler-riscv64.h
+@@ -286,7 +286,7 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg,
      pinned.set(dst_op.rm());
      LiftoffRegister tmp = GetUnusedRegister(src.reg_class(), pinned);
      // Save original value.
@@ -82,4 +68,4 @@
      src = tmp;
      pinned.set(tmp);
 --
-2.34.1
+2.40.0
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-mips-Use-32bit-cast-for-operand-on-mips32.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-mips-Use-32bit-cast-for-operand-on-mips32.patch
deleted file mode 100644
index a0242d8..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-mips-Use-32bit-cast-for-operand-on-mips32.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From e65dde8db17da5acddeef7eb9316199c4e5e0811 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 19 Apr 2022 12:40:25 -0700
-Subject: [PATCH] mips: Use 32bit cast for operand on mips32
-
-Fixes
-deps/v8/src/compiler/backend/mips/code-generator-mips.cc: In member function 'void v8::internal::compiler::CodeGenerator::AssembleReturn(v8::internal::compiler::InstructionOperand*)':
-../deps/v8/src/compiler/backend/mips/code-generator-mips.cc:4233:48: error: call of overloaded 'Operand(int64_t)' is ambiguous
- 4233 |                 Operand(static_cast<int64_t>(0)));
-      |                                                ^
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- deps/v8/src/compiler/backend/mips/code-generator-mips.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/deps/v8/src/compiler/backend/mips/code-generator-mips.cc b/deps/v8/src/compiler/backend/mips/code-generator-mips.cc
-index 2b8197e..b226140 100644
---- a/deps/v8/src/compiler/backend/mips/code-generator-mips.cc
-+++ b/deps/v8/src/compiler/backend/mips/code-generator-mips.cc
-@@ -4230,7 +4230,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) {
-     } else if (FLAG_debug_code) {
-       __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue,
-                 g.ToRegister(additional_pop_count),
--                Operand(static_cast<int64_t>(0)));
-+                Operand(static_cast<int32_t>(0)));
-     }
-   }
-   // Functions with JS linkage have at least one parameter (the receiver).
--- 
-2.36.0
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch
deleted file mode 100644
index 5293818..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-
-https://github.com/v8/v8/commit/878ccb33bd3cf0e6dc018ff8d15843f585ac07be
-
-did some automated cleanups but it missed big-endian code.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/deps/v8/src/runtime/runtime-utils.h
-+++ b/deps/v8/src/runtime/runtime-utils.h
-@@ -126,7 +126,7 @@ static inline ObjectPair MakePair(Object
- #if defined(V8_TARGET_LITTLE_ENDIAN)
-   return x.ptr() | (static_cast<ObjectPair>(y.ptr()) << 32);
- #elif defined(V8_TARGET_BIG_ENDIAN)
--  return y->ptr() | (static_cast<ObjectPair>(x->ptr()) << 32);
-+  return y.ptr() | (static_cast<ObjectPair>(x.ptr()) << 32);
- #else
- #error Unknown endianness
- #endif
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch
deleted file mode 100644
index 16776cb..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-less-memory.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Description: mksnapshot uses too much memory on 32-bit mipsel
-Author: Jérémy Lal <kapouer@melix.org>
-Last-Update: 2020-06-03
-Forwarded: https://bugs.chromium.org/p/v8/issues/detail?id=10586
-
-This ensures that we reserve 500M instead of 2G range for codegen
-ensures that qemu-mips can allocate such large ranges
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Imported from debian https://salsa.debian.org/js-team/nodejs/-/blob/master-12.x/debian/patches/mips-less-memory.patch
-https://buildd.debian.org/status/fetch.php?pkg=nodejs&arch=mipsel&ver=12.17.0~dfsg-2&stamp=1591050388&raw=0
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
---- a/deps/v8/src/common/globals.h
-+++ b/deps/v8/src/common/globals.h
-@@ -224,7 +224,7 @@ constexpr size_t kMinimumCodeRangeSize =
- constexpr size_t kMinExpectedOSPageSize = 64 * KB;  // OS page on PPC Linux
- #elif V8_TARGET_ARCH_MIPS
- constexpr bool kPlatformRequiresCodeRange = false;
--constexpr size_t kMaximalCodeRangeSize = 2048LL * MB;
-+constexpr size_t kMaximalCodeRangeSize = 512 * MB;
- constexpr size_t kMinimumCodeRangeSize = 0 * MB;
- constexpr size_t kMinExpectedOSPageSize = 4 * KB;  // OS page.
- #else
---- a/deps/v8/src/codegen/mips/constants-mips.h
-+++ b/deps/v8/src/codegen/mips/constants-mips.h
-@@ -140,7 +140,7 @@ const uint32_t kLeastSignificantByteInIn
- namespace v8 {
- namespace internal {
- 
--constexpr size_t kMaxPCRelativeCodeRangeInMB = 4096;
-+constexpr size_t kMaxPCRelativeCodeRangeInMB = 1024;
- 
- // -----------------------------------------------------------------------------
- // Registers and FPURegisters.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/run-ptest
index 07a8f2a..e82f373 100755
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/run-ptest
@@ -1,3 +1,8 @@
 #!/bin/sh
 
 ./cctest
+if [ $? = 0 ]; then
+  echo "PASS: nodejs"
+else
+  echo "FAIL: nodejs"
+fi
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_18.17.1.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_18.17.1.bb
deleted file mode 100644
index ee5e848..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_18.17.1.bb
+++ /dev/null
@@ -1,185 +0,0 @@
-DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
-HOMEPAGE = "http://nodejs.org"
-LICENSE = "MIT & ISC & BSD-2-Clause & BSD-3-Clause & Artistic-2.0 & Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bc1f9ebe76be76f163e3b675303ad9cd"
-
-CVE_PRODUCT = "nodejs node.js"
-
-DEPENDS = "openssl file-replacement-native"
-DEPENDS:append:class-target = " qemu-native"
-DEPENDS:append:class-native = " c-ares-native"
-
-inherit pkgconfig python3native qemu ptest
-
-COMPATIBLE_MACHINE:armv4 = "(!.*armv4).*"
-COMPATIBLE_MACHINE:armv5 = "(!.*armv5).*"
-COMPATIBLE_MACHINE:mips64 = "(!.*mips64).*"
-
-COMPATIBLE_HOST:riscv64 = "null"
-COMPATIBLE_HOST:riscv32 = "null"
-COMPATIBLE_HOST:powerpc = "null"
-
-SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
-           file://0001-Disable-running-gyp-files-for-bundled-deps.patch \
-           file://0004-v8-don-t-override-ARM-CFLAGS.patch \
-           file://big-endian.patch \
-           file://mips-less-memory.patch \
-           file://system-c-ares.patch \
-           file://0001-liftoff-Correct-function-signatures.patch \
-           file://0001-mips-Use-32bit-cast-for-operand-on-mips32.patch \
-           file://run-ptest \
-           "
-
-SRC_URI:append:class-target = " \
-           file://0001-Using-native-binaries.patch \
-           "
-SRC_URI:append:toolchain-clang:x86 = " \
-           file://libatomic.patch \
-           "
-SRC_URI:append:toolchain-clang:powerpc64le = " \
-           file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
-           "
-SRC_URI[sha256sum] = "f215cf03d0f00f07ac0b674c6819f804c1542e16f152da04980022aeccf5e65a"
-
-S = "${WORKDIR}/node-v${PV}"
-
-# v8 errors out if you have set CCACHE
-CCACHE = ""
-
-def map_nodejs_arch(a, d):
-    import re
-
-    if   re.match('i.86$', a): return 'ia32'
-    elif re.match('x86_64$', a): return 'x64'
-    elif re.match('aarch64$', a): return 'arm64'
-    elif re.match('(powerpc64|powerpc64le|ppc64le)$', a): return 'ppc64'
-    elif re.match('powerpc$', a): return 'ppc'
-    return a
-
-ARCHFLAGS:arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)} \
-                 ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-arm-fpu=neon', \
-                    bb.utils.contains('TUNE_FEATURES', 'vfpv3d16', '--with-arm-fpu=vfpv3-d16', \
-                    bb.utils.contains('TUNE_FEATURES', 'vfpv3', '--with-arm-fpu=vfpv3', \
-                    '--with-arm-fpu=vfp', d), d), d)}"
-ARCHFLAGS:append:mips = " --v8-lite-mode"
-ARCHFLAGS:append:mipsel = " --v8-lite-mode"
-ARCHFLAGS ?= ""
-
-PACKAGECONFIG ??= "ares brotli icu zlib"
-
-PACKAGECONFIG[ares] = "--shared-cares,,c-ares"
-PACKAGECONFIG[brotli] = "--shared-brotli,,brotli"
-PACKAGECONFIG[icu] = "--with-intl=system-icu,--without-intl,icu"
-PACKAGECONFIG[libuv] = "--shared-libuv,,libuv"
-PACKAGECONFIG[nghttp2] = "--shared-nghttp2,,nghttp2"
-PACKAGECONFIG[shared] = "--shared"
-PACKAGECONFIG[zlib] = "--shared-zlib,,zlib"
-
-# We don't want to cross-compile during target compile,
-# and we need to use the right flags during host compile,
-# too.
-EXTRA_OEMAKE = "\
-    CC.host='${CC} -pie -fPIE' \
-    CFLAGS.host='${CPPFLAGS} ${CFLAGS}' \
-    CXX.host='${CXX} -pie -fPIE' \
-    CXXFLAGS.host='${CPPFLAGS} ${CXXFLAGS}' \
-    LDFLAGS.host='${LDFLAGS}' \
-    AR.host='${AR}' \
-    \
-    builddir_name=./ \
-"
-
-EXTRANATIVEPATH += "file-native"
-
-python prune_sources() {
-    import shutil
-
-    shutil.rmtree(d.getVar('S') + '/deps/openssl')
-    if 'ares' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/deps/cares')
-    if 'brotli' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/deps/brotli')
-    if 'libuv' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/deps/uv')
-    if 'nghttp2' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/deps/nghttp2')
-    if 'zlib' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/deps/zlib')
-}
-do_unpack[postfuncs] += "prune_sources"
-
-# V8's JIT infrastructure requires binaries such as mksnapshot and
-# mkpeephole to be run in the host during the build. However, these
-# binaries must have the same bit-width as the target (e.g. a x86_64
-# host targeting ARMv6 needs to produce a 32-bit binary). Instead of
-# depending on a third Yocto toolchain, we just build those binaries
-# for the target and run them on the host with QEMU.
-python do_create_v8_qemu_wrapper () {
-    """Creates a small wrapper that invokes QEMU to run some target V8 binaries
-    on the host."""
-    qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'),
-                    d.expand('${STAGING_DIR_HOST}${base_libdir}')]
-    qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'),
-                                    qemu_libdirs)
-    wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh')
-    with open(wrapper_path, 'w') as wrapper_file:
-        wrapper_file.write("""#!/bin/sh
-
-# This file has been generated automatically.
-# It invokes QEMU to run binaries built for the target in the host during the
-# build process.
-
-%s "$@"
-""" % qemu_cmd)
-    os.chmod(wrapper_path, 0o755)
-}
-
-do_create_v8_qemu_wrapper[dirs] = "${B}"
-addtask create_v8_qemu_wrapper after do_configure before do_compile
-
-LDFLAGS:append:x86 = " -latomic"
-
-CROSS_FLAGS = "--cross-compiling"
-CROSS_FLAGS:class-native = "--no-cross-compiling"
-
-# Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi
-do_configure () {
-    GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES
-    # $TARGET_ARCH settings don't match --dest-cpu settings
-    python3 configure.py --verbose --prefix=${prefix} \
-               --shared-openssl \
-               --without-dtrace \
-               --without-etw \
-               --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH'), d)}" \
-               --dest-os=linux \
-               --libdir=${baselib} \
-               ${CROSS_FLAGS} \
-               ${ARCHFLAGS} \
-               ${PACKAGECONFIG_CONFARGS}
-}
-
-do_compile () {
-    install -D ${RECIPE_SYSROOT_NATIVE}/etc/ssl/openssl.cnf ${B}/deps/openssl/nodejs-openssl.cnf
-    install -D ${B}/v8-qemu-wrapper.sh ${B}/out/Release/v8-qemu-wrapper.sh
-    oe_runmake BUILDTYPE=Release
-}
-
-do_install () {
-    oe_runmake install DESTDIR=${D}
-}
-
-do_install_ptest () {
-    cp -r  ${B}/out/Release/cctest ${D}${PTEST_PATH}/
-    cp -r ${B}/test ${D}${PTEST_PATH}
-    chown -R root:root ${D}${PTEST_PATH}
-}
-
-PACKAGES =+ "${PN}-npm"
-FILES:${PN}-npm = "${nonarch_libdir}/node_modules ${bindir}/npm ${bindir}/npx ${bindir}/corepack"
-RDEPENDS:${PN}-npm = "bash python3-core python3-shell python3-datetime \
-    python3-misc python3-multiprocessing"
-
-PACKAGES =+ "${PN}-systemtap"
-FILES:${PN}-systemtap = "${datadir}/systemtap"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb
new file mode 100644
index 0000000..6bb0f7f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb
@@ -0,0 +1,180 @@
+DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
+HOMEPAGE = "http://nodejs.org"
+LICENSE = "MIT & ISC & BSD-2-Clause & BSD-3-Clause & Artistic-2.0 & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=059ecf3a6f87111685e51b611b9563e5"
+
+CVE_PRODUCT = "nodejs node.js"
+
+DEPENDS = "openssl file-replacement-native"
+DEPENDS:append:class-target = " qemu-native"
+DEPENDS:append:class-native = " c-ares-native"
+
+inherit pkgconfig python3native qemu ptest
+
+COMPATIBLE_MACHINE:armv4 = "(!.*armv4).*"
+COMPATIBLE_MACHINE:armv5 = "(!.*armv5).*"
+COMPATIBLE_MACHINE:mips64 = "(!.*mips64).*"
+
+COMPATIBLE_HOST:riscv64 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
+COMPATIBLE_HOST:powerpc = "null"
+
+SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
+           file://0001-Disable-running-gyp-files-for-bundled-deps.patch \
+           file://0004-v8-don-t-override-ARM-CFLAGS.patch \
+           file://system-c-ares.patch \
+           file://0001-liftoff-Correct-function-signatures.patch \
+           file://run-ptest \
+           "
+
+SRC_URI:append:class-target = " \
+           file://0001-Using-native-binaries.patch \
+           "
+SRC_URI:append:toolchain-clang:x86 = " \
+           file://libatomic.patch \
+           "
+SRC_URI:append:toolchain-clang:powerpc64le = " \
+           file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
+           "
+SRC_URI[sha256sum] = "439c71aa2f38c2861657bfa538e99191a571258066cbfd4548586049c8134190"
+
+S = "${WORKDIR}/node-v${PV}"
+
+# v8 errors out if you have set CCACHE
+CCACHE = ""
+
+def map_nodejs_arch(a, d):
+    import re
+
+    if   re.match('i.86$', a): return 'ia32'
+    elif re.match('x86_64$', a): return 'x64'
+    elif re.match('aarch64$', a): return 'arm64'
+    elif re.match('(powerpc64|powerpc64le|ppc64le)$', a): return 'ppc64'
+    elif re.match('powerpc$', a): return 'ppc'
+    return a
+
+ARCHFLAGS:arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)} \
+                 ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-arm-fpu=neon', \
+                    bb.utils.contains('TUNE_FEATURES', 'vfpv3d16', '--with-arm-fpu=vfpv3-d16', \
+                    bb.utils.contains('TUNE_FEATURES', 'vfpv3', '--with-arm-fpu=vfpv3', \
+                    '--with-arm-fpu=vfp', d), d), d)}"
+ARCHFLAGS:append:mips = " --v8-lite-mode"
+ARCHFLAGS:append:mipsel = " --v8-lite-mode"
+ARCHFLAGS ?= ""
+
+PACKAGECONFIG ??= "ares brotli icu zlib"
+
+PACKAGECONFIG[ares] = "--shared-cares,,c-ares"
+PACKAGECONFIG[brotli] = "--shared-brotli,,brotli"
+PACKAGECONFIG[icu] = "--with-intl=system-icu,--without-intl,icu"
+PACKAGECONFIG[libuv] = "--shared-libuv,,libuv"
+PACKAGECONFIG[nghttp2] = "--shared-nghttp2,,nghttp2"
+PACKAGECONFIG[shared] = "--shared"
+PACKAGECONFIG[zlib] = "--shared-zlib,,zlib"
+
+# We don't want to cross-compile during target compile,
+# and we need to use the right flags during host compile,
+# too.
+EXTRA_OEMAKE = "\
+    CC.host='${CC} -pie -fPIE' \
+    CFLAGS.host='${CPPFLAGS} ${CFLAGS}' \
+    CXX.host='${CXX} -pie -fPIE' \
+    CXXFLAGS.host='${CPPFLAGS} ${CXXFLAGS}' \
+    LDFLAGS.host='${LDFLAGS}' \
+    AR.host='${AR}' \
+    \
+    builddir_name=./ \
+"
+
+EXTRANATIVEPATH += "file-native"
+
+python prune_sources() {
+    import shutil
+
+    shutil.rmtree(d.getVar('S') + '/deps/openssl')
+    if 'ares' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/cares')
+    if 'brotli' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/brotli')
+    if 'libuv' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/uv')
+    if 'nghttp2' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/nghttp2')
+    if 'zlib' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/zlib')
+}
+do_unpack[postfuncs] += "prune_sources"
+
+# V8's JIT infrastructure requires binaries such as mksnapshot and
+# mkpeephole to be run in the host during the build. However, these
+# binaries must have the same bit-width as the target (e.g. a x86_64
+# host targeting ARMv6 needs to produce a 32-bit binary). Instead of
+# depending on a third Yocto toolchain, we just build those binaries
+# for the target and run them on the host with QEMU.
+python do_create_v8_qemu_wrapper () {
+    """Creates a small wrapper that invokes QEMU to run some target V8 binaries
+    on the host."""
+    qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'),
+                    d.expand('${STAGING_DIR_HOST}${base_libdir}')]
+    qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'),
+                                    qemu_libdirs)
+    wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh')
+    with open(wrapper_path, 'w') as wrapper_file:
+        wrapper_file.write("""#!/bin/sh
+
+# This file has been generated automatically.
+# It invokes QEMU to run binaries built for the target in the host during the
+# build process.
+
+%s "$@"
+""" % qemu_cmd)
+    os.chmod(wrapper_path, 0o755)
+}
+
+do_create_v8_qemu_wrapper[dirs] = "${B}"
+addtask create_v8_qemu_wrapper after do_configure before do_compile
+
+LDFLAGS:append:x86 = " -latomic"
+
+CROSS_FLAGS = "--cross-compiling"
+CROSS_FLAGS:class-native = "--no-cross-compiling"
+
+# Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi
+do_configure () {
+    GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES
+    # $TARGET_ARCH settings don't match --dest-cpu settings
+    python3 configure.py --verbose --prefix=${prefix} \
+               --shared-openssl \
+               --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH'), d)}" \
+               --dest-os=linux \
+               --libdir=${baselib} \
+               ${CROSS_FLAGS} \
+               ${ARCHFLAGS} \
+               ${PACKAGECONFIG_CONFARGS}
+}
+
+do_compile () {
+    install -D ${RECIPE_SYSROOT_NATIVE}/etc/ssl/openssl.cnf ${B}/deps/openssl/nodejs-openssl.cnf
+    install -D ${B}/v8-qemu-wrapper.sh ${B}/out/Release/v8-qemu-wrapper.sh
+    oe_runmake BUILDTYPE=Release
+}
+
+do_install () {
+    oe_runmake install DESTDIR=${D}
+}
+
+do_install_ptest () {
+    cp -r  ${B}/out/Release/cctest ${D}${PTEST_PATH}/
+    cp -r ${B}/test ${D}${PTEST_PATH}
+    chown -R root:root ${D}${PTEST_PATH}
+}
+
+PACKAGES =+ "${PN}-npm"
+FILES:${PN}-npm = "${nonarch_libdir}/node_modules ${bindir}/npm ${bindir}/npx ${bindir}/corepack"
+RDEPENDS:${PN}-npm = "bash python3-core python3-shell python3-datetime \
+    python3-misc python3-multiprocessing"
+
+PACKAGES =+ "${PN}-systemtap"
+FILES:${PN}-systemtap = "${datadir}/systemtap"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-Makefile.am-do-not-compile-the-code-which-was-genera.patch b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-Makefile.am-do-not-compile-the-code-which-was-genera.patch
new file mode 100644
index 0000000..896a568
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-Makefile.am-do-not-compile-the-code-which-was-genera.patch
@@ -0,0 +1,106 @@
+From 62b2fd0a150133b6439f6537cb1762d35f5790ee Mon Sep 17 00:00:00 2001
+From: Xiangyu Chen <xiangyu.chen@windriver.com>
+Date: Fri, 31 Mar 2023 16:02:50 +0800
+Subject: [PATCH] Makefile.am: do not compile the code which was generated from
+ test-full.proto in protobuf-c-native
+
+Those code was auto generated by protoc command with test-full.proto, those code are not compatible
+with protobuf 4.22.x, so temporarily disable compile those code until protobuf-c upstream adapt
+the test-full.proto with latest version protobuf.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ Makefile.am | 75 -----------------------------------------------------
+ 1 file changed, 75 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index ff12664..7412aef 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -136,81 +136,6 @@ else
+ 
+ LOG_COMPILER = $(VALGRIND)
+ 
+-check_PROGRAMS += \
+-	t/generated-code/test-generated-code \
+-	t/generated-code2/test-generated-code2 \
+-	t/generated-code3/test-generated-code3 \
+-	t/version/version
+-
+-TESTS += \
+-	t/generated-code/test-generated-code \
+-	t/generated-code2/test-generated-code2 \
+-	t/generated-code3/test-generated-code3 \
+-	t/version/version
+-
+-t_generated_code_test_generated_code_SOURCES = \
+-	t/generated-code/test-generated-code.c \
+-	t/test.pb-c.c
+-t_generated_code_test_generated_code_LDADD = \
+-	protobuf-c/libprotobuf-c.la
+-
+-t_generated_code2_test_generated_code2_SOURCES = \
+-	t/generated-code2/test-generated-code2.c \
+-	t/test-full.pb-c.c \
+-	t/test-optimized.pb-c.c
+-t_generated_code2_test_generated_code2_LDADD = \
+-	protobuf-c/libprotobuf-c.la
+-
+-t_generated_code3_test_generated_code3_CPPFLAGS = \
+-	-DPROTO3
+-
+-t_generated_code3_test_generated_code3_SOURCES = \
+-	t/generated-code/test-generated-code.c \
+-	t/test-proto3.pb-c.c
+-
+-t_generated_code3_test_generated_code3_LDADD = \
+-	protobuf-c/libprotobuf-c.la
+-
+-noinst_PROGRAMS += \
+-	t/generated-code2/cxx-generate-packed-data
+-
+-t_generated_code2_cxx_generate_packed_data_SOURCES = \
+-	t/generated-code2/cxx-generate-packed-data.cc \
+-	t/test-full.pb.cc \
+-	protobuf-c/protobuf-c.pb.cc
+-$(t_generated_code2_cxx_generate_packed_data_OBJECTS): t/test-full.pb.h
+-t_generated_code2_cxx_generate_packed_data_CXXFLAGS = \
+-	$(AM_CXXFLAGS) \
+-	$(protobuf_CFLAGS)
+-t_generated_code2_cxx_generate_packed_data_LDADD = \
+-	$(protobuf_LIBS)
+-
+-t/test.pb-c.c t/test.pb-c.h: $(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) $(top_srcdir)/t/test.proto
+-	$(AM_V_GEN)@PROTOC@ --plugin=protoc-gen-c=$(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) -I$(top_srcdir) --c_out=$(top_builddir) $(top_srcdir)/t/test.proto
+-
+-t/test-optimized.pb-c.c t/test-optimized.pb-c.h: $(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) $(top_srcdir)/t/test-optimized.proto
+-	$(AM_V_GEN)@PROTOC@ --plugin=protoc-gen-c=$(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) -I$(top_srcdir) --c_out=$(top_builddir) $(top_srcdir)/t/test-optimized.proto
+-
+-t/test-full.pb-c.c t/test-full.pb-c.h: $(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) $(top_srcdir)/t/test-full.proto
+-	$(AM_V_GEN)@PROTOC@ --plugin=protoc-gen-c=$(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) -I$(top_srcdir) --c_out=$(top_builddir) $(top_srcdir)/t/test-full.proto
+-
+-t/test-full.pb.cc t/test-full.pb.h: @PROTOC@ $(top_srcdir)/t/test-full.proto
+-	$(AM_V_GEN)@PROTOC@ -I$(top_srcdir) --cpp_out=$(top_builddir) $(top_srcdir)/t/test-full.proto
+-
+-t/test-proto3.pb-c.c t/test-proto3.pb-c.h: $(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) $(top_srcdir)/t/test-proto3.proto
+-	$(AM_V_GEN)@PROTOC@ --plugin=protoc-gen-c=$(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) -I$(top_srcdir) --c_out=$(top_builddir) $(top_srcdir)/t/test-proto3.proto
+-
+-t/generated-code2/test-full-cxx-output.inc: t/generated-code2/cxx-generate-packed-data$(EXEEXT)
+-	$(AM_V_GEN)$(top_builddir)/t/generated-code2/cxx-generate-packed-data$(EXEEXT) > $(top_builddir)/t/generated-code2/test-full-cxx-output.inc
+-
+-BUILT_SOURCES += \
+-	t/test.pb-c.c t/test.pb-c.h \
+-	t/test-full.pb-c.c t/test-full.pb-c.h \
+-	t/test-optimized.pb-c.c t/test-optimized.pb-c.h \
+-	t/test-full.pb.cc t/test-full.pb.h \
+-	t/test-proto3.pb-c.c t/test-proto3.pb-c.h \
+-	t/generated-code2/test-full-cxx-output.inc
+-
+ t_version_version_SOURCES = \
+ 	t/version/version.c
+ t_version_version_LDADD = \
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.4.1.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.4.1.bb
index d724287..1d9ca9d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.4.1.bb
@@ -12,8 +12,10 @@
 
 DEPENDS = "protobuf-native protobuf"
 
-SRC_URI = "git://github.com/protobuf-c/protobuf-c.git;branch=master;protocol=https"
-SRCREV = "abc67a11c6db271bedbb9f58be85d6f4e2ea8389"
+SRC_URI = "git://github.com/protobuf-c/protobuf-c.git;branch=next;protocol=https"
+SRC_URI:append:class-native = " file://0001-Makefile.am-do-not-compile-the-code-which-was-genera.patch"
+
+SRCREV = "ba4c55f0e686e0252c451f7163ab529e4b36831a"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-Fix-linking-error-with-ld-gold.patch b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-Fix-linking-error-with-ld-gold.patch
deleted file mode 100644
index 2bc44c8..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-Fix-linking-error-with-ld-gold.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From a91130bb95528743a3f7253f8fe945b7505047d5 Mon Sep 17 00:00:00 2001
-From: Kyungjik Min <dp.min@lge.com>
-Date: Mon, 28 Dec 2020 15:56:09 +0900
-Subject: [PATCH] Fix linking error with ld-gold
-
-:Release Notes:
-
-:Detailed Notes:
-https://github.com/protocolbuffers/protobuf/issues/6113
-There's a bug in the CMake build leading it to not use the version
-scripts, which hides the problem (because all symbols are now public)
-but doesn't solve it properly.
-
-:Testing Performed:
-
-:QA Notes:
-N/A
-
-:Issues Addressed:
-[PLAT-130467] Fix build error for libgoogleassistant with latest
-              protobuf-3.11.4
-
----
-Upstream-Status: Pending
-
- src/libprotobuf-lite.map | 2 ++
- src/libprotobuf.map      | 2 ++
- src/libprotoc.map        | 2 ++
- 3 files changed, 6 insertions(+)
-
-diff --git a/src/libprotobuf-lite.map b/src/libprotobuf-lite.map
-index 391554669..a1853ca6c 100644
---- a/src/libprotobuf-lite.map
-+++ b/src/libprotobuf-lite.map
-@@ -3,6 +3,8 @@
-     extern "C++" {
-       *google*;
-     };
-+    scc_info_*;
-+    descriptor_table_*;
- 
-   local:
-     *;
-diff --git a/src/libprotobuf.map b/src/libprotobuf.map
-index 391554669..a1853ca6c 100644
---- a/src/libprotobuf.map
-+++ b/src/libprotobuf.map
-@@ -3,6 +3,8 @@
-     extern "C++" {
-       *google*;
-     };
-+    scc_info_*;
-+    descriptor_table_*;
- 
-   local:
-     *;
-diff --git a/src/libprotoc.map b/src/libprotoc.map
-index 391554669..a1853ca6c 100644
---- a/src/libprotoc.map
-+++ b/src/libprotoc.map
-@@ -3,6 +3,8 @@
-     extern "C++" {
-       *google*;
-     };
-+    scc_info_*;
-+    descriptor_table_*;
- 
-   local:
-     *;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch
index 36c3c59..7c4bf26 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch
@@ -30,7 +30,7 @@
  1 file changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/examples/Makefile b/examples/Makefile
-index 1c7ec8d63..85f591231 100644
+index ef7a4ef58..7206e14e1 100644
 --- a/examples/Makefile
 +++ b/examples/Makefile
 @@ -2,6 +2,8 @@
@@ -42,17 +42,20 @@
  all: cpp java python
  
  cpp:    add_person_cpp    list_people_cpp
-@@ -40,11 +42,11 @@ protoc_middleman_dart: addressbook.proto
+@@ -41,11 +43,11 @@ protoc_middleman_dart: addressbook.proto
  
  add_person_cpp: add_person.cc protoc_middleman
  	pkg-config --cflags protobuf  # fails if protobuf is not installed
--	c++ -std=c++11 add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config --cflags --libs protobuf`
-+	$(CXX) $(CXXFLAGS) $(LDFLAGS) ../src/google/protobuf/.libs/timestamp.pb.o $(PROTOBUF) add_person.cc addressbook.pb.cc -o add_person_cpp
+-	c++ -std=c++14 add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config --cflags --libs protobuf`
++	$(CXX) $(CXXFLAGS) $(LDFLAGS) ../src/google/protobuf/.libs/timestamp.pb.o $(PROTOBUF) add_person.cc addressbook.pb.cc -o add_person_cpp #$(CXX) -std=c++17 $(PROTOBUF) add_person.cc addressbook.pb.cc -o add_person_cpp
  
  list_people_cpp: list_people.cc protoc_middleman
  	pkg-config --cflags protobuf  # fails if protobuf is not installed
--	c++ -std=c++11 list_people.cc addressbook.pb.cc -o list_people_cpp `pkg-config --cflags --libs protobuf`
-+	$(CXX) $(CXXFLAGS) $(LDFLAGS) ../src/google/protobuf/.libs/timestamp.pb.o $(PROTOBUF) list_people.cc addressbook.pb.cc -o list_people_cpp
+-	c++ -std=c++14 list_people.cc addressbook.pb.cc -o list_people_cpp `pkg-config --cflags --libs protobuf`
++	$(CXX) $(CXXFLAGS) $(LDFLAGS) ../src/google/protobuf/.libs/timestamp.pb.o $(PROTOBUF) list_people.cc addressbook.pb.cc -o list_people_cpp #$(CXX) -std=c++17 $(PROTOBUF) list_people.cc addressbook.pb.cc -o list_people_cpp
  
  add_person_dart: add_person.dart protoc_middleman_dart
  
+--
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.21.12.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.21.12.bb
deleted file mode 100644
index d95e1c2..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.21.12.bb
+++ /dev/null
@@ -1,106 +0,0 @@
-SUMMARY = "Protocol Buffers - structured data serialisation mechanism"
-DESCRIPTION = "Protocol Buffers are a way of encoding structured data in an \
-efficient yet extensible format. Google uses Protocol Buffers for almost \
-all of its internal RPC protocols and file formats."
-HOMEPAGE = "https://github.com/google/protobuf"
-SECTION = "console/tools"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b"
-
-DEPENDS = "zlib"
-DEPENDS:append:class-target = " protobuf-native"
-
-SRCREV = "f0dc78d7e6e331b8c6bb2d5283e06aa26883ca7c"
-
-SRC_URI = "git://github.com/protocolbuffers/protobuf.git;branch=21.x;protocol=https \
-           file://run-ptest \
-           file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \
-           file://0001-Fix-linking-error-with-ld-gold.patch \
-           "
-SRC_URI:append:mips:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch "
-SRC_URI:append:mipsel:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch "
-
-S = "${WORKDIR}/git"
-
-inherit cmake pkgconfig ptest
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG:class-native ?= "compiler"
-PACKAGECONFIG:class-nativesdk ?= "compiler"
-PACKAGECONFIG[python] = ",,"
-PACKAGECONFIG[compiler] = "-Dprotobuf_BUILD_PROTOC_BINARIES=ON,-Dprotobuf_BUILD_PROTOC_BINARIES=OFF"
-
-EXTRA_OECMAKE += "\
-    -Dprotobuf_BUILD_SHARED_LIBS=ON \
-    -Dprotobuf_BUILD_LIBPROTOC=ON \
-    -Dprotobuf_BUILD_TESTS=OFF \
-    -Dprotobuf_BUILD_EXAMPLES=OFF \
-"
-
-TEST_SRC_DIR = "examples"
-LANG_SUPPORT = "cpp ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python', '', d)}"
-
-do_compile_ptest() {
-	mkdir -p "${B}/${TEST_SRC_DIR}"
-
-	# Add the location of the cross-compiled header and library files
-	# which haven't been installed yet.
-	cp "${B}/protobuf.pc" "${B}/${TEST_SRC_DIR}/protobuf.pc"
-	cp ${S}/${TEST_SRC_DIR}/*.cc "${B}/${TEST_SRC_DIR}/"
-	cp ${S}/${TEST_SRC_DIR}/*.proto "${B}/${TEST_SRC_DIR}/"
-	cp ${S}/${TEST_SRC_DIR}/*.py "${B}/${TEST_SRC_DIR}/"
-	cp ${S}/${TEST_SRC_DIR}/Makefile "${B}/${TEST_SRC_DIR}/"
-	sed -e 's|libdir=|libdir=${PKG_CONFIG_SYSROOT_DIR}|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
-	sed -e 's|Cflags:|Cflags: -I${S}/src|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
-	sed -e 's|Libs:|Libs: -L${B}|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
-	# Until out-of-tree build of examples is supported, we have to use this approach
-	sed -e 's|../src/google/protobuf/.libs/timestamp.pb.o|${B}/CMakeFiles/libprotobuf.dir/src/google/protobuf/timestamp.pb.cc.o|' -i "${B}/${TEST_SRC_DIR}/Makefile"
-	export PKG_CONFIG_PATH="${B}/${TEST_SRC_DIR}"
-
-	# Save the pkgcfg sysroot variable, and update it to nothing so
-	# that it doesn't append the sysroot to the beginning of paths.
-	# The header and library files aren't installed to the target
-	# system yet.  So the absolute paths were specified above.
-	save_pkg_config_sysroot_dir=$PKG_CONFIG_SYSROOT_DIR
-	export PKG_CONFIG_SYSROOT_DIR=
-
-	# Compile the tests
-	for lang in ${LANG_SUPPORT}; do
-		oe_runmake -C "${B}/${TEST_SRC_DIR}" ${lang}
-	done
-
-	# Restore the pkgconfig sysroot variable
-	export PKG_CONFIG_SYSROOT_DIR=$save_pkg_config_sysroot_dir
-}
-
-do_install_ptest() {
-	local olddir=`pwd`
-
-	cd "${S}/${TEST_SRC_DIR}"
-	install -d "${D}/${PTEST_PATH}"
-	for i in add_person* list_people*; do
-		if [ -x "$i" ]; then
-			install "$i" "${D}/${PTEST_PATH}"
-		fi
-	done
-	cp "${B}/${TEST_SRC_DIR}/addressbook_pb2.py" "${D}/${PTEST_PATH}"
-	cd "$olddir"
-}
-
-PACKAGE_BEFORE_PN = "${PN}-compiler ${PN}-lite"
-
-FILES:${PN}-compiler = "${bindir} ${libdir}/libprotoc${SOLIBS}"
-FILES:${PN}-lite = "${libdir}/libprotobuf-lite${SOLIBS}"
-
-RDEPENDS:${PN}-compiler = "${PN}"
-RDEPENDS:${PN}-dev += "${PN}-compiler"
-RDEPENDS:${PN}-ptest = "bash ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-protobuf', '', d)}"
-
-MIPS_INSTRUCTION_SET = "mips"
-
-BBCLASSEXTEND = "native nativesdk"
-
-LDFLAGS:append:arm = " -latomic"
-LDFLAGS:append:mips = " -latomic"
-LDFLAGS:append:powerpc = " -latomic"
-LDFLAGS:append:mipsel = " -latomic"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
new file mode 100644
index 0000000..06d73d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
@@ -0,0 +1,118 @@
+SUMMARY = "Protocol Buffers - structured data serialisation mechanism"
+DESCRIPTION = "Protocol Buffers are a way of encoding structured data in an \
+efficient yet extensible format. Google uses Protocol Buffers for almost \
+all of its internal RPC protocols and file formats."
+HOMEPAGE = "https://github.com/google/protobuf"
+SECTION = "console/tools"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b"
+
+DEPENDS = "zlib abseil-cpp"
+DEPENDS:append:class-target = " protobuf-native"
+
+SRCREV = "2c5fa078d8e86e5f4bd34e6f4c9ea9e8d7d4d44a"
+
+SRC_URI = "gitsm://github.com/protocolbuffers/protobuf.git;branch=23.x;protocol=https \
+           file://run-ptest \
+           file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \
+           "
+SRC_URI:append:mips:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch "
+SRC_URI:append:mipsel:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch "
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig ptest
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG:class-native ?= "compiler"
+PACKAGECONFIG:class-nativesdk ?= "compiler"
+PACKAGECONFIG[python] = ",,"
+PACKAGECONFIG[compiler] = "-Dprotobuf_BUILD_PROTOC_BINARIES=ON,-Dprotobuf_BUILD_PROTOC_BINARIES=OFF"
+
+EXTRA_OECMAKE += "\
+    -Dprotobuf_BUILD_SHARED_LIBS=ON \
+    -Dprotobuf_BUILD_LIBPROTOC=ON \
+    -Dprotobuf_BUILD_TESTS=OFF \
+    -Dprotobuf_BUILD_EXAMPLES=OFF \
+    -Dprotobuf_ABSL_PROVIDER="package" \
+"
+
+TEST_SRC_DIR = "examples"
+LANG_SUPPORT = "cpp ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python', '', d)}"
+
+do_compile_ptest() {
+	mkdir -p "${B}/${TEST_SRC_DIR}"
+
+	# Add the location of the cross-compiled header and library files
+	# which haven't been installed yet.
+	cp "${B}/protobuf.pc" "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	cp ${S}/${TEST_SRC_DIR}/*.cc "${B}/${TEST_SRC_DIR}/"
+	cp ${S}/${TEST_SRC_DIR}/*.proto "${B}/${TEST_SRC_DIR}/"
+	cp ${S}/${TEST_SRC_DIR}/*.py "${B}/${TEST_SRC_DIR}/"
+	cp ${S}/${TEST_SRC_DIR}/Makefile "${B}/${TEST_SRC_DIR}/"
+	# Adapt protobuf.pc
+	sed -e 's|libdir=|libdir=${PKG_CONFIG_SYSROOT_DIR}|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Cflags:|Cflags: -I${S}/src |' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Cflags:|Cflags: -I${WORKDIR}/recipe-sysroot${includedir} |' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Libs:|Libs: -L${B}|' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Libs:|Libs: -L${WORKDIR}/recipe-sysroot/usr/lib |' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Libs:|Libs: -labsl_log_internal_check_op |' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	sed -e 's|Libs:|Libs: -labsl_log_internal_message |' -i "${B}/${TEST_SRC_DIR}/protobuf.pc"
+	# Adapt uf8_range.pc
+	cp "${B}/third_party/utf8_range/utf8_range.pc" "${B}/${TEST_SRC_DIR}/utf8_range.pc"
+	sed -e 's|libdir=|libdir=${PKG_CONFIG_SYSROOT_DIR}|' -i "${B}/${TEST_SRC_DIR}/utf8_range.pc"
+	sed -e 's|Libs:|Libs= -L${B}/third_party/utf8_range |' -i "${B}/${TEST_SRC_DIR}/utf8_range.pc"
+	# Until out-of-tree build of examples is supported, we have to use this approach
+	sed -e 's|../src/google/protobuf/.libs/timestamp.pb.o|${B}/CMakeFiles/libprotobuf.dir/src/google/protobuf/timestamp.pb.cc.o|' -i "${B}/${TEST_SRC_DIR}/Makefile"
+	export PKG_CONFIG_PATH="${B}/${TEST_SRC_DIR}"
+
+	# Save the pkgcfg sysroot variable, and update it to nothing so
+	# that it doesn't append the sysroot to the beginning of paths.
+	# The header and library files aren't installed to the target
+	# system yet.  So the absolute paths were specified above.
+	save_pkg_config_sysroot_dir=$PKG_CONFIG_SYSROOT_DIR
+	export PKG_CONFIG_SYSROOT_DIR=
+
+	# Compile the tests
+	for lang in ${LANG_SUPPORT}; do
+		oe_runmake -C "${B}/${TEST_SRC_DIR}" ${lang}
+	done
+
+	# Restore the pkgconfig sysroot variable
+	export PKG_CONFIG_SYSROOT_DIR=$save_pkg_config_sysroot_dir
+}
+
+do_install_ptest() {
+	local olddir=`pwd`
+
+	cd "${S}/${TEST_SRC_DIR}"
+	install -d "${D}/${PTEST_PATH}"
+	for i in add_person* list_people*; do
+		if [ -x "$i" ]; then
+			install "$i" "${D}/${PTEST_PATH}"
+		fi
+	done
+	cp "${B}/${TEST_SRC_DIR}/addressbook_pb2.py" "${D}/${PTEST_PATH}"
+	cd "$olddir"
+}
+
+PACKAGE_BEFORE_PN = "${PN}-compiler ${PN}-lite"
+
+FILES:${PN}-compiler = "${bindir} ${libdir}/libprotoc${SOLIBS}"
+FILES:${PN}-lite = "${libdir}/libprotobuf-lite${SOLIBS}"
+
+# CMake requires binaries to exist in sysroot, even if they have wrong architecture.
+SYSROOT_DIRS += "${bindir}"
+
+RDEPENDS:${PN}-compiler = "${PN}"
+RDEPENDS:${PN}-dev += "${PN}-compiler"
+RDEPENDS:${PN}-ptest = "bash ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-protobuf', '', d)}"
+
+MIPS_INSTRUCTION_SET = "mips"
+
+BBCLASSEXTEND = "native nativesdk"
+
+LDFLAGS:append:arm = " -latomic"
+LDFLAGS:append:mips = " -latomic"
+LDFLAGS:append:powerpc = " -latomic"
+LDFLAGS:append:mipsel = " -latomic"
diff --git a/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3/0001-cmake-fix-when-cross-compiling.patch b/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3/0001-cmake-fix-when-cross-compiling.patch
new file mode 100644
index 0000000..ce12d42
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3/0001-cmake-fix-when-cross-compiling.patch
@@ -0,0 +1,68 @@
+From cb79329010d73e36ce64830914005f1c17f8f53c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= <peron.clem@gmail.com>
+Date: Sat, 23 Sep 2023 11:32:18 +0200
+Subject: [PATCH] cmake: fix when cross compiling
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In order to generate protobuf files CMake need to use the protoc
+and grpc-cpp-plugin compiled for the host architecture.
+
+Unfortunately, the protoc and grpc-cpp-plugin in the gRPC CMake
+configuration file are the one for the target architecture.
+
+Fix this by properly finding the correct executable when
+CMake is cross compiling.
+
+Signed-off-by: Clément Péron <peron.clem@gmail.com>
+---
+Upstream-Status: Pending
+
+ CMakeLists.txt | 28 ++++++++++++++++++++++++++--
+ 1 file changed, 26 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5aa1310..80ebad2 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -120,10 +120,34 @@ if(Protobuf_PROTOC_EXECUTABLE)
+     endif()
+ endif()
+ 
++# When cross compiling we look for the native protoc compiler
++# overwrite protobuf::protoc with the proper protoc
++if(CMAKE_CROSSCOMPILING)
++    find_program(Protobuf_PROTOC_EXECUTABLE REQUIRED NAMES protoc)
++    if(NOT TARGET protobuf::protoc)
++        add_executable(protobuf::protoc IMPORTED)
++    endif()
++    set_target_properties(protobuf::protoc PROPERTIES
++        IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
++endif()
++
+ find_package(gRPC QUIET)
+-if(gRPC_FOUND AND TARGET gRPC::grpc AND TARGET gRPC::grpc_cpp_plugin)
++if(gRPC_FOUND AND TARGET gRPC::grpc)
++    # When cross compiling we look for the native grpc_cpp_plugin
++    if(CMAKE_CROSSCOMPILING)
++        find_program(GRPC_CPP_PLUGIN REQUIRED NAMES grpc_cpp_plugin)
++        if(NOT TARGET gRPC::grpc_cpp_plugin)
++            add_executable(gRPC::grpc_cpp_plugin IMPORTED)
++        endif()
++        set_target_properties(gRPC::grpc_cpp_plugin PROPERTIES
++                IMPORTED_LOCATION "${GRPC_CPP_PLUGIN}")
++    elseif(TARGET gRPC::grpc_cpp_plugin)
++        get_target_property(GRPC_CPP_PLUGIN gRPC::grpc_cpp_plugin LOCATION)
++    else()
++        message(FATAL_ERROR "Found gRPC but no gRPC CPP plugin defined")
++    endif()
++
+     set(GRPC_LIBRARIES gRPC::gpr gRPC::grpc gRPC::grpc++)
+-    get_target_property(GRPC_CPP_PLUGIN gRPC::grpc_cpp_plugin LOCATION)
+     get_target_property(GRPC_INCLUDE_DIR gRPC::grpc INTERFACE_INCLUDE_DIRECTORIES)
+ else()
+     include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGRPC.cmake)
+-- 
+2.39.3 (Apple Git-145)
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.14.3.bb b/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.14.3.bb
deleted file mode 100644
index 7174402..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.14.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "C++ API for etcd's v3 client API"
-HOMEPAGE = "https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eae7da6a2cd1788a5cf8a9f838cf6450"
-
-SRC_URI += "git://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git;branch=master;protocol=https"
-SRCREV = "5e2884f36276e44f683fa02fca39807716fdbc16"
-
-inherit cmake
-
-DEPENDS += "grpc protobuf cpprest grpc-native protobuf-native"
-
-S = "${WORKDIR}/git"
-
-EXTRA_OECONF += "-DCPPREST_EXCLUDE_WEBSOCKETS=ON"
-
-INSANE_SKIP:${PN}:append = " ldflags"
-SOLIBS = ".so"
-FILES_SOLIBSDEV = ""
diff --git a/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.15.3.bb b/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.15.3.bb
new file mode 100644
index 0000000..e8299ba
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/etcd/etcd-cpp-apiv3_0.15.3.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "C++ API for etcd's v3 client API"
+HOMEPAGE = "https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eae7da6a2cd1788a5cf8a9f838cf6450"
+
+SRC_URI = " \
+    git://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git;branch=master;protocol=https \
+    file://0001-cmake-fix-when-cross-compiling.patch \
+"
+
+SRCREV = "e31ac4d4caa55fa662e207150ba40f8151b7ad96"
+
+inherit cmake
+
+DEPENDS += "grpc protobuf cpprest grpc-native protobuf-native"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF += "-DCPPREST_EXCLUDE_WEBSOCKETS=ON"
+
+INSANE_SKIP:${PN}:append = " ldflags"
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
diff --git a/meta-openembedded/meta-oe/recipes-extended/hwloc/files/CVE-2022-47022.patch b/meta-openembedded/meta-oe/recipes-extended/hwloc/files/CVE-2022-47022.patch
deleted file mode 100644
index c981b68..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hwloc/files/CVE-2022-47022.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From ac1f8db9a0790d2bf153711ff4cbf6101f89aace Mon Sep 17 00:00:00 2001
-From: Brice Goglin <Brice.Goglin@inria.fr>
-Date: Thu, 31 Aug 2023 09:28:34 +0000
-Subject: [PATCH] linux: handle glibc cpuset allocation failures
-
-Closes #544
-CVE-2022-47022
-
-Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
-
-CVE: CVE-2022-47022
-
-Upstream-Status: Backport[https://github.com/open-mpi/hwloc/commit/ac1f8db9a0790d2bf153711ff4cbf6101f89aace]
-
-Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
----
- hwloc/topology-linux.c | 15 ++++++++++++++-
- 1 file changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/hwloc/topology-linux.c b/hwloc/topology-linux.c
-index c7b63d2..fd6745e 100644
---- a/hwloc/topology-linux.c
-+++ b/hwloc/topology-linux.c
-@@ -870,6 +870,8 @@ hwloc_linux_set_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
-
-   setsize = CPU_ALLOC_SIZE(last+1);
-   plinux_set = CPU_ALLOC(last+1);
-+  if (!plinux_set)
-+    return -1;
-
-   CPU_ZERO_S(setsize, plinux_set);
-   hwloc_bitmap_foreach_begin(cpu, hwloc_set)
-@@ -950,7 +952,10 @@ hwloc_linux_find_kernel_nr_cpus(hwloc_topology_t topology)
-   while (1) {
-     cpu_set_t *set = CPU_ALLOC(nr_cpus);
-     size_t setsize = CPU_ALLOC_SIZE(nr_cpus);
--    int err = sched_getaffinity(0, setsize, set); /* always works, unless setsize is too small */
-+    int err;
-+    if (!set)
-+      return -1; /* caller will return an error, and we'll try again later */
-+    err = sched_getaffinity(0, setsize, set); /* always works, unless setsize is too small */
-     CPU_FREE(set);
-     nr_cpus = setsize * 8; /* that's the value that was actually tested */
-     if (!err)
-@@ -978,8 +983,12 @@ hwloc_linux_get_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
-
-   /* find the kernel nr_cpus so as to use a large enough cpu_set size */
-   kernel_nr_cpus = hwloc_linux_find_kernel_nr_cpus(topology);
-+  if (kernel_nr_cpus < 0)
-+    return -1;
-   setsize = CPU_ALLOC_SIZE(kernel_nr_cpus);
-   plinux_set = CPU_ALLOC(kernel_nr_cpus);
-+  if (!plinux_set)
-+    return -1;
-
-   err = sched_getaffinity(tid, setsize, plinux_set);
-
-@@ -1333,6 +1342,8 @@ hwloc_linux_set_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_c
-
-      setsize = CPU_ALLOC_SIZE(last+1);
-      plinux_set = CPU_ALLOC(last+1);
-+     if (!plinux_set)
-+       return -1;
-
-      CPU_ZERO_S(setsize, plinux_set);
-      hwloc_bitmap_foreach_begin(cpu, hwloc_set)
-@@ -1424,6 +1435,8 @@ hwloc_linux_get_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_b
-
-      setsize = CPU_ALLOC_SIZE(last+1);
-      plinux_set = CPU_ALLOC(last+1);
-+     if (!plinux_set)
-+       return -1;
-
-      err = pthread_getaffinity_np(tid, setsize, plinux_set);
-      if (err) {
---
-2.35.5
diff --git a/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.2.bb b/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.2.bb
deleted file mode 100644
index bcb615f..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.2.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Portable Hardware Locality (hwloc) software package"
-DESCRIPTION = "The Portable Hardware Locality (hwloc) software package \
- provides a portable abstraction of the hierarchical topology of modern \
- architectures."
-HOMEPAGE = "https://www.open-mpi.org/software/hwloc/"
-SECTION = "base"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=79179bb373cd55cbd834463a514fb714"
-
-SRC_URI = "https://www.open-mpi.org/software/${BPN}/v2.9/downloads/${BP}.tar.bz2 \
-           file://CVE-2022-47022.patch \
-          "
-SRC_URI[sha256sum] = "0a87fdf677f8b00b567d229b6320bf6b25c693edaa43e0b85268d999d6b060cf"
-UPSTREAM_CHECK_URI = "https://www.open-mpi.org/software/hwloc/v2.9/"
-
-inherit autotools bash-completion pkgconfig
-
-DEPENDS += "ncurses udev zlib"
-DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'libselinux', '', d)}"
-
-PACKAGECONFIG ?= "pci libxml2 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
-
-PACKAGECONFIG[libxml2] = "--enable-libxml2,--disable-libxml2,libxml2,libxml2"
-PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 cairo,cairo"
-PACKAGECONFIG[pci] = "--enable-pci,--disable-pci,libpciaccess,libpciaccess"
-
-# Split hwloc library into separate subpackage
-PACKAGES:prepend = " libhwloc "
-FILES:libhwloc += "${libdir}/libhwloc.so.*"
-RDEPENDS:${PN} += "libhwloc (= ${EXTENDPKGV})"
diff --git a/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.3.bb b/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.3.bb
new file mode 100644
index 0000000..d72c5f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hwloc/hwloc_2.9.3.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Portable Hardware Locality (hwloc) software package"
+DESCRIPTION = "The Portable Hardware Locality (hwloc) software package \
+ provides a portable abstraction of the hierarchical topology of modern \
+ architectures."
+HOMEPAGE = "https://www.open-mpi.org/software/hwloc/"
+SECTION = "base"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=79179bb373cd55cbd834463a514fb714"
+
+SRC_URI = "https://www.open-mpi.org/software/${BPN}/v2.9/downloads/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "5c4062ce556f6d3451fc177ffb8673a2120f81df6835dea6a21a90fbdfff0dec"
+UPSTREAM_CHECK_URI = "https://www.open-mpi.org/software/hwloc/v2.9/"
+
+inherit autotools bash-completion pkgconfig
+
+DEPENDS += "ncurses udev zlib"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'libselinux', '', d)}"
+
+PACKAGECONFIG ?= "pci libxml2 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
+
+PACKAGECONFIG[libxml2] = "--enable-libxml2,--disable-libxml2,libxml2,libxml2"
+PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 cairo,cairo"
+PACKAGECONFIG[pci] = "--enable-pci,--disable-pci,libpciaccess,libpciaccess"
+
+# Split hwloc library into separate subpackage
+PACKAGES:prepend = " libhwloc "
+FILES:libhwloc += "${libdir}/libhwloc.so.*"
+RDEPENDS:${PN} += "libhwloc (= ${EXTENDPKGV})"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.28.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.28.bb
deleted file mode 100644
index 2e7412e..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.28.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION = "libblockdev is a C library supporting GObject introspection for manipulation of \
-block devices. It has a plugin-based architecture where each technology (like \
-LVM, Btrfs, MD RAID, Swap,...) is implemented in a separate plugin, possibly \
-with multiple implementations (e.g. using LVM CLI or the new LVM DBus API)."
-HOMEPAGE = "http://rhinstaller.github.io/libblockdev/"
-LICENSE = "LGPL-2.0-or-later"
-SECTION = "devel/lib"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
-
-inherit autotools gobject-introspection pkgconfig lib_package
-
-DEPENDS = "autoconf-archive-native glib-2.0 kmod udev"
-
-SRC_URI = "git://github.com/storaged-project/libblockdev;branch=2.x-branch;protocol=https \
-"
-SRCREV = "1412dc51c8f76bf8d9a6008228737db4a9a26d69"
-S = "${WORKDIR}/git"
-
-FILES:${PN} += "${libdir}/python2.7/dist-packages ${libdir}/python3.*/site-packages"
-
-PACKAGECONFIG ??= "python3 lvm dm kmod parted fs escrow btrfs crypto mdraid kbd mpath nvdimm tools"
-PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
-PACKAGECONFIG[python2] = "--with-python2, --without-python2,,python"
-PACKAGECONFIG[lvm] = "--with-lvm, --without-lvm, multipath-tools, lvm2"
-PACKAGECONFIG[lvm-dbus] = "--with-lvm_dbus, --without-lvm_dbus, multipath-tools, lvm2"
-PACKAGECONFIG[dm] = "--with-dm, --without-dm, multipath-tools, lvm2"
-PACKAGECONFIG[dmraid] = "--with-dmraid, --without-dmraid"
-PACKAGECONFIG[kmod] = "--with-kbd, --without-kbd,libbytesize"
-PACKAGECONFIG[parted] = "--with-part, --without-part, parted"
-PACKAGECONFIG[fs] = "--with-fs, --without-fs, util-linux"
-PACKAGECONFIG[doc] = "--with-gtk-doc, --without-gtk-doc, gtk-doc-native"
-PACKAGECONFIG[nvdimm] = "--with-nvdimm, --without-nvdimm, ndctl util-linux"
-PACKAGECONFIG[vdo] = "--with-vdo, --without-vdo,libbytesize"
-PACKAGECONFIG[escrow] = "--with-escrow, --without-escrow, nss volume-key"
-PACKAGECONFIG[btrfs] = "--with-btrfs,--without-btrfs,libbytesize btrfs-tools"
-PACKAGECONFIG[crypto] = "--with-crypto,--without-crypto,cryptsetup nss volume-key"
-PACKAGECONFIG[mdraid] = "--with-mdraid,--without-mdraid,libbytesize"
-PACKAGECONFIG[kbd] = "--with-kbd,--without-kbd,libbytesize"
-PACKAGECONFIG[mpath] = "--with-mpath,--without-mpath, multipath-tools, lvm2"
-PACKAGECONFIG[tools] = "--with-tools,--without-tools,libbytesize libdevmapper"
-
-export GIR_EXTRA_LIBS_PATH="${B}/src/utils/.libs"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb
new file mode 100644
index 0000000..670bebd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "libblockdev is a C library supporting GObject introspection for manipulation of \
+block devices. It has a plugin-based architecture where each technology (like \
+LVM, Btrfs, MD RAID, Swap,...) is implemented in a separate plugin, possibly \
+with multiple implementations (e.g. using LVM CLI or the new LVM DBus API)."
+HOMEPAGE = "http://rhinstaller.github.io/libblockdev/"
+LICENSE = "LGPL-2.0-or-later"
+SECTION = "devel/lib"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
+
+inherit autotools gobject-introspection pkgconfig lib_package
+
+DEPENDS = "autoconf-archive-native glib-2.0 kmod udev libnvme"
+
+SRC_URI = "git://github.com/storaged-project/libblockdev;branch=master;protocol=https \
+"
+SRCREV = "38378931d285b91333ff2e2a391b1fe91072f9bb"
+S = "${WORKDIR}/git"
+
+FILES:${PN} += "${libdir}/python3.*/site-packages"
+
+PACKAGECONFIG ??= "python3 lvm lvm-dbus dm parted fs escrow btrfs crypto mdraid mpath nvdimm tools"
+PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
+PACKAGECONFIG[lvm] = "--with-lvm, --without-lvm, multipath-tools, lvm2"
+PACKAGECONFIG[lvm-dbus] = "--with-lvm_dbus, --without-lvm_dbus, multipath-tools, lvm2"
+PACKAGECONFIG[dm] = "--with-dm, --without-dm, multipath-tools, lvm2"
+PACKAGECONFIG[parted] = "--with-part, --without-part, parted"
+PACKAGECONFIG[fs] = "--with-fs, --without-fs, util-linux"
+PACKAGECONFIG[doc] = "--with-gtk-doc, --without-gtk-doc, gtk-doc-native"
+PACKAGECONFIG[nvdimm] = "--with-nvdimm, --without-nvdimm, ndctl util-linux"
+PACKAGECONFIG[escrow] = "--with-escrow, --without-escrow, nss volume-key"
+PACKAGECONFIG[btrfs] = "--with-btrfs,--without-btrfs,libbytesize btrfs-tools"
+PACKAGECONFIG[crypto] = "--with-crypto,--without-crypto,cryptsetup nss volume-key"
+PACKAGECONFIG[mdraid] = "--with-mdraid,--without-mdraid,libbytesize"
+PACKAGECONFIG[mpath] = "--with-mpath,--without-mpath, multipath-tools, lvm2"
+PACKAGECONFIG[tools] = "--with-tools,--without-tools,libbytesize libdevmapper"
+
+export GIR_EXTRA_LIBS_PATH="${B}/src/utils/.libs"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.18.bb b/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.18.bb
deleted file mode 100644
index b1c3371..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.18.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "libdeflate is a library for fast, whole-buffer DEFLATE-based compression and decompression."
-HOMEPAGE = "https://github.com/ebiggers/libdeflate"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=7b6977026437092191e9da699ed9f780"
-
-DEPENDS += "gzip zlib"
-
-SRC_URI = "git://github.com/ebiggers/libdeflate.git;protocol=https;branch=master"
-
-S = "${WORKDIR}/git"
-SRCREV = "495fee110ebb48a5eb63b75fd67e42b2955871e2"
-
-inherit cmake pkgconfig
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.19.bb b/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.19.bb
new file mode 100644
index 0000000..11cdb82
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libdeflate/libdeflate_1.19.bb
@@ -0,0 +1,15 @@
+SUMMARY = "libdeflate is a library for fast, whole-buffer DEFLATE-based compression and decompression."
+HOMEPAGE = "https://github.com/ebiggers/libdeflate"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=7b6977026437092191e9da699ed9f780"
+
+DEPENDS += "gzip zlib"
+
+SRC_URI = "git://github.com/ebiggers/libdeflate.git;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+SRCREV = "dd12ff2b36d603dbb7fa8838fe7e7176fcbd4f6f"
+
+inherit cmake pkgconfig
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-BundledOSSPUUID.cmake-Pass-CFLAGS-to-compiler.patch b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-BundledOSSPUUID.cmake-Pass-CFLAGS-to-compiler.patch
new file mode 100644
index 0000000..ceb8ec3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-BundledOSSPUUID.cmake-Pass-CFLAGS-to-compiler.patch
@@ -0,0 +1,35 @@
+From ab031c2b1f8c03e23a8dc8a95c9c9e9b8ce397b2 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 15 Sep 2023 11:32:11 +0800
+Subject: [PATCH] BundledOSSPUUID.cmake: Pass CFLAGS to compiler
+
+Make sure -fdebug-prefix-map options are passed to compiler to fix the
+below warning:
+  WARNING: minifi-cpp-0.7.0-r0 do_package_qa: QA Issue: File /usr/bin/.debug/minificontroller in package minifi-cpp-dbg contains reference to TMPDIR
+File /usr/bin/.debug/minifi in package minifi-cpp-dbg contains reference to TMPDIR [buildpaths]
+
+Upsteam-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+Upstream-Status: Pending
+
+ cmake/BundledOSSPUUID.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/BundledOSSPUUID.cmake b/cmake/BundledOSSPUUID.cmake
+index 0cf4bac0..ec57ef51 100644
+--- a/cmake/BundledOSSPUUID.cmake
++++ b/cmake/BundledOSSPUUID.cmake
+@@ -37,7 +37,7 @@ function(use_bundled_osspuuid SOURCE_DIR BINARY_DIR)
+     ENDFOREACH(BYPRODUCT)
+ 
+     # Build project
+-    set(CONFIGURE_COMMAND ac_cv_va_copy=C99 ./configure CFLAGS=-fPIC CXXFLAGS=-fPIC --host=${HOST_SYS}
++    set(CONFIGURE_COMMAND ac_cv_va_copy=C99 ./configure CXXFLAGS=-fPIC --host=${HOST_SYS}
+         --with-cxx --without-perl --without-php --without-pgsql
+         --prefix=${BINARY_DIR}/thirdparty/ossp-uuid-install)
+     string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type)
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-CMakeLists.txt-Pass-the-OPENSSLDIR.patch b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-CMakeLists.txt-Pass-the-OPENSSLDIR.patch
new file mode 100644
index 0000000..158fed5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-CMakeLists.txt-Pass-the-OPENSSLDIR.patch
@@ -0,0 +1,31 @@
+From 0c5735a0a02e15c3eae94d25fb8756285d121ddb Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 15 Sep 2023 10:59:05 +0800
+Subject: [PATCH] CMakeLists.txt: Pass the OPENSSLDIR
+
+Fixes:
+  WARNING: minifi-cpp-0.7.0-r0 do_package_qa: QA Issue: File /usr/bin/minificontroller in package minifi-cpp contains reference to TMPDIR
+  File /usr/bin/minifi in package minifi-cpp contains reference to TMPDIR [buildpaths]
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 215a4ef4..6fe8101f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -75,6 +75,7 @@ set(PASSTHROUGH_CMAKE_ARGS -DANDROID_ABI=${ANDROID_ABI}
+                            -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=${CMAKE_FIND_ROOT_PATH_MODE_LIBRARY}
+                            -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=${CMAKE_FIND_ROOT_PATH_MODE_INCLUDE}
+                            -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
++                           -DOPENSSLDIR=${OPENSSLDIR}
+ 						   ${OPENSSL_PASSTHROUGH}
+                            -G${CMAKE_GENERATOR})
+ 
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-Fix-the-constness-issues-around-autovector-iterator_.patch b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-Fix-the-constness-issues-around-autovector-iterator_.patch
index acb96f4..cd837d8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-Fix-the-constness-issues-around-autovector-iterator_.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/files/0001-Fix-the-constness-issues-around-autovector-iterator_.patch
@@ -19,6 +19,8 @@
 
 fbshipit-source-id: 04e82d73bc0c67fb0ded018383af8dfc332050cc
 ---
+Upstream-Status: Pending
+
  thirdparty/rocksdb/util/autovector.h | 15 ++++-----------
  1 file changed, 4 insertions(+), 11 deletions(-)
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
index 0986fde..b75a336 100644
--- a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
@@ -35,6 +35,8 @@
             file://0001-Do-not-use-LFS64-functions-on-linux-musl.patch \
             file://0001-Fix-the-constness-issues-around-autovector-iterator_.patch \
             file://0002-Fix-build-with-clang-17.patch \
+            file://0001-CMakeLists.txt-Pass-the-OPENSSLDIR.patch \
+            file://0001-BundledOSSPUUID.cmake-Pass-CFLAGS-to-compiler.patch \
             file://minifi.service \
             file://systemd-volatile.conf \
             file://sysvinit-volatile.conf \
@@ -65,7 +67,10 @@
     -DDISABLE_PYTHON_SCRIPTING=ON \
     -DFLEX_TARGET_ARG_COMPILE_FLAGS='--noline' \
     -DBISON_TARGET_ARG_COMPILE_FLAGS='--no-lines --file-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}' \
+    -DOPENSSLDIR=${sysconfdir}/libressl \
     "
+
+CFLAGS:append = " -fPIC"
 EXTRA_OECMAKE:append:toolchain-clang = " -DCMAKE_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}llvm-ranlib"
 LDFLAGS:append:toolchain-clang = " -fuse-ld=lld"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.15.1.bb b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.15.1.bb
new file mode 100644
index 0000000..3a7b51c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.15.1.bb
@@ -0,0 +1,82 @@
+SUMMARY = "SpiderMonkey is Mozilla's JavaScript engine written in C/C++"
+HOMEPAGE = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc9b6ecd19a14a54a628edaaf23733bf"
+
+SRC_URI = "https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz \
+           file://0001-Cargo.toml-do-not-abort-on-panic.patch \
+           file://0002-moz.configure-do-not-look-for-llvm-objdump.patch \
+           file://0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch \
+           file://0004-use-asm-sgidefs.h.patch \
+           file://fix-musl-build.patch \
+           file://0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch \
+           file://riscv32.patch \
+           file://0001-util.configure-fix-one-occasionally-reproduced-confi.patch \
+           file://0001-rewrite-cargo-host-linker-in-python3.patch  \
+           file://musl-disable-stackwalk.patch \
+           file://0001-add-arm-to-list-of-mozinline.patch \
+           "
+SRC_URI[sha256sum] = "09194fb765953bc6979a35aa8834118c453b9d6060bf1ec4e134551bad740113"
+
+S = "${WORKDIR}/firefox-${PV}"
+
+inherit pkgconfig perlnative python3native rust
+
+DEPENDS += "zlib cargo-native python3 icu"
+DEPENDS:remove:mipsarch = "icu"
+DEPENDS:remove:powerpc:toolchain-clang = "icu"
+
+B = "${WORKDIR}/build"
+
+export PYTHONPATH = "${S}/build:${S}/third_party/python/PyYAML/lib3:${S}/testing/mozbase/mozfile:${S}/python/mozboot:${S}/third_party/python/distro:${S}/testing/mozbase/mozinfo:${S}/config:${S}/testing/mozbase/manifestparser:${S}/third_party/python/pytoml:${S}/testing/mozbase/mozprocess:${S}/third_party/python/six:${S}/python/mozbuild:${S}/python/mozbuild/mozbuild:${S}/python/mach:${S}/third_party/python/jsmin:${S}/python/mozversioncontrol"
+
+export HOST_CC = "${BUILD_CC}"
+export HOST_CXX = "${BUILD_CXX}"
+export HOST_CFLAGS = "${BUILD_CFLAGS}"
+export HOST_CPPFLAGS = "${BUILD_CPPFLAGS}"
+export HOST_CXXFLAGS = "${BUILD_CXXFLAGS}"
+
+export AS = "${CC}"
+
+export RUSTFLAGS
+
+JIT ?= ""
+JIT:mipsarch = "--disable-jit"
+ICU ?= "--with-system-icu"
+ICU:mipsarch = ""
+ICU:powerpc:toolchain-clang = ""
+
+do_configure() {
+    cd ${B}
+    python3 ${S}/configure.py \
+        --enable-project=js \
+        --target=${RUST_HOST_SYS} \
+        --host=${BUILD_SYS} \
+        --prefix=${prefix} \
+        --libdir=${libdir} \
+        --disable-jemalloc \
+        --disable-strip \
+        ${JIT} \
+        ${ICU}
+}
+
+do_install() {
+    oe_runmake 'DESTDIR=${D}' install
+}
+
+inherit multilib_script multilib_header
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 1)}"
+MULTILIB_SCRIPTS += "${PN}-dev:${bindir}/js${MAJ_VER}-config"
+
+do_install:append() {
+    oe_multilib_header mozjs-${MAJ_VER}/js-config.h
+    sed -e 's@${STAGING_DIR_HOST}@@g' \
+        -i ${D}${bindir}/js${MAJ_VER}-config
+    rm -f ${D}${libdir}/libjs_static.ajs
+    # remove the build path
+    sed -i -e 's@${WORKDIR}@@g' `find ${B} -name Unified_c*.c*`
+}
+
+PACKAGES =+ "lib${BPN}"
+FILES:lib${BPN} += "${libdir}/lib*"
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.9.0.bb b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.9.0.bb
deleted file mode 100644
index e6ff379..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-102_102.9.0.bb
+++ /dev/null
@@ -1,79 +0,0 @@
-SUMMARY = "SpiderMonkey is Mozilla's JavaScript engine written in C/C++"
-HOMEPAGE = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey"
-LICENSE = "MPL-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=dc9b6ecd19a14a54a628edaaf23733bf"
-
-SRC_URI = "https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz \
-           file://0001-Cargo.toml-do-not-abort-on-panic.patch \
-           file://0002-moz.configure-do-not-look-for-llvm-objdump.patch \
-           file://0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch \
-           file://0004-use-asm-sgidefs.h.patch \
-           file://fix-musl-build.patch \
-           file://0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch \
-           file://riscv32.patch \
-           file://0001-util.configure-fix-one-occasionally-reproduced-confi.patch \
-           file://0001-rewrite-cargo-host-linker-in-python3.patch  \
-           file://musl-disable-stackwalk.patch \
-           file://0001-add-arm-to-list-of-mozinline.patch \
-           "
-SRC_URI[sha256sum] = "31b074623f09ca821a8a7dee0b3d2df1a45f1164264d31c26b4969a4d6a21dd1"
-
-S = "${WORKDIR}/firefox-${PV}"
-
-inherit pkgconfig perlnative python3native rust
-
-DEPENDS += "zlib cargo-native python3 icu"
-DEPENDS:remove:mipsarch = "icu"
-DEPENDS:remove:powerpc:toolchain-clang = "icu"
-
-B = "${WORKDIR}/build"
-
-export PYTHONPATH = "${S}/build:${S}/third_party/python/PyYAML/lib3:${S}/testing/mozbase/mozfile:${S}/python/mozboot:${S}/third_party/python/distro:${S}/testing/mozbase/mozinfo:${S}/config:${S}/testing/mozbase/manifestparser:${S}/third_party/python/pytoml:${S}/testing/mozbase/mozprocess:${S}/third_party/python/six:${S}/python/mozbuild:${S}/python/mozbuild/mozbuild:${S}/python/mach:${S}/third_party/python/jsmin:${S}/python/mozversioncontrol"
-
-export HOST_CC = "${BUILD_CC}"
-export HOST_CXX = "${BUILD_CXX}"
-export HOST_CFLAGS = "${BUILD_CFLAGS}"
-export HOST_CPPFLAGS = "${BUILD_CPPFLAGS}"
-export HOST_CXXFLAGS = "${BUILD_CXXFLAGS}"
-
-export AS = "${CC}"
-
-export RUSTFLAGS
-
-JIT ?= ""
-JIT:mipsarch = "--disable-jit"
-ICU ?= "--with-system-icu"
-ICU:mipsarch = ""
-ICU:powerpc:toolchain-clang = ""
-
-do_configure() {
-    cd ${B}
-    python3 ${S}/configure.py \
-        --enable-project=js \
-        --target=${RUST_HOST_SYS} \
-        --host=${BUILD_SYS} \
-        --prefix=${prefix} \
-        --libdir=${libdir} \
-        --disable-jemalloc \
-        --disable-strip \
-        ${JIT} \
-        ${ICU}
-}
-
-do_install() {
-    oe_runmake 'DESTDIR=${D}' install
-}
-
-inherit multilib_script multilib_header
-
-MULTILIB_SCRIPTS += " ${PN}-dev:${bindir}/js102-config"
-
-do_install:append() {
-    oe_multilib_header mozjs-102/js-config.h
-    sed -e 's@${STAGING_DIR_HOST}@@g' \
-        -i ${D}${bindir}/js102-config
-    rm -f ${D}${libdir}/libjs_static.ajs
-}
-
-PACKAGES =+ "lib${BPN}"
-FILES:lib${BPN} += "${libdir}/lib*"
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-Cargo.toml-do-not-abort-on-panic.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-Cargo.toml-do-not-abort-on-panic.patch
new file mode 100644
index 0000000..e8dfdea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-Cargo.toml-do-not-abort-on-panic.patch
@@ -0,0 +1,32 @@
+From f501f7c02df4f0ff5d5f100d9eeb74cd4d12ea3d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 1 Oct 2021 13:00:24 +0200
+Subject: [PATCH] Cargo.toml: do not abort on panic
+
+OE's rust is configured to unwind, and this setting clashes with it/
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ Cargo.toml | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Cargo.toml b/Cargo.toml
+index a2718b2f35..4e231c30e8 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -59,13 +59,11 @@ opt-level = 1
+ rpath = false
+ lto = false
+ debug-assertions = true
+-panic = "abort"
+ 
+ [profile.release]
+ opt-level = 2
+ rpath = false
+ debug-assertions = false
+-panic = "abort"
+ 
+ # Optimize build dependencies, because bindgen and proc macros / style
+ # compilation take more to run than to build otherwise.
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-add-arm-to-list-of-mozinline.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-add-arm-to-list-of-mozinline.patch
new file mode 100644
index 0000000..8318786
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-add-arm-to-list-of-mozinline.patch
@@ -0,0 +1,32 @@
+From c5cfb8aa591afd5ad3aedc58fe7f410e89013605 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Fri, 22 Sep 2023 22:59:59 +0000
+Subject: [PATCH] Backport patch from firefox bugzilla to fix compile error for
+ qemuarm with some armv7ve tunes such as 'armv7vethf' and 'armv7vet-vfpv3d16':
+
+| /path/to/build/tmp/work/armv7vet2hf-vfp-poky-linux-gnueabi/mozjs-102/102.5.0-r0/build/js/src/jit/AtomicOperationsGenerated.h:240:17:
+  error: 'asm' operand has impossible constraints
+|  240 |                 asm volatile (
+|      |                 ^~~
+
+Upstream-Status: Submitted [https://bugzilla.mozilla.org/show_bug.cgi?id=1761665]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ js/src/jit/GenerateAtomicOperations.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/js/src/jit/GenerateAtomicOperations.py b/js/src/jit/GenerateAtomicOperations.py
+index 24b5a191cf..e41948c5af 100644
+--- a/js/src/jit/GenerateAtomicOperations.py
++++ b/js/src/jit/GenerateAtomicOperations.py
+@@ -860,7 +860,7 @@ def generate_atomics_header(c_out):
+ 
+         # Work around a GCC issue on 32-bit x86 by adding MOZ_NEVER_INLINE.
+         # See bug 1756347.
+-        if is_gcc and cpu_arch == "x86":
++        if is_gcc and cpu_arch in ("x86", "arm"):
+             contents = contents.replace("INLINE_ATTR", "MOZ_NEVER_INLINE inline")
+         else:
+             contents = contents.replace("INLINE_ATTR", "inline")
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch
new file mode 100644
index 0000000..38496ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch
@@ -0,0 +1,44 @@
+From c860dcbe63b0e393c95bfb0131238f91aaac11d3 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Thu, 7 Oct 2021 12:44:18 +0200
+Subject: [PATCH] build: do not use autoconf's config.sub to 'canonicalize'
+ names
+
+The outcome is that processed names no longer match our custom rust
+target definitions, and the build fails.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ build/moz.configure/init.configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -647,24 +647,7 @@ def help_host_target(help, host, target)
+ 
+ def config_sub(shell, triplet):
+     config_sub = os.path.join(os.path.dirname(__file__), "..", "autoconf", "config.sub")
+-    # Config.sub doesn't like the *-windows-msvc/*-windows-gnu triplets, so
+-    # munge those before and after calling config.sub.
+-    suffix = None
+-    munging = {
+-        "-windows-msvc": "-mingw32",
+-        "-windows-gnu": "-mingw32",
+-    }
+-    for check_suffix, replacement in munging.items():
+-        if triplet.endswith(check_suffix):
+-            suffix = check_suffix
+-            triplet = triplet[: -len(suffix)] + replacement
+-            break
+-    result = check_cmd_output(shell, config_sub, triplet).strip()
+-    if suffix:
+-        assert result.endswith(replacement)
+-        result = result[: -len(replacement)] + suffix
+-    return result
+-
++    return triplet
+ 
+ @depends("--host", shell)
+ @checking("for host system type", lambda h: h.alias)
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-rewrite-cargo-host-linker-in-python3.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-rewrite-cargo-host-linker-in-python3.patch
new file mode 100644
index 0000000..83f384e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-rewrite-cargo-host-linker-in-python3.patch
@@ -0,0 +1,54 @@
+From c6a84863454b882695058187cd282987613474ef Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 18 Nov 2021 07:16:39 +0000
+Subject: [PATCH] Rewrite cargo-host-linker in python3
+
+Mozjs compile failed with this failure:
+/bin/sh: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by /build/tmp-glibc/work/corei7-64-wrs-linux/mozjs/91.1.0-r0/recipe-sysroot-native/usr/lib/libtinfo.so.5)
+
+Root Cause:
+cargo-host-linker has /bin/sh as it's interpreter, but cargo run the cmd
+with LD_LIBRARY_PATH set to recipe-sysroot-native. The host /bin/sh links
+libtinfo.so.5 under recipe-sysroot-native, which needs higher libc. But
+host libc is older libc. So the incompatible problem occurred.
+
+Solution:
+rewrite cargo-host-linker in python3
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+---
+ build/cargo-host-linker | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/build/cargo-host-linker b/build/cargo-host-linker
+index cbd0472bf7..87d43ce9ec 100755
+--- a/build/cargo-host-linker
++++ b/build/cargo-host-linker
+@@ -1,3 +1,21 @@
+-#!/bin/sh
+-# See comment in cargo-linker.
+-eval ${MOZ_CARGO_WRAP_HOST_LD} ${MOZ_CARGO_WRAP_HOST_LDFLAGS} '"$@"'
++#!/usr/bin/env python3
++
++import os,sys
++
++if os.environ['MOZ_CARGO_WRAP_HOST_LD'].strip():
++    binary=os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[0]
++else:
++    sys.exit(0)
++
++if os.environ['MOZ_CARGO_WRAP_HOST_LDFLAGS'].strip():
++    if os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[1:]:
++        args=[os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[0]] + os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[1:] + [os.environ['MOZ_CARGO_WRAP_HOST_LDFLAGS']] + sys.argv[1:]
++    else:
++        args=[os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[0]] + [os.environ['MOZ_CARGO_WRAP_HOST_LDFLAGS']] + sys.argv[1:]
++else:
++    if os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[1:]:
++        args=[os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[0]] + os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[1:] + sys.argv[1:]
++    else:
++        args=[os.environ['MOZ_CARGO_WRAP_HOST_LD'].split()[0]] + sys.argv[1:]
++
++os.execvp(binary, args)
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-util.configure-fix-one-occasionally-reproduced-confi.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-util.configure-fix-one-occasionally-reproduced-confi.patch
new file mode 100644
index 0000000..4921a90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0001-util.configure-fix-one-occasionally-reproduced-confi.patch
@@ -0,0 +1,48 @@
+From 0d28cd65efe14022e1d645db71dec74f11ab2ae8 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 11 Nov 2021 16:05:54 +0800
+Subject: [PATCH] util.configure: fix one occasionally reproduced configure
+ failure
+
+error:
+| checking whether the C++ compiler supports -Wno-range-loop-analysis...
+| DEBUG: Creating /tmp/conftest.jr1qrcw3.cpp with content:
+| DEBUG: | int
+| DEBUG: | main(void)
+| DEBUG: | {
+| DEBUG: |
+| DEBUG: | ;
+| DEBUG: | return 0;
+| DEBUG: | }
+| DEBUG: Executing: aarch64-wrs-linux-g++ -mcpu=cortex-a53 -march=armv8-a+crc -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/mozjs/91.1.0-r0/recipe-sysroot /tmp/conftest.jr1qrcw3.cpp -Werror -Wrange-loop-analysis -c
+| DEBUG: The command returned non-zero exit status 1.
+| DEBUG: Its error output was:
+...
+| File "/mozjs/91.1.0-r0/firefox-91.1.0/build/moz.configure/util.configure", line 239, in try_invoke_compiler
+| os.remove(path)
+| FileNotFoundError: [Errno 2] No such file or directory: '/tmp/conftest.jr1qrcw3.cpp'
+
+It should be another process that deleted this file by using
+"rm -rf conftest*" inappropriately
+
+Upstream-Status: Submitted [https://bugzilla.mozilla.org/show_bug.cgi?id=1740667]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+---
+ build/moz.configure/util.configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
+index f5ff3acd79..44f69deceb 100644
+--- a/build/moz.configure/util.configure
++++ b/build/moz.configure/util.configure
+@@ -254,7 +254,7 @@ def try_invoke_compiler(
+         "C++": ".cpp",
+     }[language]
+ 
+-    fd, path = mkstemp(prefix="conftest.", suffix=suffix, text=True)
++    fd, path = mkstemp(prefix="try_invoke_compiler_conftest.", suffix=suffix, text=True)
+     try:
+         source = source.encode("ascii", "replace")
+ 
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0002-moz.configure-do-not-look-for-llvm-objdump.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0002-moz.configure-do-not-look-for-llvm-objdump.patch
new file mode 100644
index 0000000..4c69155
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0002-moz.configure-do-not-look-for-llvm-objdump.patch
@@ -0,0 +1,44 @@
+From 49cb509abd309e3b74ef4c872ae773f18dabca19 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 1 Oct 2021 13:01:10 +0200
+Subject: [PATCH] moz.configure: do not look for llvm-objdump
+
+This avoid dragging in a dependency that isn't even needed
+for js builds.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ moz.configure | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/moz.configure b/moz.configure
+index 3a9461200d..33b3f49b0c 100755
+--- a/moz.configure
++++ b/moz.configure
+@@ -723,15 +723,15 @@ check_prog(
+ )
+ 
+ 
+-llvm_objdump = check_prog(
+-    "LLVM_OBJDUMP",
+-    llvm_tool("llvm-objdump"),
+-    what="llvm-objdump",
+-    when="--enable-compile-environment",
+-    paths=clang_search_path,
+-)
+-
+-add_old_configure_assignment("LLVM_OBJDUMP", llvm_objdump)
++#llvm_objdump = check_prog(
++#    "LLVM_OBJDUMP",
++#    llvm_tool("llvm-objdump"),
++#    what="llvm-objdump",
++#    when="--enable-compile-environment",
++#    paths=clang_search_path,
++#)
++#
++#add_old_configure_assignment("LLVM_OBJDUMP", llvm_objdump)
+ 
+ 
+ def validate_readelf(path):
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch
new file mode 100644
index 0000000..0f9d062
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch
@@ -0,0 +1,66 @@
+From ac6a3711917ff3f2b64662cbf4681c22a09da403 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Fri, 1 Oct 2021 13:02:17 +0200
+Subject: [PATCH] rust.configure: do not try to find a suitable upstream target
+
+OE is using custom targets and so this is bound to fail.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+
+---
+ build/moz.configure/rust.configure | 34 ++----------------------------
+ 1 file changed, 2 insertions(+), 32 deletions(-)
+
+diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
+index 7a2fd1ae70..e11f13b253 100644
+--- a/build/moz.configure/rust.configure
++++ b/build/moz.configure/rust.configure
+@@ -486,33 +486,7 @@ def assert_rust_compile(host_or_target, rustc_target, rustc):
+ def rust_host_triple(
+     rustc, host, compiler_info, rustc_host, rust_supported_targets, arm_target
+ ):
+-    rustc_target = detect_rustc_target(
+-        host, compiler_info, arm_target, rust_supported_targets
+-    )
+-    if rustc_target != rustc_host:
+-        if host.alias == rustc_target:
+-            configure_host = host.alias
+-        else:
+-            configure_host = "{}/{}".format(host.alias, rustc_target)
+-        die(
+-            dedent(
+-                """\
+-        The rust compiler host ({rustc}) is not suitable for the configure host ({configure}).
+-
+-        You can solve this by:
+-        * Set your configure host to match the rust compiler host by editing your
+-        mozconfig and adding "ac_add_options --host={rustc}".
+-        * Or, install the rust toolchain for {configure}, if supported, by running
+-        "rustup default stable-{rustc_target}"
+-        """.format(
+-                    rustc=rustc_host,
+-                    configure=configure_host,
+-                    rustc_target=rustc_target,
+-                )
+-            )
+-        )
+-    assert_rust_compile(host, rustc_target, rustc)
+-    return rustc_target
++    return rustc_host
+ 
+ 
+ @depends(
+@@ -522,11 +496,7 @@ def rust_host_triple(
+ def rust_target_triple(
+     rustc, target, compiler_info, rust_supported_targets, arm_target
+ ):
+-    rustc_target = detect_rustc_target(
+-        target, compiler_info, arm_target, rust_supported_targets
+-    )
+-    assert_rust_compile(target, rustc_target, rustc)
+-    return rustc_target
++    return target.alias
+ 
+ 
+ set_config("RUST_TARGET", rust_target_triple)
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0004-use-asm-sgidefs.h.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0004-use-asm-sgidefs.h.patch
new file mode 100644
index 0000000..6443d46
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/0004-use-asm-sgidefs.h.patch
@@ -0,0 +1,38 @@
+From 607aa4d822b0e074ae1b2fc16d7c140c3e889680 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <amccurdy@gmail.com>
+Date: Sat, 30 Apr 2016 15:29:06 -0700
+Subject: [PATCH] use <asm/sgidefs.h>
+
+Build fix for MIPS with musl libc
+
+The MIPS specific header <sgidefs.h> is provided by glibc and uclibc
+but not by musl. Regardless of the libc, the kernel headers provide
+<asm/sgidefs.h> which provides the same definitions, so use that
+instead.
+
+Upstream-Status: Pending
+
+[Vincent:
+Taken from: https://sourceware.org/bugzilla/show_bug.cgi?id=21070]
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
+
+---
+ mfbt/RandomNum.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mfbt/RandomNum.cpp b/mfbt/RandomNum.cpp
+index 96de5d4055..2cfb2e10ee 100644
+--- a/mfbt/RandomNum.cpp
++++ b/mfbt/RandomNum.cpp
+@@ -53,7 +53,7 @@ extern "C" BOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer,
+ #  elif defined(__s390__)
+ #    define GETRANDOM_NR 349
+ #  elif defined(__mips__)
+-#    include <sgidefs.h>
++#    include <asm/sgidefs.h>
+ #    if _MIPS_SIM == _MIPS_SIM_ABI32
+ #      define GETRANDOM_NR 4353
+ #    elif _MIPS_SIM == _MIPS_SIM_ABI64
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/fix-musl-build.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/fix-musl-build.patch
new file mode 100644
index 0000000..22f31e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/fix-musl-build.patch
@@ -0,0 +1,29 @@
+From e4d8016d0dc56b02e22898d83aad9f80a94d1c3c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 20 Oct 2021 16:21:14 -0700
+Subject: [PATCH] mozjs: Fix musl miscompiles with HAVE_THREAD_TLS_KEYWORD
+
+Upstream: No
+Reason: mozjs60 miscompiles on musl if built with HAVE_THREAD_TLS_KEYWORD:
+https://github.com/void-linux/void-packages/issues/2598
+
+---
+Upstream-Status: Pending
+
+ js/src/old-configure.in | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/js/src/old-configure.in b/js/src/old-configure.in
+index cabd72a2b6..0f08d91cbf 100644
+--- a/js/src/old-configure.in
++++ b/js/src/old-configure.in
+@@ -807,6 +807,9 @@ if test "$ac_cv_thread_keyword" = yes; then
+     *-android*|*-linuxandroid*)
+       :
+       ;;
++    *-musl*)
++      :
++      ;;
+     *)
+       AC_DEFINE(HAVE_THREAD_TLS_KEYWORD)
+       ;;
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/musl-disable-stackwalk.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/musl-disable-stackwalk.patch
new file mode 100644
index 0000000..590cddf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/musl-disable-stackwalk.patch
@@ -0,0 +1,27 @@
+From 9aae71c6ee73431d2609be0ef74ffd4b22b36c75 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 22 Sep 2023 22:59:56 +0000
+Subject: [PATCH] Musl does not have stack unwinder like glibc therefore we can
+ not assume that its always available on musl, we do need to check for target
+ environment as well which could be musl or glibc.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ mozglue/misc/StackWalk.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mozglue/misc/StackWalk.cpp b/mozglue/misc/StackWalk.cpp
+index 307715b170..a8d3cb40c0 100644
+--- a/mozglue/misc/StackWalk.cpp
++++ b/mozglue/misc/StackWalk.cpp
+@@ -43,7 +43,7 @@ using namespace mozilla;
+ #  define MOZ_STACKWALK_SUPPORTS_MACOSX 0
+ #endif
+ 
+-#if (defined(linux) &&                                            \
++#if (defined(linux) && defined(__GLIBC__) &&                      \
+      ((defined(__GNUC__) && (defined(__i386) || defined(PPC))) || \
+       defined(HAVE__UNWIND_BACKTRACE)))
+ #  define MOZ_STACKWALK_SUPPORTS_LINUX 1
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/riscv32.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/riscv32.patch
new file mode 100644
index 0000000..16f9565
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/riscv32.patch
@@ -0,0 +1,60 @@
+From d6aff068170e56e6773feba42a463dd8c50bc4ff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 24 Oct 2021 22:32:50 -0700
+Subject: [PATCH] Add RISCV32 support
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ build/moz.configure/init.configure                             | 3 +++
+ python/mozbuild/mozbuild/configure/constants.py                | 2 ++
+ .../mozbuild/test/configure/test_toolchain_configure.py        | 1 +
+ 3 files changed, 6 insertions(+)
+
+diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
+index 53bbc4203f..2ac40d3d39 100644
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -584,6 +584,9 @@ def split_triplet(triplet, allow_wasi=False):
+     elif cpu.startswith("aarch64"):
+         canonical_cpu = "aarch64"
+         endianness = "little"
++    elif cpu in ("riscv32", "riscv32gc"):
++        canonical_cpu = "riscv32"
++        endianness = "little"
+     elif cpu in ("riscv64", "riscv64gc"):
+         canonical_cpu = "riscv64"
+         endianness = "little"
+diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py
+index a36152651d..a6050be5d8 100644
+--- a/python/mozbuild/mozbuild/configure/constants.py
++++ b/python/mozbuild/mozbuild/configure/constants.py
+@@ -51,6 +51,7 @@ CPU_bitness = {
+     "mips64": 64,
+     "ppc": 32,
+     "ppc64": 64,
++    'riscv32': 32,
+     "riscv64": 64,
+     "s390": 32,
+     "s390x": 64,
+@@ -98,6 +99,7 @@ CPU_preprocessor_checks = OrderedDict(
+         ("m68k", "__m68k__"),
+         ("mips64", "__mips64"),
+         ("mips32", "__mips__"),
++        ("riscv32", "__riscv && __riscv_xlen == 32"),
+         ("riscv64", "__riscv && __riscv_xlen == 64"),
+         ("loongarch64", "__loongarch64"),
+         ("sh4", "__sh__"),
+diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+index c6af3d99d4..7ef02e1a85 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+@@ -1325,6 +1325,7 @@ class LinuxCrossCompileToolchainTest(BaseToolchainTest):
+         "m68k-unknown-linux-gnu": big_endian + {"__m68k__": 1},
+         "mips64-unknown-linux-gnuabi64": big_endian + {"__mips64": 1, "__mips__": 1},
+         "mips-unknown-linux-gnu": big_endian + {"__mips__": 1},
++        "riscv32-unknown-linux-gnu": little_endian + {"__riscv": 1, "__riscv_xlen": 32},
+         "riscv64-unknown-linux-gnu": little_endian + {"__riscv": 1, "__riscv_xlen": 64},
+         "sh4-unknown-linux-gnu": little_endian + {"__sh__": 1},
+     }
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.2.0.bb b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.2.0.bb
new file mode 100644
index 0000000..fcdf64c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.2.0.bb
@@ -0,0 +1,80 @@
+SUMMARY = "SpiderMonkey is Mozilla's JavaScript engine written in C/C++"
+HOMEPAGE = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc9b6ecd19a14a54a628edaaf23733bf"
+
+SRC_URI = "https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz \
+           file://0001-Cargo.toml-do-not-abort-on-panic.patch \
+           file://0002-moz.configure-do-not-look-for-llvm-objdump.patch \
+           file://0003-rust.configure-do-not-try-to-find-a-suitable-upstrea.patch \
+           file://0004-use-asm-sgidefs.h.patch \
+           file://fix-musl-build.patch \
+           file://0001-build-do-not-use-autoconf-s-config.sub-to-canonicali.patch \
+           file://riscv32.patch \
+           file://0001-util.configure-fix-one-occasionally-reproduced-confi.patch \
+           file://0001-rewrite-cargo-host-linker-in-python3.patch  \
+           file://musl-disable-stackwalk.patch \
+           file://0001-add-arm-to-list-of-mozinline.patch \
+           "
+SRC_URI[sha256sum] = "51534dd2a158d955a2cb67cc1308f100f6c9def0788713ed8b4d743f3ad72457"
+
+S = "${WORKDIR}/firefox-${PV}"
+
+inherit pkgconfig perlnative python3native rust
+
+DEPENDS += "zlib cargo-native python3 icu"
+DEPENDS:remove:mipsarch = "icu"
+DEPENDS:remove:powerpc:toolchain-clang = "icu"
+
+B = "${WORKDIR}/build"
+
+export PYTHONPATH = "${S}/build:${S}/third_party/python/PyYAML/lib3:${S}/testing/mozbase/mozfile:${S}/python/mozboot:${S}/third_party/python/distro:${S}/testing/mozbase/mozinfo:${S}/config:${S}/testing/mozbase/manifestparser:${S}/third_party/python/pytoml:${S}/testing/mozbase/mozprocess:${S}/third_party/python/six:${S}/python/mozbuild:${S}/python/mozbuild/mozbuild:${S}/python/mach:${S}/third_party/python/jsmin:${S}/python/mozversioncontrol"
+
+export HOST_CC = "${BUILD_CC}"
+export HOST_CXX = "${BUILD_CXX}"
+export HOST_CFLAGS = "${BUILD_CFLAGS}"
+export HOST_CPPFLAGS = "${BUILD_CPPFLAGS}"
+export HOST_CXXFLAGS = "${BUILD_CXXFLAGS}"
+
+export AS = "${CC}"
+
+export RUSTFLAGS
+
+JIT ?= ""
+JIT:mipsarch = "--disable-jit"
+ICU ?= "--with-system-icu"
+ICU:mipsarch = ""
+ICU:powerpc:toolchain-clang = ""
+
+do_configure() {
+    cd ${B}
+    python3 ${S}/configure.py \
+        --enable-project=js \
+        --target=${RUST_HOST_SYS} \
+        --host=${BUILD_SYS} \
+        --prefix=${prefix} \
+        --libdir=${libdir} \
+        --disable-jemalloc \
+        --disable-strip \
+        ${JIT} \
+        ${ICU}
+}
+
+do_install() {
+    oe_runmake 'DESTDIR=${D}' install
+}
+
+inherit multilib_script multilib_header
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 1)}"
+MULTILIB_SCRIPTS += "${PN}-dev:${bindir}/js${MAJ_VER}-config"
+
+do_install:append() {
+    oe_multilib_header mozjs-${MAJ_VER}/js-config.h
+    sed -e 's@${STAGING_DIR_HOST}@@g' \
+        -i ${D}${bindir}/js${MAJ_VER}-config
+    rm -f ${D}${libdir}/libjs_static.ajs
+}
+
+PACKAGES =+ "lib${BPN}"
+FILES:lib${BPN} += "${libdir}/lib*"
diff --git a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
index 3028c4c..bc465dd 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
@@ -28,6 +28,8 @@
 
 inherit autotools bash-completion gobject-introspection github-releases gtk-doc manpages pkgconfig ptest-gnome systemd
 
+COMPATIBLE_HOST:riscv32 = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'null', 'riscv32', d)}"
+
 UNKNOWN_CONFIGURE_OPT_IGNORE = "--disable-introspection --enable-introspection"
 
 # Workaround compile failure:
diff --git a/meta-openembedded/meta-oe/recipes-extended/plocate/plocate.inc b/meta-openembedded/meta-oe/recipes-extended/plocate/plocate.inc
deleted file mode 100644
index 166fc2d..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/plocate/plocate.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "plocate, a much faster locate"
-HOMEPAGE = "https://plocate.sesse.net/"
-DESCRIPTION = "plocate is a locate(1) based on posting lists, completely replacing mlocate with a much faster (and smaller) index. It is suitable as a default locate on your system."
-SECTION = "base"
-LICENSE = "GPL-2.0-only"
-
-inherit meson pkgconfig
-
-DEPENDS = "zstd liburing"
diff --git a/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.17.bb b/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.17.bb
deleted file mode 100644
index ef36754..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.17.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require plocate.inc
-# GPL-2.0-only
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://git.sesse.net/plocate;protocol=https;branch=master"
-
-SRCREV = "7e5defd4e7e075cb9226e7d2d9a80f943c482d11"
-S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.19.bb b/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.19.bb
new file mode 100644
index 0000000..6b3160f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/plocate/plocate_1.1.19.bb
@@ -0,0 +1,14 @@
+SUMMARY = "plocate, a much faster locate"
+HOMEPAGE = "https://plocate.sesse.net/"
+DESCRIPTION = "plocate is a locate(1) based on posting lists, completely replacing mlocate with a much faster (and smaller) index. It is suitable as a default locate on your system."
+SECTION = "base"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit meson pkgconfig
+
+DEPENDS = "zstd liburing"
+
+SRC_URI = "https://plocate.sesse.net/download/${BP}.tar.gz"
+
+SRC_URI[sha256sum] = "d95bc8ee8a9f79b9f69ce63df53fb85b202139f243bbb84c399555eda22e6165"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch
new file mode 100644
index 0000000..9a09727
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch
@@ -0,0 +1,33 @@
+From 046d853818f18bac5df4dfc007151e06fd64a5b3 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sun, 17 Sep 2023 23:26:59 +0200
+Subject: [PATCH] polkit.service.in: disable MemoryDenyWriteExecute
+
+A few momths ago some hardening options have been added to polkit.service.in
+https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/177/diffs?commit_id=afecbd53696e32bbadd60f431fc7d285f3edd265
+
+and polkitd segfaults with MemoryDenyWriteExecute=yes, at least in my environment
+
+Upstream-Status: Inappropriate [needs further investigation]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ data/polkit.service.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/polkit.service.in b/data/polkit.service.in
+index 2113ff7..42dfd90 100644
+--- a/data/polkit.service.in
++++ b/data/polkit.service.in
+@@ -14,7 +14,7 @@ Group=@polkitd_user@
+ IPAddressDeny=any
+ LimitMEMLOCK=0
+ LockPersonality=yes
+-MemoryDenyWriteExecute=yes
++#MemoryDenyWriteExecute=yes
+ NoNewPrivileges=yes
+ PrivateDevices=yes
+ PrivateNetwork=yes
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_122.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_122.bb
deleted file mode 100644
index 2906406..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_122.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "PolicyKit Authorization Framework"
-DESCRIPTION = "The polkit package is an application-level toolkit for defining and handling the policy that allows unprivileged processes to speak to privileged processes."
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/polkit"
-LICENSE = "LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=155db86cdbafa7532b41f390409283eb"
-
-SRC_URI = "git://gitlab.freedesktop.org/polkit/polkit.git;protocol=https;branch=master"
-
-S = "${WORKDIR}/git"
-SRCREV = "da87c5698019897dd731bb2cbb54ebd9c9481f52"
-
-DEPENDS = "expat glib-2.0"
-
-inherit meson pkgconfig useradd systemd gettext gobject-introspection features_check
-
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-PACKAGECONFIG = " \
-	${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
-	${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'consolekit', d)} \
-	dbus \
-	mozjs \
-"
-PACKAGECONFIG[dbus] = ",,dbus"
-PACKAGECONFIG[gtk-doc] = "-Dgtk_doc=true,-Dgtk_doc=false,gtk-doc-native"
-PACKAGECONFIG[pam] = "-Dauthfw=pam,-Dauthfw=shadow,libpam,libpam"
-PACKAGECONFIG[systemd] = "-Dsession_tracking=libsystemd-login,-Dsession_tracking=ConsoleKit,systemd"
-PACKAGECONFIG[consolekit] = ",,,consolekit"
-
-# Default to mozjs javascript library
-PACKAGECONFIG[mozjs] = "-Djs_engine=mozjs,,mozjs-102,,,duktape"
-# duktape javascript engine is much smaller and faster but is not compatible with
-# same javascript standards as mozjs. For example array.includes() function is not
-# supported. Test rule compatibility when switching to duktape.
-PACKAGECONFIG[duktape] = "-Djs_engine=duktape,,duktape,,,mozjs"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/${BPN}-1 --shell /bin/nologin polkitd"
-
-SYSTEMD_SERVICE:${PN} = "${BPN}.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-do_install:append() {
-	#Fix up permissions on polkit rules.d to work with rpm4 constraints
-	chmod 700 ${D}/${datadir}/polkit-1/rules.d
-	chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
-}
-
-FILES:${PN} += "${libdir}/polkit-1 ${nonarch_libdir}/polkit-1 ${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb
new file mode 100644
index 0000000..4fc2355
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb
@@ -0,0 +1,52 @@
+SUMMARY = "PolicyKit Authorization Framework"
+DESCRIPTION = "The polkit package is an application-level toolkit for defining and handling the policy that allows unprivileged processes to speak to privileged processes."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/polkit"
+LICENSE = "LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=155db86cdbafa7532b41f390409283eb"
+
+SRC_URI = " \
+	git://gitlab.freedesktop.org/polkit/polkit.git;protocol=https;branch=master \
+	file://0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch \
+"
+
+S = "${WORKDIR}/git"
+SRCREV = "fc8b07e71d99f88a29258cde99b913b44da1846d"
+
+DEPENDS = "expat glib-2.0"
+
+inherit meson pkgconfig useradd systemd gettext gobject-introspection features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+PACKAGECONFIG = " \
+	${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+	${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'consolekit', d)} \
+	dbus \
+	mozjs \
+"
+PACKAGECONFIG[dbus] = ",,dbus"
+PACKAGECONFIG[gtk-doc] = "-Dgtk_doc=true,-Dgtk_doc=false,gtk-doc-native"
+PACKAGECONFIG[pam] = "-Dauthfw=pam,-Dauthfw=shadow,libpam,libpam"
+PACKAGECONFIG[systemd] = "-Dsession_tracking=libsystemd-login,-Dsession_tracking=ConsoleKit,systemd"
+PACKAGECONFIG[consolekit] = ",,,consolekit"
+
+# Default to mozjs javascript library
+PACKAGECONFIG[mozjs] = "-Djs_engine=mozjs,,mozjs-102,,,duktape"
+# duktape javascript engine is much smaller and faster but is not compatible with
+# same javascript standards as mozjs. For example array.includes() function is not
+# supported. Test rule compatibility when switching to duktape.
+PACKAGECONFIG[duktape] = "-Djs_engine=duktape,,duktape,,,mozjs"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/${BPN}-1 --shell /bin/nologin polkitd"
+
+SYSTEMD_SERVICE:${PN} = "${BPN}.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install:append() {
+	#Fix up permissions on polkit rules.d to work with rpm4 constraints
+	chmod 700 ${D}/${datadir}/polkit-1/rules.d
+	chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
+}
+
+FILES:${PN} += "${libdir}/polkit-1 ${nonarch_libdir}/polkit-1 ${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/hiredis-use-default-CC-if-it-is-set.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/hiredis-use-default-CC-if-it-is-set.patch
deleted file mode 100644
index 5b9b71e..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/hiredis-use-default-CC-if-it-is-set.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 41efa2f0cf08c91ff935bbb2d16ab233df7f5811 Mon Sep 17 00:00:00 2001
-From: Venture Research <tech@ventureresearch.com>
-Date: Fri, 8 Feb 2013 17:39:52 -0600
-Subject: [PATCH] hiredis: use default CC if it is set
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Instead of trying to automagically figure out CC, which breaks with OE
-as CC has spaces in it, just skip it if one was already passed in.
-
-Signed-off-by: Venture Research <tech@ventureresearch.com>
-
-Update to work with 4.0.8
-Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-
-Reworked for 6.0.4
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
-
----
- deps/hiredis/Makefile | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/deps/hiredis/Makefile b/deps/hiredis/Makefile
-index bd2106b..9ce768d 100644
---- a/deps/hiredis/Makefile
-+++ b/deps/hiredis/Makefile
-@@ -36,8 +36,6 @@ endef
- export REDIS_TEST_CONFIG
- 
- # Fallback to gcc when $CC is not in $PATH.
--CC:=$(shell sh -c 'type $${CC%% *} >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
--CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev/null && echo $(CXX) || echo g++')
- OPTIMIZATION?=-O3
- WARNINGS=-Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers
- DEBUG_FLAGS?= -g -ggdb
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/oe-use-libc-malloc.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/oe-use-libc-malloc.patch
deleted file mode 100644
index be186b5..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/oe-use-libc-malloc.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 38a5f403b033d03cdac3ff814687d83f61527d8e Mon Sep 17 00:00:00 2001
-From: Venture Research <tech@ventureresearch.com>
-Date: Wed, 6 Feb 2013 20:51:02 -0600
-Subject: [PATCH] hack to force use of libc malloc
-
-Hack to force libc usage as it seems the option to pass it in has been
-removed in favor of magic.
-
-Note that this of course doesn't allow tcmalloc and jemalloc, however
-jemalloc wasn't building correctly.
-
-Signed-off-by: Venture Research <tech@ventureresearch.com>
-
-Update to work with 4.0.8
-Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-
----
- src/Makefile | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/Makefile b/src/Makefile
-index ecbd275..39decee 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -13,7 +13,8 @@
- # Just use 'make dep', but this is only needed by developers.
- 
- release_hdr := $(shell sh -c './mkreleasehdr.sh')
--uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
-+# use fake uname option to force use of generic libc
-+uname_S := "USE_LIBC_MALLOC"
- uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
- CLANG := $(findstring clang,$(shell sh -c '$(CC) --version | head -1'))
- OPTIMIZATION?=-O3
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/0001-src-Do-not-reset-FINAL_LIBS.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/0001-src-Do-not-reset-FINAL_LIBS.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/0006-Define-correct-gregs-for-RISCV32.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/0006-Define-correct-gregs-for-RISCV32.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/GNU_SOURCE-7.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/GNU_SOURCE-7.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch
new file mode 100644
index 0000000..7785acc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch
@@ -0,0 +1,38 @@
+From 41efa2f0cf08c91ff935bbb2d16ab233df7f5811 Mon Sep 17 00:00:00 2001
+From: Venture Research <tech@ventureresearch.com>
+Date: Fri, 8 Feb 2013 17:39:52 -0600
+Subject: [PATCH] hiredis: use default CC if it is set
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Instead of trying to automagically figure out CC, which breaks with OE
+as CC has spaces in it, just skip it if one was already passed in.
+
+Signed-off-by: Venture Research <tech@ventureresearch.com>
+
+Update to work with 4.0.8
+Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
+
+Reworked for 6.0.4
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+
+---
+Upstream-Status: Pending
+
+ deps/hiredis/Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/deps/hiredis/Makefile b/deps/hiredis/Makefile
+index bd2106b..9ce768d 100644
+--- a/deps/hiredis/Makefile
++++ b/deps/hiredis/Makefile
+@@ -36,8 +36,6 @@ endef
+ export REDIS_TEST_CONFIG
+ 
+ # Fallback to gcc when $CC is not in $PATH.
+-CC:=$(shell sh -c 'type $${CC%% *} >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
+-CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev/null && echo $(CXX) || echo g++')
+ OPTIMIZATION?=-O3
+ WARNINGS=-Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers
+ DEBUG_FLAGS?= -g -ggdb
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/init-redis-server b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/init-redis-server
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/lua-update-Makefile-to-use-environment-build-setting.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/lua-update-Makefile-to-use-environment-build-setting.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch
new file mode 100644
index 0000000..7b601e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch
@@ -0,0 +1,36 @@
+From 38a5f403b033d03cdac3ff814687d83f61527d8e Mon Sep 17 00:00:00 2001
+From: Venture Research <tech@ventureresearch.com>
+Date: Wed, 6 Feb 2013 20:51:02 -0600
+Subject: [PATCH] hack to force use of libc malloc
+
+Hack to force libc usage as it seems the option to pass it in has been
+removed in favor of magic.
+
+Note that this of course doesn't allow tcmalloc and jemalloc, however
+jemalloc wasn't building correctly.
+
+Signed-off-by: Venture Research <tech@ventureresearch.com>
+
+Update to work with 4.0.8
+Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
+
+---
+Upstream-Status: Pending
+
+ src/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index ecbd275..39decee 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -13,7 +13,8 @@
+ # Just use 'make dep', but this is only needed by developers.
+ 
+ release_hdr := $(shell sh -c './mkreleasehdr.sh')
+-uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
++# use fake uname option to force use of generic libc
++uname_S := "USE_LIBC_MALLOC"
+ uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
+ CLANG := $(findstring clang,$(shell sh -c '$(CC) --version | head -1'))
+ OPTIMIZATION?=-O3
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/redis.conf b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/redis.conf
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/redis.service b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.0/redis.service
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.0.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.0.bb
deleted file mode 100644
index 4f1c97b..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.0.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-SUMMARY = "Redis key-value store"
-DESCRIPTION = "Redis is an open source, advanced key-value store."
-HOMEPAGE = "http://redis.io"
-SECTION = "libs"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8ffdd6c926faaece928cf9d9640132d2"
-DEPENDS = "readline lua ncurses"
-
-SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
-           file://redis.conf \
-           file://init-redis-server \
-           file://redis.service \
-           file://hiredis-use-default-CC-if-it-is-set.patch \
-           file://lua-update-Makefile-to-use-environment-build-setting.patch \
-           file://oe-use-libc-malloc.patch \
-           file://0001-src-Do-not-reset-FINAL_LIBS.patch \
-           file://GNU_SOURCE-7.patch \
-           file://0006-Define-correct-gregs-for-RISCV32.patch \
-           "
-SRC_URI[sha256sum] = "8b12e242647635b419a0e1833eda02b65bf64e39eb9e509d9db4888fb3124943"
-
-inherit autotools-brokensep update-rc.d systemd useradd
-
-FINAL_LIBS:x86:toolchain-clang = "-latomic"
-FINAL_LIBS:riscv32:toolchain-clang = "-latomic"
-FINAL_LIBS:mips = "-latomic"
-FINAL_LIBS:arm = "-latomic"
-FINAL_LIBS:powerpc = "-latomic"
-
-export FINAL_LIBS
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN}  = "--system --home-dir /var/lib/redis -g redis --shell /bin/false redis"
-GROUPADD_PARAM:${PN} = "--system redis"
-
-PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = "USE_SYSTEMD=yes,USE_SYSTEMD=no,systemd"
-
-EXTRA_OEMAKE += "${PACKAGECONFIG_CONFARGS}"
-
-do_compile:prepend() {
-    (cd deps && oe_runmake hiredis lua linenoise)
-}
-
-do_install() {
-    export PREFIX=${D}/${prefix}
-    oe_runmake install
-    install -d ${D}/${sysconfdir}/redis
-    install -m 0644 ${WORKDIR}/redis.conf ${D}/${sysconfdir}/redis/redis.conf
-    install -d ${D}/${sysconfdir}/init.d
-    install -m 0755 ${WORKDIR}/init-redis-server ${D}/${sysconfdir}/init.d/redis-server
-    install -d ${D}/var/lib/redis/
-    chown redis.redis ${D}/var/lib/redis/
-
-    install -d ${D}${systemd_system_unitdir}
-    install -m 0644 ${WORKDIR}/redis.service ${D}${systemd_system_unitdir}
-    sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${systemd_system_unitdir}/redis.service
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        sed -i 's!daemonize yes!# daemonize yes!' ${D}/${sysconfdir}/redis/redis.conf
-        sed -i 's!supervised no!supervised systemd!' ${D}/${sysconfdir}/redis/redis.conf
-    fi
-}
-
-CONFFILES:${PN} = "${sysconfdir}/redis/redis.conf"
-
-INITSCRIPT_NAME = "redis-server"
-INITSCRIPT_PARAMS = "defaults 87"
-
-SYSTEMD_SERVICE:${PN} = "redis.service"
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb
new file mode 100644
index 0000000..f8e30e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb
@@ -0,0 +1,70 @@
+SUMMARY = "Redis key-value store"
+DESCRIPTION = "Redis is an open source, advanced key-value store."
+HOMEPAGE = "http://redis.io"
+SECTION = "libs"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ffdd6c926faaece928cf9d9640132d2"
+DEPENDS = "readline lua ncurses"
+
+SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
+           file://redis.conf \
+           file://init-redis-server \
+           file://redis.service \
+           file://hiredis-use-default-CC-if-it-is-set.patch \
+           file://lua-update-Makefile-to-use-environment-build-setting.patch \
+           file://oe-use-libc-malloc.patch \
+           file://0001-src-Do-not-reset-FINAL_LIBS.patch \
+           file://GNU_SOURCE-7.patch \
+           file://0006-Define-correct-gregs-for-RISCV32.patch \
+           "
+SRC_URI[sha256sum] = "5c76d990a1b1c5f949bcd1eed90d0c8a4f70369bdbdcb40288c561ddf88967a4"
+
+inherit autotools-brokensep update-rc.d systemd useradd
+
+FINAL_LIBS:x86:toolchain-clang = "-latomic"
+FINAL_LIBS:riscv32:toolchain-clang = "-latomic"
+FINAL_LIBS:mips = "-latomic"
+FINAL_LIBS:arm = "-latomic"
+FINAL_LIBS:powerpc = "-latomic"
+
+export FINAL_LIBS
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN}  = "--system --home-dir /var/lib/redis -g redis --shell /bin/false redis"
+GROUPADD_PARAM:${PN} = "--system redis"
+
+PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "USE_SYSTEMD=yes,USE_SYSTEMD=no,systemd"
+
+EXTRA_OEMAKE += "${PACKAGECONFIG_CONFARGS}"
+
+do_compile:prepend() {
+    (cd deps && oe_runmake hiredis lua linenoise)
+}
+
+do_install() {
+    export PREFIX=${D}/${prefix}
+    oe_runmake install
+    install -d ${D}/${sysconfdir}/redis
+    install -m 0644 ${WORKDIR}/redis.conf ${D}/${sysconfdir}/redis/redis.conf
+    install -d ${D}/${sysconfdir}/init.d
+    install -m 0755 ${WORKDIR}/init-redis-server ${D}/${sysconfdir}/init.d/redis-server
+    install -d ${D}/var/lib/redis/
+    chown redis.redis ${D}/var/lib/redis/
+
+    install -d ${D}${systemd_system_unitdir}
+    install -m 0644 ${WORKDIR}/redis.service ${D}${systemd_system_unitdir}
+    sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${systemd_system_unitdir}/redis.service
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        sed -i 's!daemonize yes!# daemonize yes!' ${D}/${sysconfdir}/redis/redis.conf
+        sed -i 's!supervised no!supervised systemd!' ${D}/${sysconfdir}/redis/redis.conf
+    fi
+}
+
+CONFFILES:${PN} = "${sysconfdir}/redis/redis.conf"
+
+INITSCRIPT_NAME = "redis-server"
+INITSCRIPT_PARAMS = "defaults 87"
+
+SYSTEMD_SERVICE:${PN} = "redis.service"
diff --git a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb
index a374041..455bda1 100644
--- a/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/vlock/vlock_2.2.3.bb
@@ -37,13 +37,13 @@
         VLOCK_GROUP=root \
         ROOT_GROUP=root \
         CC="${CC}" \
-        CFLAGS="${CFLAGS}" \
         LDFLAGS="${LDFLAGS}" \
         --prefix=${prefix} \
         --libdir=${libdir} \
         --mandir=${mandir} \
         --with-modules="all.so new.so nosysrq.so ttyblank.so vesablank.so" \
         --disable-root-password --enable-debug --disable-fail-count \
+        EXTRA_CFLAGS="${CFLAGS}" \
         ${PACKAGECONFIG_CONFARGS}
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-gnome/libxmlb/libxmlb_0.3.10.bb b/meta-openembedded/meta-oe/recipes-gnome/libxmlb/libxmlb_0.3.10.bb
deleted file mode 100644
index 61abd07..0000000
--- a/meta-openembedded/meta-oe/recipes-gnome/libxmlb/libxmlb_0.3.10.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "A library to help create and query binary XML blobs"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=1803fa9c2c3ce8cb06b4861d75310742"
-
-SRC_URI = "git://github.com/hughsie/libxmlb.git;branch=main;protocol=https \
-           file://run-ptest \
-           "
-SRCREV = "a6cac6a715d57c393bbddee4d0381ad943341af9"
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 xz"
-
-inherit gobject-introspection gtk-doc meson ptest-gnome lib_package
-
-PACKAGECONFIG ??= "\
-    ${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
-"
-PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
-
-GTKDOC_MESON_OPTION = "gtkdoc"
-
-FILES:${PN}-bin += "${libexecdir}/*"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.4.0.bb b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.4.0.bb
index b433900..2cd00b0 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.4.0.bb
@@ -8,8 +8,8 @@
 
 inherit cmake features_check pkgconfig
 
-# depends on virtual/libgl
-REQUIRED_DISTRO_FEATURES = "opengl"
+# depends on virtual/libgl and libxi
+REQUIRED_DISTRO_FEATURES = "opengl x11"
 
 PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
 PACKAGECONFIG[gles] = "-DFREEGLUT_GLES=ON,-DFREEGLUT_GLES=OFF,"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.6.0.bb b/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.6.0.bb
deleted file mode 100644
index b76373c..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.6.0.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-DESCRIPTION = "libglvnd is a vendor-neutral dispatch layer for arbitrating \
-OpenGL API calls between multiple vendors."
-HOMEPAGE = "https://gitlab.freedesktop.org/glvnd/libglvnd"
-LICENSE = "MIT & BSD-1-Clause & BSD-3-Clause & GPL-3.0-with-autoconf-exception"
-LIC_FILES_CHKSUM = "file://README.md;beginline=323;md5=7ac5f0111f648b92fe5427efeb08e8c4"
-
-SRC_URI = "git://git@gitlab.freedesktop.org/glvnd/libglvnd.git;protocol=https;branch=master"
-
-# v1.5.0 tag
-SRCREV = "b05bbcdaeb9b700cf7877e6d66f8fc3ac952295b"
-
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-inherit meson pkgconfig features_check
-
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ?= "\
-  ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
-  ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl gles1 gles2', '', d)} \
-  ${@bb.utils.contains('DISTRO_FEATURES', 'opengl x11', 'glx', '', d)} \
-  "
-
-PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,libx11 libxext xorgproto"
-PACKAGECONFIG[glx] = "-Dglx=enabled,-Dglx=disabled,libx11 libxext xorgproto"
-PACKAGECONFIG[egl] = "-Degl=true,-Degl=false,"
-PACKAGECONFIG[gles1] = "-Dgles1=true,-Dgles1=false,"
-PACKAGECONFIG[gles2] = "-Dgles2=true,-Dgles2=false,"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.7.0.bb b/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.7.0.bb
new file mode 100644
index 0000000..4094aa4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libglvnd/libglvnd_1.7.0.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "libglvnd is a vendor-neutral dispatch layer for arbitrating \
+OpenGL API calls between multiple vendors."
+HOMEPAGE = "https://gitlab.freedesktop.org/glvnd/libglvnd"
+LICENSE = "MIT & BSD-1-Clause & BSD-3-Clause & GPL-3.0-with-autoconf-exception"
+LIC_FILES_CHKSUM = "file://README.md;beginline=323;md5=7ac5f0111f648b92fe5427efeb08e8c4"
+
+SRC_URI = "git://git@gitlab.freedesktop.org/glvnd/libglvnd.git;protocol=https;branch=master"
+
+# v1.5.0 tag
+SRCREV = "faa23f21fc677af5792825dc30cb1ccef4bf33a6"
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+inherit meson pkgconfig features_check
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ?= "\
+  ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+  ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl gles1 gles2', '', d)} \
+  ${@bb.utils.contains('DISTRO_FEATURES', 'opengl x11', 'glx', '', d)} \
+  "
+
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,libx11 libxext xorgproto"
+PACKAGECONFIG[glx] = "-Dglx=enabled,-Dglx=disabled,libx11 libxext xorgproto"
+PACKAGECONFIG[egl] = "-Degl=true,-Degl=false,"
+PACKAGECONFIG[gles1] = "-Dgles1=true,-Dgles1=false,"
+PACKAGECONFIG[gles2] = "-Dgles2=true,-Dgles2=false,"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl-1.2.15/CVE-2022-34568.patch b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl-1.2.15/CVE-2022-34568.patch
new file mode 100644
index 0000000..7561300
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl-1.2.15/CVE-2022-34568.patch
@@ -0,0 +1,28 @@
+CVE: CVE-2022-34568
+Upstream-Status: Backport [https://github.com/libsdl-org/SDL-1.2/commit/d7e00208738a0bc6af302723fe64908ac35b777b ]
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+From d7e00208738a0bc6af302723fe64908ac35b777b Mon Sep 17 00:00:00 2001
+From: Ozkan Sezer <sezeroz@gmail.com>
+Date: Sat, 18 Jun 2022 14:55:00 +0300
+Subject: [PATCH] SDL_x11yuv.c: fix possible use-after-free
+
+Fixes: https://github.com/libsdl-org/SDL-1.2/issues/863
+---
+ src/video/x11/SDL_x11yuv.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/video/x11/SDL_x11yuv.c b/src/video/x11/SDL_x11yuv.c
+index 62698dfd9..0d5754e3e 100644
+--- a/src/video/x11/SDL_x11yuv.c
++++ b/src/video/x11/SDL_x11yuv.c
+@@ -374,8 +374,8 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
+ #ifdef PITCH_WORKAROUND
+ 		if ( hwdata->image != NULL && hwdata->image->pitches[0] != (width*bpp) ) {
+ 			/* Ajust overlay width according to pitch */ 
+-			XFree(hwdata->image);
+ 			width = hwdata->image->pitches[0] / bpp;
++			XFree(hwdata->image);
+ 			hwdata->image = SDL_NAME(XvCreateImage)(GFX_Display, xv_port, format,
+ 								0, width, height);
+ 		}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl_1.2.15.bb b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl_1.2.15.bb
index 814e6cd..a817d38 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl_1.2.15.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl_1.2.15.bb
@@ -26,6 +26,7 @@
            file://CVE-2019-7638.patch \
            file://CVE-2019-7576.patch \
            file://CVE-2019-13616.patch \
+           file://CVE-2022-34568.patch \
           "
 
 UPSTREAM_CHECK_REGEX = "SDL-(?P<pver>\d+(\.\d+)+)\.tar"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.13.bb b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.13.bb
deleted file mode 100644
index 93f6951..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.13.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-DESCRIPTION = "library for easy implementation of a RDP/VNC server"
-HOMEPAGE = "https://libvnc.github.io"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f"
-
-# ffmpeg support is not currently compatible with ffmpeg 5.0
-PACKAGECONFIG ??= " \
-    24bpp \
-    filetransfer \
-    gcrypt \
-    gnutls \
-    jpeg \
-    lzo \
-    png \
-    pthread \
-    ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6', '',d)} \
-    sdl \
-    websockets \
-    zlib \
-"
-
-PACKAGECONFIG[24bpp] = "-DWITH_24BPP=ON,-DWITH_24BPP=OFF,"
-PACKAGECONFIG[filetransfer] = "-DWITH_TIGHTVNC_FILETRANSFER=ON,-DWITH_TIGHTVNC_FILETRANSFER=OFF,"
-PACKAGECONFIG[ffmpeg] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,ffmpeg,ffmpeg"
-PACKAGECONFIG[gcrypt] = "-DWITH_GCRYPT=ON,-DWITH_GCRYPT=OFF,libgcrypt,libgcrypt"
-PACKAGECONFIG[gnutls] = "-DWITH_GNUTLS=ON,-DWITH_GNUTLS=OFF,gnutls"
-PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg"
-PACKAGECONFIG[ipv6] = "-DWITH_IPv6=ON,-DWITH_IPv6=OFF,"
-PACKAGECONFIG[lzo] = "-DWITH_LZO=ON,-DWITH_LZO=OFF,lzo"
-PACKAGECONFIG[openssl] = "-DWITH_OPENSSL=ON,-DWITH_OPENSSL=OFF,openssl"
-PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng,libpng"
-PACKAGECONFIG[pthread] = "-DWITH_THREADS=ON,-DWITH_THREADS=OFF,"
-PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF,systemd"
-PACKAGECONFIG[sasl] = "-DWITH_SASL=ON,-DWITH_SASL=OFF,cyrus-sasl"
-PACKAGECONFIG[sdl] = "-DWITH_SDL=ON,-DWITH_SDL=OFF,libsdl2"
-PACKAGECONFIG[websockets] = "-DWITH_WEBSOCKETS=ON,-DWITH_WEBSOCKETS=OFF,"
-PACKAGECONFIG[zlib] = "-DWITH_ZLIB=ON,-DWITH_ZLIB=OFF,zlib"
-
-PACKAGE_BEFORE_PN = "libvncclient"
-FILES:libvncclient = "${libdir}/libvncclient.*"
-
-inherit cmake
-
-SRC_URI = "git://github.com/LibVNC/libvncserver;branch=master;protocol=https"
-SRCREV = "2aa20dad4c23c18948d3f63b33f9dfec1f837729"
-
-S = "${WORKDIR}/git"
-
-EXTRA_OECMAKE = "-DMAKE_INSTALL_LIBDIR=${libdir}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.14.bb b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.14.bb
new file mode 100644
index 0000000..50bdad5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.14.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "library for easy implementation of a RDP/VNC server"
+HOMEPAGE = "https://libvnc.github.io"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f"
+
+# ffmpeg support is not currently compatible with ffmpeg 5.0
+PACKAGECONFIG ??= " \
+    24bpp \
+    filetransfer \
+    gcrypt \
+    gnutls \
+    jpeg \
+    lzo \
+    png \
+    pthread \
+    ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6', '',d)} \
+    sdl \
+    websockets \
+    zlib \
+"
+
+PACKAGECONFIG[24bpp] = "-DWITH_24BPP=ON,-DWITH_24BPP=OFF,"
+PACKAGECONFIG[filetransfer] = "-DWITH_TIGHTVNC_FILETRANSFER=ON,-DWITH_TIGHTVNC_FILETRANSFER=OFF,"
+PACKAGECONFIG[ffmpeg] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,ffmpeg,ffmpeg"
+PACKAGECONFIG[gcrypt] = "-DWITH_GCRYPT=ON,-DWITH_GCRYPT=OFF,libgcrypt,libgcrypt"
+PACKAGECONFIG[gnutls] = "-DWITH_GNUTLS=ON,-DWITH_GNUTLS=OFF,gnutls"
+PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg"
+PACKAGECONFIG[ipv6] = "-DWITH_IPv6=ON,-DWITH_IPv6=OFF,"
+PACKAGECONFIG[lzo] = "-DWITH_LZO=ON,-DWITH_LZO=OFF,lzo"
+PACKAGECONFIG[openssl] = "-DWITH_OPENSSL=ON,-DWITH_OPENSSL=OFF,openssl"
+PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng,libpng"
+PACKAGECONFIG[pthread] = "-DWITH_THREADS=ON,-DWITH_THREADS=OFF,"
+PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF,systemd"
+PACKAGECONFIG[sasl] = "-DWITH_SASL=ON,-DWITH_SASL=OFF,cyrus-sasl"
+PACKAGECONFIG[sdl] = "-DWITH_SDL=ON,-DWITH_SDL=OFF,libsdl2"
+PACKAGECONFIG[websockets] = "-DWITH_WEBSOCKETS=ON,-DWITH_WEBSOCKETS=OFF,"
+PACKAGECONFIG[zlib] = "-DWITH_ZLIB=ON,-DWITH_ZLIB=OFF,zlib"
+
+PACKAGE_BEFORE_PN = "libvncclient"
+FILES:libvncclient = "${libdir}/libvncclient.*"
+
+inherit cmake
+
+SRC_URI = "git://github.com/LibVNC/libvncserver;branch=master;protocol=https"
+SRCREV = "10e9eb75f73e973725dc75c373de5d89807af028"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = "-DMAKE_INSTALL_LIBDIR=${libdir}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/wayland/libei_1.1.0.bb b/meta-openembedded/meta-oe/recipes-graphics/wayland/libei_1.1.0.bb
new file mode 100644
index 0000000..1727ef9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/wayland/libei_1.1.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "libei is a library for Emulated Input, primarily aimed at the Wayland stack."
+HOMEPAGE = "https://gitlab.freedesktop.org/libinput/libei"
+SECTION = "graphics"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a98fa76460f96f41696611d6f07e8d49"
+
+DEPENDS = " \
+	libxkbcommon \
+	libevdev \
+	libxslt-native \
+	python3-attrs-native \
+	python3-jinja2-native \
+	${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', 'basu', d)} \
+"
+
+SRC_URI = "git://gitlab.freedesktop.org/libinput/libei.git;protocol=https;branch=main"
+
+S = "${WORKDIR}/git"
+SRCREV = "82cdbc9129a0e2c255fcee6bcaa7abed5578ae14"
+
+inherit meson pkgconfig
+
+EXTRA_OEMESON = "-Dtests=disabled"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/CVE-2020-29074.patch b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/CVE-2020-29074.patch
new file mode 100644
index 0000000..fbdb912
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/files/CVE-2020-29074.patch
@@ -0,0 +1,27 @@
+CVE: CVE-2020-29074
+Upstream-Status: Backport [https://github.com/LibVNC/x11vnc/commit/69eeb9f7baa14ca03b16c9de821f9876def7a36a ]
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+
+From 69eeb9f7baa14ca03b16c9de821f9876def7a36a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Gu=C3=A9nal=20DAVALAN?= <guenal.davalan@uca.fr>
+Date: Wed, 18 Nov 2020 08:40:45 +0100
+Subject: [PATCH] scan: limit access to shared memory segments to current user
+
+---
+ src/scan.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/scan.c b/src/scan.c
+index 43e00d20..12994d52 100644
+--- a/src/scan.c
++++ b/src/scan.c
+@@ -320,7 +320,7 @@ static int shm_create(XShmSegmentInfo *shm, XImage **ximg_ptr, int w, int h,
+ 
+ #if HAVE_XSHM
+ 	shm->shmid = shmget(IPC_PRIVATE,
+-	    xim->bytes_per_line * xim->height, IPC_CREAT | 0777);
++	    xim->bytes_per_line * xim->height, IPC_CREAT | 0600);
+ 
+ 	if (shm->shmid == -1) {
+ 		rfbErr("shmget(%s) failed.\n", name);
diff --git a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.16.bb b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.16.bb
index 92b3ac5..3633bbc 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.16.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/x11vnc/x11vnc_0.9.16.bb
@@ -11,6 +11,7 @@
 
 SRC_URI = "git://github.com/LibVNC/x11vnc;branch=master;protocol=https \
            file://starting-fix.patch \
+           file://CVE-2020-29074.patch \
            "
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_6.04.bb b/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_6.04.bb
index d24f666..dc909ed 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_6.04.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_6.04.bb
@@ -9,6 +9,8 @@
     file://0002-build-Do-not-build-po-files.patch \
     file://0001-configure-Ignore-CONF_STATUS-for-gtk-and-openGL-need.patch \
 "
+MIRRORS += "https://www.jwz.org/${BPN} https://ftp.osuosl.org/pub/blfs/conglomeration/${BPN}"
+
 SRC_URI[sha256sum] = "787014b29f0c5793ecc2d93e1109a049ff48ab0c29b851dab34f683ceef6b152"
 
 DEPENDS = "intltool-native libx11 libxext libxt libxft libxi glib-2.0-native bc-native libpam jpeg"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
index 3d97ea0..4d6e0e3 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
@@ -74,7 +74,7 @@
 either install it and add it to HOSTTOOLS, or add clang-native from meta-clang to dependency"
     fi
     fi
-
+    oe_runmake -C ${S} headers
     for i in ${TEST_LIST}
     do
         oe_runmake -C ${S}/tools/testing/selftests/${i}
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.0.bb b/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.0.bb
deleted file mode 100644
index 822e304..0000000
--- a/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.0.bb
+++ /dev/null
@@ -1,61 +0,0 @@
-SUMMARY = "The Geolocation Service"
-DESCRIPTION = "Geoclue is a D-Bus service that provides location information. \
-The primary goal of the Geoclue project is to make creating location-aware applications \
-as simple as possible, while the secondary goal is to ensure that no application \
-can access location information without explicit permission from user."
-LICENSE = "GPL-2.0-or-later"
-SECTION = "console/network"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=bdfdd4986a0853eb84eeba85f9d0c4d6"
-
-DEPENDS = "glib-2.0 dbus json-glib libsoup-3.0 intltool-native"
-
-inherit meson pkgconfig gtk-doc gobject-introspection vala useradd
-
-SRCREV = "bbfb6289dedb88cb8155d9f6868787d5432e1f90"
-SRC_URI = "git://gitlab.freedesktop.org/geoclue/geoclue.git;protocol=https;branch=master \
-    file://0001-libgeoclue-don-t-try-to-use-g-ir-scanner-when-intros.patch \
-"
-
-S = "${WORKDIR}/git"
-
-# Without this line, package is declared a library and named libgeoclue*
-AUTO_LIBNAME_PKGS = ""
-
-PACKAGECONFIG ??= "3g modem-gps cdma nmea lib"
-PACKAGECONFIG[3g] = "-D3g-source=true,-D3g-source=false,modemmanager"
-PACKAGECONFIG[modem-gps] = "-Dmodem-gps-source=true,-Dmodem-gps-source=false,modemmanager"
-PACKAGECONFIG[cdma] = "-Dcdma-source=true,-Dcdma-source=false,modemmanager"
-PACKAGECONFIG[nmea] = "-Dnmea-source=true,-Dnmea-source=false,avahi,avahi-daemon"
-PACKAGECONFIG[lib] = "-Dlibgeoclue=true,-Dlibgeoclue=false"
-
-GTKDOC_MESON_OPTION = "gtk-doc"
-
-EXTRA_OEMESON += " \
-    -Ddbus-sys-dir=${sysconfdir}/dbus-1/system.d \
-    -Ddemo-agent=false \
-"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 --shell /bin/nologin polkitd"
-
-do_install:append() {
-    if ${@bb.utils.contains('PACKAGECONFIG', 'modem-gps', 'true', 'false', d)}; then
-        # Fix up permissions on polkit rules.d to work with rpm4 constraints
-        chmod 700 ${D}/${datadir}/polkit-1/rules.d
-        chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
-    fi
-}
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1/system-services \
-    ${datadir}/polkit-1/rules.d \
-    ${libdir} \
-    ${systemd_unitdir} \
-    ${prefix}/libexec \
-"
-
-FILES:${PN}-dev += " \
-    ${datadir}/dbus-1/interfaces \
-    ${datadir}/gir-1.0 \
-"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.1.bb b/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.1.bb
new file mode 100644
index 0000000..2628b77
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-navigation/geoclue/geoclue_2.7.1.bb
@@ -0,0 +1,61 @@
+SUMMARY = "The Geolocation Service"
+DESCRIPTION = "Geoclue is a D-Bus service that provides location information. \
+The primary goal of the Geoclue project is to make creating location-aware applications \
+as simple as possible, while the secondary goal is to ensure that no application \
+can access location information without explicit permission from user."
+LICENSE = "GPL-2.0-or-later"
+SECTION = "console/network"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=bdfdd4986a0853eb84eeba85f9d0c4d6"
+
+DEPENDS = "glib-2.0 dbus json-glib libsoup-3.0 intltool-native"
+
+inherit meson pkgconfig gtk-doc gobject-introspection vala useradd
+
+SRCREV = "8a24f60969d4c235d9918796c38a6a9c42e10131"
+SRC_URI = "git://gitlab.freedesktop.org/geoclue/geoclue.git;protocol=https;branch=master \
+    file://0001-libgeoclue-don-t-try-to-use-g-ir-scanner-when-intros.patch \
+"
+
+S = "${WORKDIR}/git"
+
+# Without this line, package is declared a library and named libgeoclue*
+AUTO_LIBNAME_PKGS = ""
+
+PACKAGECONFIG ??= "3g modem-gps cdma nmea lib"
+PACKAGECONFIG[3g] = "-D3g-source=true,-D3g-source=false,modemmanager"
+PACKAGECONFIG[modem-gps] = "-Dmodem-gps-source=true,-Dmodem-gps-source=false,modemmanager"
+PACKAGECONFIG[cdma] = "-Dcdma-source=true,-Dcdma-source=false,modemmanager"
+PACKAGECONFIG[nmea] = "-Dnmea-source=true,-Dnmea-source=false,avahi,avahi-daemon"
+PACKAGECONFIG[lib] = "-Dlibgeoclue=true,-Dlibgeoclue=false"
+
+GTKDOC_MESON_OPTION = "gtk-doc"
+
+EXTRA_OEMESON += " \
+    -Ddbus-sys-dir=${sysconfdir}/dbus-1/system.d \
+    -Ddemo-agent=false \
+"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 --shell /bin/nologin polkitd"
+
+do_install:append() {
+    if ${@bb.utils.contains('PACKAGECONFIG', 'modem-gps', 'true', 'false', d)}; then
+        # Fix up permissions on polkit rules.d to work with rpm4 constraints
+        chmod 700 ${D}/${datadir}/polkit-1/rules.d
+        chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
+    fi
+}
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1/system-services \
+    ${datadir}/polkit-1/rules.d \
+    ${libdir} \
+    ${systemd_unitdir} \
+    ${prefix}/libexec \
+"
+
+FILES:${PN}-dev += " \
+    ${datadir}/dbus-1/interfaces \
+    ${datadir}/gir-1.0 \
+"
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Fixed-swig-host-contamination-issue.patch b/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Fixed-swig-host-contamination-issue.patch
new file mode 100644
index 0000000..5f2ecc1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Fixed-swig-host-contamination-issue.patch
@@ -0,0 +1,57 @@
+From 9a32d42dfc6713fd0085dd4563a934afc30ec097 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Sun, 19 Jul 2015 02:42:58 +0900
+Subject: [PATCH] Fixed swig host contamination issue
+
+The audit build uses swig to generate a python wrapper.
+Unfortunately, the swig info file references host include
+directories.  Some of these were previously noticed and
+eliminated, but the one fixed here was not.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Anders Hedlund <anders.hedlund@windriver.com>
+Signed-off-by: Joe Slater <jslater@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ bindings/swig/python3/Makefile.am | 3 ++-
+ bindings/swig/src/auditswig.i     | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/bindings/swig/python3/Makefile.am b/bindings/swig/python3/Makefile.am
+index 6131e80d..2fb7207b 100644
+--- a/bindings/swig/python3/Makefile.am
++++ b/bindings/swig/python3/Makefile.am
+@@ -23,6 +23,7 @@
+ CONFIG_CLEAN_FILES = *.loT *.rej *.orig
+ AM_CFLAGS = -fPIC -DPIC -fno-strict-aliasing $(PYTHON3_CFLAGS)
+ AM_CPPFLAGS = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
++STDINC ?= /usr/include
+ LIBS = $(top_builddir)/lib/libaudit.la
+ SWIG_FLAGS = -python -py3 -modern
+ SWIG_INCLUDES = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
+@@ -37,7 +38,7 @@ _audit_la_DEPENDENCIES =${top_srcdir}/lib/libaudit.h ${top_builddir}/lib/libaudi
+ _audit_la_LIBADD = ${top_builddir}/lib/libaudit.la
+ nodist__audit_la_SOURCES  = audit_wrap.c
+ audit.py audit_wrap.c: ${srcdir}/../src/auditswig.i 
+-	swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} ${srcdir}/../src/auditswig.i 
++	swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} -I$(STDINC) ${srcdir}/../src/auditswig.i
+ 
+ CLEANFILES = audit.py* audit_wrap.c *~
+ 
+diff --git a/bindings/swig/src/auditswig.i b/bindings/swig/src/auditswig.i
+index 9a2c5661..6cbb7295 100644
+--- a/bindings/swig/src/auditswig.i
++++ b/bindings/swig/src/auditswig.i
+@@ -43,7 +43,7 @@ typedef unsigned uid_t;
+  * generating setters against them: https://github.com/swig/swig/issues/1699
+  */
+ %ignore audit_rule_data::buf;
+-%include "/usr/include/linux/audit.h"
++%include "../lib/audit.h"
+ #define __extension__ /*nothing*/
+ %include <stdint.i>
+ %include "../lib/libaudit.h"
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Replace-__attribute_malloc__-with-__attribute__-__ma.patch b/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Replace-__attribute_malloc__-with-__attribute__-__ma.patch
deleted file mode 100644
index 23747c4..0000000
--- a/meta-openembedded/meta-oe/recipes-security/audit/audit/0001-Replace-__attribute_malloc__-with-__attribute__-__ma.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 79c8d6a2755c9dfa00a5e86378e89a94eef0504d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 9 Aug 2022 23:57:03 -0700
-Subject: [PATCH] Replace __attribute_malloc__ with 
- __attribute__((__malloc__))
-
-__attribute_malloc__ is not available on musl
-
-Fixes
-| ../../git/auparse/auparse.h:54:2: error: expected function body after function declarator
-|         __attribute_malloc__ __attr_dealloc (auparse_destroy, 1);
-|         ^
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- auparse/auparse.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/auparse/auparse.h b/auparse/auparse.h
-index 95cf256d..c7dbe5ff 100644
---- a/auparse/auparse.h
-+++ b/auparse/auparse.h
-@@ -51,7 +51,7 @@ typedef void (*auparse_callback_ptr)(auparse_state_t *au,
- void auparse_destroy(auparse_state_t *au);
- void auparse_destroy_ext(auparse_state_t *au, auparse_destroy_what_t what);
- auparse_state_t *auparse_init(ausource_t source, const void *b)
--	__attribute_malloc__ __attr_dealloc (auparse_destroy, 1);
-+	__attribute__((__malloc__)) __attr_dealloc (auparse_destroy, 1);
- int auparse_new_buffer(auparse_state_t *au, const char *data, size_t data_len)
- 	__attr_access ((__read_only__, 2, 3));
- int auparse_feed(auparse_state_t *au, const char *data, size_t data_len)
--- 
-2.37.1
-
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit/0002-Replace-__attribute_malloc__-with-__attribute__-__ma.patch b/meta-openembedded/meta-oe/recipes-security/audit/audit/0002-Replace-__attribute_malloc__-with-__attribute__-__ma.patch
new file mode 100644
index 0000000..7f0af74
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/audit/audit/0002-Replace-__attribute_malloc__-with-__attribute__-__ma.patch
@@ -0,0 +1,35 @@
+From 679cb57fa93984fed345dd3890cdbcbaa24e8518 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 9 Aug 2022 23:57:03 -0700
+Subject: [PATCH] Replace __attribute_malloc__ with __attribute__((__malloc__))
+
+__attribute_malloc__ is not available on musl
+
+Fixes
+| ../../git/auparse/auparse.h:54:2: error: expected function body after function declarator
+|         __attribute_malloc__ __attr_dealloc (auparse_destroy, 1);
+|         ^
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ auparse/auparse.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/auparse/auparse.h b/auparse/auparse.h
+index 5cb7402e..39156eff 100644
+--- a/auparse/auparse.h
++++ b/auparse/auparse.h
+@@ -54,7 +54,7 @@ typedef void (*auparse_callback_ptr)(auparse_state_t *au,
+ void auparse_destroy(auparse_state_t *au);
+ void auparse_destroy_ext(auparse_state_t *au, auparse_destroy_what_t what);
+ auparse_state_t *auparse_init(ausource_t source, const void *b)
+-	__attribute_malloc__ __attr_dealloc (auparse_destroy, 1);
++	__attribute__((__malloc__)) __attr_dealloc (auparse_destroy, 1);
+ int auparse_new_buffer(auparse_state_t *au, const char *data, size_t data_len)
+ 	__attr_access ((__read_only__, 2, 3));
+ int auparse_feed(auparse_state_t *au, const char *data, size_t data_len)
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch b/meta-openembedded/meta-oe/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch
deleted file mode 100644
index b023c80..0000000
--- a/meta-openembedded/meta-oe/recipes-security/audit/audit/Fixed-swig-host-contamination-issue.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 3d13f92c1bb293523670ba01aea7e655b00a6709 Mon Sep 17 00:00:00 2001
-From: Li xin <lixin.fnst@cn.fujitsu.com>
-Date: Sun, 19 Jul 2015 02:42:58 +0900
-Subject: [PATCH] audit: Fixed swig host contamination issue
-
-The audit build uses swig to generate a python wrapper.
-Unfortunately, the swig info file references host include
-directories.  Some of these were previously noticed and
-eliminated, but the one fixed here was not.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Anders Hedlund <anders.hedlund@windriver.com>
-Signed-off-by: Joe Slater <jslater@windriver.com>
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- bindings/swig/python3/Makefile.am | 3 ++-
- bindings/swig/src/auditswig.i     | 2 +-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
---- a/bindings/swig/python3/Makefile.am
-+++ b/bindings/swig/python3/Makefile.am
-@@ -23,6 +23,7 @@
- CONFIG_CLEAN_FILES = *.loT *.rej *.orig
- AM_CFLAGS = -fPIC -DPIC -fno-strict-aliasing $(PYTHON3_CFLAGS)
- AM_CPPFLAGS = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
-+STDINC ?= /usr/include
- LIBS = $(top_builddir)/lib/libaudit.la
- SWIG_FLAGS = -python -py3 -modern
- SWIG_INCLUDES = -I. -I$(top_builddir) -I${top_srcdir}/lib $(PYTHON3_INCLUDES)
-@@ -37,7 +38,7 @@ _audit_la_DEPENDENCIES =${top_srcdir}/li
- _audit_la_LIBADD = ${top_builddir}/lib/libaudit.la
- nodist__audit_la_SOURCES  = audit_wrap.c
- audit.py audit_wrap.c: ${srcdir}/../src/auditswig.i 
--	swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} ${srcdir}/../src/auditswig.i 
-+	swig -o audit_wrap.c ${SWIG_FLAGS} ${SWIG_INCLUDES} -I$(STDINC) ${srcdir}/../src/auditswig.i
- 
- CLEANFILES = audit.py* audit_wrap.c *~
- 
---- a/bindings/swig/src/auditswig.i
-+++ b/bindings/swig/src/auditswig.i
-@@ -39,7 +39,7 @@ signed
- #define __attribute(X) /*nothing*/
- typedef unsigned __u32;
- typedef unsigned uid_t;
--%include "/usr/include/linux/audit.h"
-+%include "../lib/audit.h"
- #define __extension__ /*nothing*/
- %include <stdint.i>
- %include "../lib/libaudit.h"
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.1.bb b/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.1.bb
deleted file mode 100644
index 7ed2fd2..0000000
--- a/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.1.bb
+++ /dev/null
@@ -1,116 +0,0 @@
-SUMMARY = "User space tools for kernel auditing"
-DESCRIPTION = "The audit package contains the user space utilities for \
-storing and searching the audit records generated by the audit subsystem \
-in the Linux kernel."
-HOMEPAGE = "http://people.redhat.com/sgrubb/audit/"
-SECTION = "base"
-LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-SRC_URI = "git://github.com/linux-audit/${BPN}-userspace.git;branch=master;protocol=https \
-           file://Fixed-swig-host-contamination-issue.patch \
-           file://0001-Replace-__attribute_malloc__-with-__attribute__-__ma.patch \
-           file://auditd \
-           file://auditd.service \
-           file://audit-volatile.conf \
-"
-
-S = "${WORKDIR}/git"
-SRCREV = "6e367585a899231da05797c6126f8bb01febb2f5"
-
-inherit autotools python3targetconfig update-rc.d systemd
-
-UPDATERCPN = "auditd"
-INITSCRIPT_NAME = "auditd"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_PACKAGES = "auditd"
-SYSTEMD_SERVICE:auditd = "auditd.service"
-
-DEPENDS = "python3 tcp-wrappers libcap-ng linux-libc-headers swig-native"
-
-EXTRA_OECONF = " --with-libwrap \
-        --enable-gssapi-krb5=no \
-        --with-libcap-ng=yes \
-        --with-python3=yes \
-        --libdir=${base_libdir} \
-        --sbindir=${base_sbindir} \
-        --without-python \
-        --without-golang \
-        --disable-zos-remote \
-        --with-arm=yes \
-        --with-aarch64=yes \
-        "
-
-EXTRA_OEMAKE = "PYLIBVER='python${PYTHON_BASEVERSION}' \
-	PYINC='${STAGING_INCDIR}/$(PYLIBVER)' \
-	pyexecdir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \
-	STDINC='${STAGING_INCDIR}' \
-	pkgconfigdir=${libdir}/pkgconfig \
-	"
-
-SUMMARY:audispd-plugins = "Plugins for the audit event dispatcher"
-DESCRIPTION:audispd-plugins = "The audispd-plugins package provides plugins for the real-time \
-interface to the audit system, audispd. These plugins can do things \
-like relay events to remote machines or analyze events for suspicious \
-behavior."
-
-PACKAGES =+ "audispd-plugins"
-PACKAGES += "auditd ${PN}-python"
-
-FILES:${PN} = "${sysconfdir}/libaudit.conf ${base_libdir}/libaudit.so.1* ${base_libdir}/libauparse.so.*"
-FILES:auditd = "${bindir}/* ${base_sbindir}/* ${sysconfdir}/* ${datadir}/audit/*"
-FILES:audispd-plugins = "${sysconfdir}/audit/audisp-remote.conf \
-	${sysconfdir}/audit/plugins.d/au-remote.conf \
-	${sysconfdir}/audit/plugins.d/syslog.conf \
-	${base_sbindir}/audisp-remote \
-	${base_sbindir}/audisp-syslog \
-	${localstatedir}/spool/audit \
-	"
-FILES:${PN}-dbg += "${libdir}/python${PYTHON_BASEVERSION}/*/.debug"
-FILES:${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}"
-
-CONFFILES:auditd = "${sysconfdir}/audit/audit.rules"
-
-do_configure:prepend() {
-	sed -e 's|buf\[];|buf[0];|g'  ${STAGING_INCDIR}/linux/audit.h > ${S}/lib/audit.h
-	sed -i -e 's|#include <linux/audit.h>|#include "audit.h"|g' ${S}/lib/libaudit.h
-}
-
-do_install:append() {
-	sed -i -e 's|#include "audit.h"|#include <linux/audit.h>|g' ${D}${includedir}/libaudit.h
-
-	rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.a
-	rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.la
-
-	# reuse auditd config
-	[ ! -e ${D}/etc/default ] && mkdir ${D}/etc/default
-	mv ${D}/etc/sysconfig/auditd ${D}/etc/default
-	rmdir ${D}/etc/sysconfig/
-
-	# replace init.d
-	install -D -m 0755 ${WORKDIR}/auditd ${D}/etc/init.d/auditd
-	rm -rf ${D}/etc/rc.d
-
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-		# install systemd unit files
-		install -d ${D}${systemd_unitdir}/system
-		install -m 0644 ${WORKDIR}/auditd.service ${D}${systemd_unitdir}/system
-
-		install -d ${D}${sysconfdir}/tmpfiles.d/
-		install -m 0644 ${WORKDIR}/audit-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
-	fi
-
-	# audit-2.5 doesn't install any rules by default, so we do that here
-	mkdir -p ${D}/etc/audit ${D}/etc/audit/rules.d
-	cp ${S}/rules/10-base-config.rules ${D}/etc/audit/rules.d/audit.rules
-
-	chmod 750 ${D}/etc/audit ${D}/etc/audit/rules.d
-	chmod 640 ${D}/etc/audit/auditd.conf ${D}/etc/audit/rules.d/audit.rules
-
-	# Based on the audit.spec "Copy default rules into place on new installation"
-	cp ${D}/etc/audit/rules.d/audit.rules ${D}/etc/audit/audit.rules
-
-	# Create /var/spool/audit directory for audisp-remote
-	install -m 0700 -d ${D}${localstatedir}/spool/audit
-}
diff --git a/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.2.bb b/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.2.bb
new file mode 100644
index 0000000..5380e90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/audit/audit_3.1.2.bb
@@ -0,0 +1,116 @@
+SUMMARY = "User space tools for kernel auditing"
+DESCRIPTION = "The audit package contains the user space utilities for \
+storing and searching the audit records generated by the audit subsystem \
+in the Linux kernel."
+HOMEPAGE = "http://people.redhat.com/sgrubb/audit/"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "git://github.com/linux-audit/${BPN}-userspace.git;branch=master;protocol=https \
+           file://0001-Fixed-swig-host-contamination-issue.patch \
+           file://0002-Replace-__attribute_malloc__-with-__attribute__-__ma.patch \
+           file://auditd \
+           file://auditd.service \
+           file://audit-volatile.conf \
+"
+
+S = "${WORKDIR}/git"
+SRCREV = "572eb7d4fe926e7c1c52166d08e78af54877cbc5"
+
+inherit autotools python3targetconfig update-rc.d systemd
+
+UPDATERCPN = "auditd"
+INITSCRIPT_NAME = "auditd"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_PACKAGES = "auditd"
+SYSTEMD_SERVICE:auditd = "auditd.service"
+
+DEPENDS = "python3 tcp-wrappers libcap-ng linux-libc-headers swig-native"
+
+EXTRA_OECONF = " --with-libwrap \
+        --enable-gssapi-krb5=no \
+        --with-libcap-ng=yes \
+        --with-python3=yes \
+        --libdir=${base_libdir} \
+        --sbindir=${base_sbindir} \
+        --without-python \
+        --without-golang \
+        --disable-zos-remote \
+        --with-arm=yes \
+        --with-aarch64=yes \
+        "
+
+EXTRA_OEMAKE = "PYLIBVER='python${PYTHON_BASEVERSION}' \
+	PYINC='${STAGING_INCDIR}/$(PYLIBVER)' \
+	pyexecdir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \
+	STDINC='${STAGING_INCDIR}' \
+	pkgconfigdir=${libdir}/pkgconfig \
+	"
+
+SUMMARY:audispd-plugins = "Plugins for the audit event dispatcher"
+DESCRIPTION:audispd-plugins = "The audispd-plugins package provides plugins for the real-time \
+interface to the audit system, audispd. These plugins can do things \
+like relay events to remote machines or analyze events for suspicious \
+behavior."
+
+PACKAGES =+ "audispd-plugins"
+PACKAGES += "auditd ${PN}-python"
+
+FILES:${PN} = "${sysconfdir}/libaudit.conf ${base_libdir}/libaudit.so.1* ${base_libdir}/libauparse.so.*"
+FILES:auditd = "${bindir}/* ${base_sbindir}/* ${sysconfdir}/* ${datadir}/audit/*"
+FILES:audispd-plugins = "${sysconfdir}/audit/audisp-remote.conf \
+	${sysconfdir}/audit/plugins.d/au-remote.conf \
+	${sysconfdir}/audit/plugins.d/syslog.conf \
+	${base_sbindir}/audisp-remote \
+	${base_sbindir}/audisp-syslog \
+	${localstatedir}/spool/audit \
+	"
+FILES:${PN}-dbg += "${libdir}/python${PYTHON_BASEVERSION}/*/.debug"
+FILES:${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}"
+
+CONFFILES:auditd = "${sysconfdir}/audit/audit.rules"
+
+do_configure:prepend() {
+	sed -e 's|buf\[];|buf[0];|g'  ${STAGING_INCDIR}/linux/audit.h > ${S}/lib/audit.h
+	sed -i -e 's|#include <linux/audit.h>|#include "audit.h"|g' ${S}/lib/libaudit.h
+}
+
+do_install:append() {
+	sed -i -e 's|#include "audit.h"|#include <linux/audit.h>|g' ${D}${includedir}/libaudit.h
+
+	rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.a
+	rm -f ${D}/${libdir}/python${PYTHON_BASEVERSION}/site-packages/*.la
+
+	# reuse auditd config
+	[ ! -e ${D}/etc/default ] && mkdir ${D}/etc/default
+	mv ${D}/etc/sysconfig/auditd ${D}/etc/default
+	rmdir ${D}/etc/sysconfig/
+
+	# replace init.d
+	install -D -m 0755 ${WORKDIR}/auditd ${D}/etc/init.d/auditd
+	rm -rf ${D}/etc/rc.d
+
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+		# install systemd unit files
+		install -d ${D}${systemd_unitdir}/system
+		install -m 0644 ${WORKDIR}/auditd.service ${D}${systemd_unitdir}/system
+
+		install -d ${D}${sysconfdir}/tmpfiles.d/
+		install -m 0644 ${WORKDIR}/audit-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
+	fi
+
+	# audit-2.5 doesn't install any rules by default, so we do that here
+	mkdir -p ${D}/etc/audit ${D}/etc/audit/rules.d
+	cp ${S}/rules/10-base-config.rules ${D}/etc/audit/rules.d/audit.rules
+
+	chmod 750 ${D}/etc/audit ${D}/etc/audit/rules.d
+	chmod 640 ${D}/etc/audit/auditd.conf ${D}/etc/audit/rules.d/audit.rules
+
+	# Based on the audit.spec "Copy default rules into place on new installation"
+	cp ${D}/etc/audit/rules.d/audit.rules ${D}/etc/audit/audit.rules
+
+	# Create /var/spool/audit directory for audisp-remote
+	install -m 0700 -d ${D}${localstatedir}/spool/audit
+}
diff --git a/meta-openembedded/meta-oe/recipes-security/usbguard/usbguard_1.1.2.bb b/meta-openembedded/meta-oe/recipes-security/usbguard/usbguard_1.1.2.bb
index 4e96b4f..c062f27 100644
--- a/meta-openembedded/meta-oe/recipes-security/usbguard/usbguard_1.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-security/usbguard/usbguard_1.1.2.bb
@@ -31,6 +31,7 @@
 PACKAGECONFIG ?= "\
     openssl \
     ${@bb.utils.filter('DISTRO_FEATURES', 'polkit', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'seccomp', d)} \
     ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-support/appstream/appstream/0001-fix-crosscompile.patch b/meta-openembedded/meta-oe/recipes-support/appstream/appstream/0001-fix-crosscompile.patch
deleted file mode 100644
index fe8dcff..0000000
--- a/meta-openembedded/meta-oe/recipes-support/appstream/appstream/0001-fix-crosscompile.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 6ab00a4279823829a9b82dc9e4d055da4de88c6e Mon Sep 17 00:00:00 2001
-From: Markus Volk <f_l_k@t-online.de>
-Date: Mon, 12 Dec 2022 15:42:42 +0100
-Subject: [PATCH] fix crosscompile
-
-Signed-off-by: Markus Volk <f_l_k@t-online.de>
-
-Upstream-Status: Inappropriate [oe-specific]
----
- data/meson.build  | 2 +-
- meson.build       | 2 +-
- tools/meson.build | 9 +++++++++
- 3 files changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/data/meson.build b/data/meson.build
-index aea0cb25..1a085fc9 100644
---- a/data/meson.build
-+++ b/data/meson.build
-@@ -14,7 +14,7 @@ install_data('its/metainfo.loc',
- metainfo_with_relinfo = custom_target('gen-output',
-     input : ['../NEWS', 'org.freedesktop.appstream.cli.metainfo.xml'],
-     output : ['nol10n_withrelinfo_org.freedesktop.appstream.cli.metainfo.xml'],
--    command : [ascli_exe, 'news-to-metainfo', '--limit=6', '@INPUT0@', '@INPUT1@', '@OUTPUT@']
-+    command : ['appstreamcli', 'news-to-metainfo', '--limit=6', '@INPUT0@', '@INPUT1@', '@OUTPUT@']
- )
- 
- metainfo_i18n = i18n.itstool_join(
-diff --git a/meson.build b/meson.build
-index fd0e3373..2f273ada 100644
---- a/meson.build
-+++ b/meson.build
-@@ -124,7 +124,7 @@ if get_option ('gir')
-     dependency('gobject-introspection-1.0', version: '>=1.56')
- endif
- 
--stemmer_inc_dirs = include_directories(['/usr/include'])
-+stemmer_inc_dirs = include_directories([''])
- if get_option('stemming')
-     stemmer_lib = cc.find_library('stemmer', required: true)
-     if not cc.has_header('libstemmer.h')
--- 
-2.34.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/appstream/appstream_0.16.2.bb b/meta-openembedded/meta-oe/recipes-support/appstream/appstream_0.16.2.bb
deleted file mode 100644
index 240e63a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/appstream/appstream_0.16.2.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "AppStream is a collaborative effort for making machine-readable software metadata easily available."
-HOMEPAGE = "https://github.com/ximion/appstream"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=435ed639f84d4585d93824e7da3d85da"
-
-DEPENDS = " \
-    appstream-native \
-    curl-native \
-    curl \
-    docbook-xml-dtd4-native \
-    gperf-native \
-    glib-2.0 \
-    libyaml \
-    libxml2 \
-    libxmlb \
-    libxslt-native \
-    itstool-native \
-    docbook-xsl-stylesheets-native \
-    python3-pygments-native \
-"
-
-inherit meson gobject-introspection gettext gtk-doc pkgconfig vala
-
-GIR_MESON_OPTION = "gir"
-
-SRC_URI = "https://www.freedesktop.org/software/appstream/releases/AppStream-${PV}.tar.xz"
-SRC_URI:append:class-target = " file://0001-fix-crosscompile.patch"
-SRC_URI[sha256sum] = "f9cb80bd388fbf06be268afa7f2d65863c85d605ad874b905094f3982d03f232"
-
-S = "${WORKDIR}/AppStream-${PV}"
-
-PACKAGECONFIG ?= "stemming ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-
-PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
-PACKAGECONFIG[stemming] = "-Dstemming=true,-Dstemming=false,libstemmer"
-
-FILES:${PN} += "${datadir}"
-
-EXTRA_OEMESON:append = " -Ddocs=false"
-EXTRA_OEMESON:class-target += "--cross-file=${WORKDIR}/meson-${PN}.cross"
-
-do_write_config:append:class-target() {
-    cat >${WORKDIR}/meson-${PN}.cross <<EOF
-[binaries]
-appstreamcli = '${STAGING_BINDIR_NATIVE}/appstreamcli'
-EOF
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/boost-sml/boost-sml_git.bb b/meta-openembedded/meta-oe/recipes-support/boost-sml/boost-sml_git.bb
index 18dc885..378be1a 100644
--- a/meta-openembedded/meta-oe/recipes-support/boost-sml/boost-sml_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/boost-sml/boost-sml_git.bb
@@ -8,10 +8,10 @@
 
 DEPENDS += "boost qemu-native"
 
-PV = "1.1.8"
+PV = "1.1.9"
 
 SRC_URI = "git://github.com/boost-ext/sml.git;protocol=https;branch=master"
-SRCREV = "8eb63a8b77bb662075dd36b316e53f75e605fd0f"
+SRCREV = "751b6f10b73c086e0e8850a7ef5b5aea2136831b"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib/a53f123040998744602f190944464af0e159ea19.patch b/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib/a53f123040998744602f190944464af0e159ea19.patch
new file mode 100644
index 0000000..c93b766
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib/a53f123040998744602f190944464af0e159ea19.patch
@@ -0,0 +1,30 @@
+From a53f123040998744602f190944464af0e159ea19 Mon Sep 17 00:00:00 2001
+From: jjll <jjll@gmv.com>
+Date: Wed, 6 Sep 2023 20:47:41 +0200
+Subject: [PATCH] Compatibility with boost 1.83
+
+Upstream-Status: Backport [https://github.com/cpp-netlib/cpp-netlib/pull/902]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libs/network/src/server_request_parsers_impl.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/boost/network/protocol/http/server/impl/parsers.ipp
++++ b/boost/network/protocol/http/server/impl/parsers.ipp
+@@ -13,6 +13,7 @@
+ #include <tuple>
+ #include <boost/fusion/include/std_tuple.hpp>
+ #include <boost/network/protocol/http/message/header.hpp>
++#include <boost/regex/pending/unicode_iterator.hpp>
+ 
+ #ifdef BOOST_NETWORK_NO_LIB
+ #ifndef BOOST_NETWORK_INLINE
+@@ -32,7 +33,7 @@ typedef std::basic_string<uint32_t> u32_
+ template <>  // <typename Attrib, typename T, typename Enable>
+ struct assign_to_container_from_value<std::string, u32_string, void> {
+   static void call(u32_string const& val, std::string& attr) {
+-    u32_to_u8_iterator<u32_string::const_iterator> begin = val.begin(),
++    boost::u32_to_u8_iterator<u32_string::const_iterator> begin = val.begin(),
+                                                    end = val.end();
+     for (; begin != end; ++begin) attr += *begin;
+   }
diff --git a/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib_git.bb b/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib_git.bb
index 3c271ae..bda5177 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cpp-netlib/cpp-netlib_git.bb
@@ -8,13 +8,13 @@
 SECTION = "libs"
 LICENSE = "BSL-1.0 & MIT & Python-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+PV = "0.13.0"
 
+SRCREV = "31d304cdf52b485f465ada433d8905171b61cbff"
 SRC_URI = "\
     git://github.com/cpp-netlib/cpp-netlib.git;protocol=https;branch=0.13-release  \
+    file://a53f123040998744602f190944464af0e159ea19.patch \
 "
-SRC_URI[sha256sum] = "0b9255bb0668d89867a1f367d770f12d7038db4f5b6111774ef032f669cccad4"
-
-SRCREV = "ca95f04d140acf619892ee02a82e930dd91ff7d4"
 
 S = "${WORKDIR}/git"
 
@@ -24,3 +24,7 @@
 
 EXTRA_OECMAKE:append = " -DCPP-NETLIB_BUILD_TESTS=OFF -DCPP-NETLIB_BUILD_EXAMPLES=OFF"
 
+do_install:append() {
+    sed -i -e 's|${RECIPE_SYSROOT}||g' ${D}${libdir}/cmake/cppnetlib/cppnetlibConfig.cmake
+    sed -i -e 's|${RECIPE_SYSROOT}||g' ${D}${libdir}/cmake/cppnetlib/cppnetlibTargets-noconfig.cmake
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.27.6.bb b/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.27.6.bb
deleted file mode 100644
index 6ccd9fb..0000000
--- a/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.27.6.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Exif, Iptc and XMP metadata manipulation library and tools"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=625f055f41728f84a8d7938acc35bdc2"
-
-DEPENDS = "zlib expat"
-
-SRC_URI = "https://github.com/Exiv2/${BPN}/releases/download/v${PV}/${BP}-Source.tar.gz"
-SRC_URI[sha256sum] = "4c192483a1125dc59a3d70b30d30d32edace9e14adf52802d2f853abf72db8a6"
-# Once patch is obsolete (project should be aware due to PRs), dos2unix can be removed either
-# inherit dos2unix
-S = "${WORKDIR}/${BP}-Source"
-
-inherit cmake gettext
-
-do_install:append:class-target() {
-    # reproducibility: remove build host path
-    sed -i ${D}${libdir}/cmake/exiv2/exiv2Config.cmake \
-        -e 's:${STAGING_DIR_HOST}::g'
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.28.0.bb b/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.28.0.bb
new file mode 100644
index 0000000..958810c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/exiv2/exiv2_0.28.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Exif, Iptc and XMP metadata manipulation library and tools"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=625f055f41728f84a8d7938acc35bdc2"
+
+DEPENDS = "zlib expat brotli libinih"
+
+SRC_URI = "https://github.com/Exiv2/${BPN}/releases/download/v${PV}/${BP}-Source.tar.gz"
+SRC_URI[sha256sum] = "89af3b5ef7277753ef7a7b5374ae017c6b9e304db3b688f1948e73e103491f3d"
+# Once patch is obsolete (project should be aware due to PRs), dos2unix can be removed either
+# inherit dos2unix
+S = "${WORKDIR}/${BP}-Source"
+
+inherit cmake gettext
+
+do_install:append:class-target() {
+    # reproducibility: remove build host path
+    sed -i ${D}${libdir}/cmake/exiv2/exiv2Config.cmake \
+        -e 's:${STAGING_DIR_HOST}::g'
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/fftw/fftw/run-ptest b/meta-openembedded/meta-oe/recipes-support/fftw/fftw/run-ptest
index 6d8dd96..4d19057 100644
--- a/meta-openembedded/meta-oe/recipes-support/fftw/fftw/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/fftw/fftw/run-ptest
@@ -10,21 +10,18 @@
 /usr/bin/perl -w ./check.pl  -r -c=30 -v `pwd`/benchl
 fftwl_result=$?
 
-echo -n "fftw  test result:"
 if [ $fftw_result  = "0" ]; then
-	echo PASSED
+	echo "PASS: fftw"
 else
-	echo FAILED
+	echo "FAIL: fftw"
 fi
-echo -n "fftwf test result:"
 if [ $fftwf_result = "0" ]; then
-	echo PASSED
+	echo "PASS: fftwf"
 else
-	echo FAILED
+	echo "FAIL: fftwf"
 fi
-echo -n "fftwl test result:"
 if [ $fftwl_result = "0" ]; then
-	echo PASSED
+	echo "PASS: fftwl"
 else
-	echo FAILED
+	echo "FAIL: fftwl"
 fi
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-const-qualifier-error.patch b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-const-qualifier-error.patch
new file mode 100644
index 0000000..87a456d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-const-qualifier-error.patch
@@ -0,0 +1,57 @@
+From 761b4df04a141cc8c9507c741e4046c6c6b00491 Mon Sep 17 00:00:00 2001
+From: Wang Mingyu <wangmy@fujitsu.com>
+Date: Mon, 11 Sep 2023 09:00:39 +0000
+Subject: [PATCH] Fix const qualifier error
+
+Fixes clang error
+error: incompatible function pointer types assigning to 'OBJECT_NEW_FN' (aka 'void *(*)(void *)') from 'void *(const void *)' [-Wincompatible-function-pointer-types]
+|         obj->fnObjectNew = uwac_event_clone;
+|                          ^ ~~~~~~~~~~~~~~~~
+
+https://github.com/FreeRDP/FreeRDP/commit/6e3c00725aae99d03a0baa65430eceddebd9dee8
+Upstream-Status: Backport
+
+Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
+---
+ libfreerdp/codec/rfx.c            | 4 ++--
+ winpr/include/winpr/collections.h | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c
+index ccbc5af..eec7365 100644
+--- a/libfreerdp/codec/rfx.c
++++ b/libfreerdp/codec/rfx.c
+@@ -153,7 +153,7 @@ static void rfx_tile_init(void* obj)
+ 	}
+ }
+ 
+-static void* rfx_decoder_tile_new(void* val)
++static void* rfx_decoder_tile_new(const void* val)
+ {
+ 	RFX_TILE* tile = NULL;
+ 	WINPR_UNUSED(val);
+@@ -184,7 +184,7 @@ static void rfx_decoder_tile_free(void* obj)
+ 	}
+ }
+ 
+-static void* rfx_encoder_tile_new(void* val)
++static void* rfx_encoder_tile_new(const void* val)
+ {
+ 	WINPR_UNUSED(val);
+ 	return calloc(1, sizeof(RFX_TILE));
+diff --git a/winpr/include/winpr/collections.h b/winpr/include/winpr/collections.h
+index 807f011..b8c8d9d 100644
+--- a/winpr/include/winpr/collections.h
++++ b/winpr/include/winpr/collections.h
+@@ -36,7 +36,7 @@ extern "C"
+ {
+ #endif
+ 
+-	typedef void* (*OBJECT_NEW_FN)(void* val);
++	typedef void* (*OBJECT_NEW_FN)(const void* val);
+ 	typedef void (*OBJECT_INIT_FN)(void* obj);
+ 	typedef void (*OBJECT_UNINIT_FN)(void* obj);
+ 	typedef void (*OBJECT_FREE_FN)(void* obj);
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.10.0.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.10.0.bb
deleted file mode 100644
index 4cb4526..0000000
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.10.0.bb
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (C) 2010-2012 O.S. Systems Software Ltda. All Rights Reserved
-# Released under the MIT license
-
-DESCRIPTION = "FreeRDP RDP client & server library"
-HOMEPAGE = "http://www.freerdp.com"
-DEPENDS = "openssl alsa-lib libusb1"
-SECTION = "net"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-inherit pkgconfig cmake gitpkgv
-
-PE = "1"
-PKGV = "${GITPKGVTAG}"
-
-SRCREV = "7471ae383e7b7a613f275e19f7b54958a193c891"
-SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
-           file://winpr-makecert-Build-with-install-RPATH.patch \
-           "
-
-S = "${WORKDIR}/git"
-
-EXTRA_OECMAKE += " \
-    -DWITH_ALSA=ON \
-    -DWITH_FFMPEG=OFF \
-    -DWITH_CUNIT=OFF \
-    -DWITH_NEON=OFF \
-    -DBUILD_STATIC_LIBS=OFF \
-    -DCMAKE_POSITION_INDEPENDANT_CODE=ON \
-    -DWITH_MANPAGES=OFF \
-    -DPROXY_PLUGINDIR=${libdir}/freerdp/proxy/plugins \
-"
-
-PACKAGECONFIG ??= " \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'directfb pam pulseaudio wayland x11', d)}\
-    gstreamer cups pcsc server \
-"
-
-X11_DEPS = "virtual/libx11 libxinerama libxext libxcursor libxv libxi libxrender libxfixes libxdamage libxrandr libxkbfile"
-PACKAGECONFIG[x11] = "-DWITH_X11=ON -DWITH_XINERAMA=ON -DWITH_XEXT=ON -DWITH_XCURSOR=ON -DWITH_XV=ON -DWITH_XI=ON -DWITH_XRENDER=ON -DWITH_XFIXES=ON -DWITH_XDAMAGE=ON -DWITH_XRANDR=ON -DWITH_XKBFILE=ON,-DWITH_X11=OFF,${X11_DEPS}"
-PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland wayland-native libxkbcommon"
-PACKAGECONFIG[directfb] = "-DWITH_DIRECTFB=ON,-DWITH_DIRECTFB=OFF,directfb"
-PACKAGECONFIG[pam] = "-DWITH_PAM=ON,-DWITH_PAM=OFF,libpam"
-PACKAGECONFIG[pcsc] = "-DWITH_PCSC=ON,-DWITH_PCSC=OFF,pcsc-lite"
-PACKAGECONFIG[pulseaudio] = "-DWITH_PULSEAUDIO=ON,-DWITH_PULSEAUDIO=OFF,pulseaudio"
-PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER_1_0=ON,-DWITH_GSTREAMER_1_0=OFF,gstreamer1.0 gstreamer1.0-plugins-base"
-PACKAGECONFIG[cups] = "-DWITH_CUPS=ON,-DWITH_CUPS=OFF,cups"
-PACKAGECONFIG[server] = "-DWITH_SERVER=ON,-DWITH_SERVER=OFF"
-
-PACKAGES =+ "libfreerdp"
-
-LEAD_SONAME = "libfreerdp.so"
-FILES:libfreerdp = "${libdir}/lib*${SOLIBS}"
-
-PACKAGES_DYNAMIC += "^libfreerdp-plugin-.*"
-
-do_configure:append() {
-    sed -i -e 's|${WORKDIR}||g' ${B}/buildflags.h
-}
-
-# we will need winpr-makecert to generate TLS certificates
-do_install:append () {
-    install -d ${D}${bindir}
-    install -m755 winpr/tools/makecert-cli/winpr-makecert ${D}${bindir}
-    rm -rf ${D}${libdir}/cmake
-    rm -rf ${D}${libdir}/freerdp
-}
-
-python populate_packages:prepend () {
-    freerdp_root = d.expand('${libdir}/freerdp')
-
-    do_split_packages(d, freerdp_root, r'^(audin_.*)\.so$',
-        output_pattern='libfreerdp-plugin-%s',
-        description='FreeRDP plugin %s',
-        prepend=True, extra_depends='libfreerdp-plugin-audin')
-
-    do_split_packages(d, freerdp_root, r'^(rdpsnd_.*)\.so$',
-        output_pattern='libfreerdp-plugin-%s',
-        description='FreeRDP plugin %s',
-        prepend=True, extra_depends='libfreerdp-plugin-rdpsnd')
-
-    do_split_packages(d, freerdp_root, r'^(tsmf_.*)\.so$',
-        output_pattern='libfreerdp-plugin-%s',
-        description='FreeRDP plugin %s',
-        prepend=True, extra_depends='libfreerdp-plugin-tsmf')
-
-    do_split_packages(d, freerdp_root, r'^([^-]*)\.so$',
-        output_pattern='libfreerdp-plugin-%s',
-        description='FreeRDP plugin %s',
-        prepend=True, extra_depends='')
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb
new file mode 100644
index 0000000..063a63b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb
@@ -0,0 +1,92 @@
+# Copyright (C) 2010-2012 O.S. Systems Software Ltda. All Rights Reserved
+# Released under the MIT license
+
+DESCRIPTION = "FreeRDP RDP client & server library"
+HOMEPAGE = "http://www.freerdp.com"
+DEPENDS = "openssl alsa-lib libusb1"
+SECTION = "net"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pkgconfig cmake gitpkgv
+
+PE = "1"
+PKGV = "${GITPKGVTAG}"
+
+SRCREV = "9d3d40bf3e429c0cd6609f686c0e73ed0eff0a07"
+SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
+           file://winpr-makecert-Build-with-install-RPATH.patch \
+           file://0001-Fix-const-qualifier-error.patch \
+           "
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE += " \
+    -DWITH_ALSA=ON \
+    -DWITH_FFMPEG=OFF \
+    -DWITH_CUNIT=OFF \
+    -DWITH_NEON=OFF \
+    -DBUILD_STATIC_LIBS=OFF \
+    -DCMAKE_POSITION_INDEPENDANT_CODE=ON \
+    -DWITH_MANPAGES=OFF \
+    -DPROXY_PLUGINDIR=${libdir}/freerdp/proxy/plugins \
+"
+
+PACKAGECONFIG ??= " \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'directfb pam pulseaudio wayland x11', d)}\
+    gstreamer cups pcsc server \
+"
+
+X11_DEPS = "virtual/libx11 libxinerama libxext libxcursor libxv libxi libxrender libxfixes libxdamage libxrandr libxkbfile"
+PACKAGECONFIG[x11] = "-DWITH_X11=ON -DWITH_XINERAMA=ON -DWITH_XEXT=ON -DWITH_XCURSOR=ON -DWITH_XV=ON -DWITH_XI=ON -DWITH_XRENDER=ON -DWITH_XFIXES=ON -DWITH_XDAMAGE=ON -DWITH_XRANDR=ON -DWITH_XKBFILE=ON,-DWITH_X11=OFF,${X11_DEPS}"
+PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland wayland-native libxkbcommon"
+PACKAGECONFIG[directfb] = "-DWITH_DIRECTFB=ON,-DWITH_DIRECTFB=OFF,directfb"
+PACKAGECONFIG[pam] = "-DWITH_PAM=ON,-DWITH_PAM=OFF,libpam"
+PACKAGECONFIG[pcsc] = "-DWITH_PCSC=ON,-DWITH_PCSC=OFF,pcsc-lite"
+PACKAGECONFIG[pulseaudio] = "-DWITH_PULSEAUDIO=ON,-DWITH_PULSEAUDIO=OFF,pulseaudio"
+PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER_1_0=ON,-DWITH_GSTREAMER_1_0=OFF,gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[cups] = "-DWITH_CUPS=ON,-DWITH_CUPS=OFF,cups"
+PACKAGECONFIG[server] = "-DWITH_SERVER=ON,-DWITH_SERVER=OFF"
+
+PACKAGES =+ "libfreerdp"
+
+LEAD_SONAME = "libfreerdp.so"
+FILES:libfreerdp = "${libdir}/lib*${SOLIBS}"
+
+PACKAGES_DYNAMIC += "^libfreerdp-plugin-.*"
+
+do_configure:append() {
+    sed -i -e 's|${WORKDIR}||g' ${B}/buildflags.h
+}
+
+# we will need winpr-makecert to generate TLS certificates
+do_install:append () {
+    install -d ${D}${bindir}
+    install -m755 winpr/tools/makecert-cli/winpr-makecert ${D}${bindir}
+    rm -rf ${D}${libdir}/cmake
+    rm -rf ${D}${libdir}/freerdp
+}
+
+python populate_packages:prepend () {
+    freerdp_root = d.expand('${libdir}/freerdp')
+
+    do_split_packages(d, freerdp_root, r'^(audin_.*)\.so$',
+        output_pattern='libfreerdp-plugin-%s',
+        description='FreeRDP plugin %s',
+        prepend=True, extra_depends='libfreerdp-plugin-audin')
+
+    do_split_packages(d, freerdp_root, r'^(rdpsnd_.*)\.so$',
+        output_pattern='libfreerdp-plugin-%s',
+        description='FreeRDP plugin %s',
+        prepend=True, extra_depends='libfreerdp-plugin-rdpsnd')
+
+    do_split_packages(d, freerdp_root, r'^(tsmf_.*)\.so$',
+        output_pattern='libfreerdp-plugin-%s',
+        description='FreeRDP plugin %s',
+        prepend=True, extra_depends='libfreerdp-plugin-tsmf')
+
+    do_split_packages(d, freerdp_root, r'^([^-]*)\.so$',
+        output_pattern='libfreerdp-plugin-%s',
+        description='FreeRDP plugin %s',
+        prepend=True, extra_depends='')
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cmake-remove-build-flags.patch b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cmake-remove-build-flags.patch
index a8050cc..68d9c3a 100644
--- a/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cmake-remove-build-flags.patch
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cmake-remove-build-flags.patch
@@ -1,58 +1,96 @@
-From 39572baac462f16b39dc385751d5c642646718d3 Mon Sep 17 00:00:00 2001
+From 4fa437782261c0da785d4574ad3a03700f624e66 Mon Sep 17 00:00:00 2001
 From: Mingli Yu <mingli.yu@windriver.com>
-Date: Wed, 4 Aug 2021 17:05:10 +0800
+Date: Tue, 19 Sep 2023 02:56:09 +0000
 Subject: [PATCH] cmake: remove build flags
 
-Remove the build flags to improve reproducibility.
+Don't generate the build host related info and reemove the build flags
+to improve reproducibility.
 
 Upstream-Status: Inappropriate [oe specific]
 
 Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
 ---
- config/cmake/libh5cc.in                |  2 +-
- config/cmake/libhdf5.settings.cmake.in | 12 ++++++------
- 2 files changed, 7 insertions(+), 7 deletions(-)
+ config/cmake/libhdf5.settings.cmake.in | 18 +++++++++---------
+ src/H5make_libsettings.c               | 17 -----------------
+ 2 files changed, 9 insertions(+), 26 deletions(-)
 
---- a/config/cmake/libh5cc.in
-+++ b/config/cmake/libh5cc.in
-@@ -44,7 +44,7 @@ for arg in $@ ; do
-       exit $status
-       ;;
-     *)
--      @_PKG_CONFIG_COMPILER@ $@ `pkg-config --define-variable=prefix=$dir --cflags --libs @_PKG_CONFIG_LIBNAME@`
-+      `pkg-config --define-variable=prefix=$dir --cflags --libs @_PKG_CONFIG_LIBNAME@-@_PKG_CONFIG_VERSION@` $@
-       status=$?
-       exit $status
-       ;;
+diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
+index f60f0de..f4433c0 100644
 --- a/config/cmake/libhdf5.settings.cmake.in
 +++ b/config/cmake/libhdf5.settings.cmake.in
-@@ -27,14 +27,14 @@ Linking Options:
+@@ -23,23 +23,23 @@ Linking Options:
+ ----------------
+                       Libraries: @BUILD_NAME_EXT@
+   Statically Linked Executables: @BUILD_STATIC_EXECS@
+-                        LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@
++                        LDFLAGS:
                       H5_LDFLAGS: @H5_LDFLAGS@
                       AM_LDFLAGS: @AM_LDFLAGS@
                  Extra libraries: @LINK_LIBS@
 -                       Archiver: @CMAKE_AR@
+-                       AR_FLAGS: 
 -                         Ranlib: @CMAKE_RANLIB@
 +                       Archiver:
++                       AR_FLAGS:
 +                         Ranlib:
  
  Languages:
  ----------
                                C: YES
 -                     C Compiler: @CMAKE_C_COMPILER@ @CMAKE_C_COMPILER_VERSION@
--                       CPPFLAGS: @CPPFLAGS@
 +                     C Compiler:
-+                       CPPFLAGS:
+                        CPPFLAGS: @CPPFLAGS@
                      H5_CPPFLAGS: @H5_CPPFLAGS@
                      AM_CPPFLAGS: @AM_CPPFLAGS@
-                          CFLAGS: @CMAKE_C_FLAGS@
-@@ -53,8 +53,8 @@ Languages:
- @BUILD_FORTRAN_CONDITIONAL_TRUE@               Module Directory: @CMAKE_Fortran_MODULE_DIRECTORY@
+-                         CFLAGS: @CMAKE_C_FLAGS@
+-                      H5_CFLAGS: @HDF5_CMAKE_C_FLAGS@
++                         CFLAGS:
++                      H5_CFLAGS:
+                       AM_CFLAGS: @AM_CFLAGS@
+                Shared C Library: @H5_ENABLE_SHARED_LIB@
+                Static C Library: @H5_ENABLE_STATIC_LIB@
+@@ -51,11 +51,11 @@ Languages:
+                AM Fortran Flags: @AM_FCFLAGS@
+          Shared Fortran Library: @H5_ENABLE_SHARED_LIB@
+          Static Fortran Library: @H5_ENABLE_STATIC_LIB@
+-               Module Directory: @CMAKE_Fortran_MODULE_DIRECTORY@
++               Module Directory:
  
                              C++: @HDF5_BUILD_CPP_LIB@
--@BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@
--@BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags: @CMAKE_CXX_FLAGS@
-+@BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler:
-+@BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags:
- @BUILD_CXX_CONDITIONAL_TRUE@                   H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@
- @BUILD_CXX_CONDITIONAL_TRUE@                   AM C++ Flags: @AM_CXXFLAGS@
- @BUILD_CXX_CONDITIONAL_TRUE@             Shared C++ Library: @H5_ENABLE_SHARED_LIB@
+                    C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@
+-                      C++ Flags: @CMAKE_CXX_FLAGS@
++                      C++ Flags:
+                    H5 C++ Flags: @HDF5_CMAKE_CXX_FLAGS@
+                    AM C++ Flags: @AM_CXXFLAGS@
+              Shared C++ Library: @H5_ENABLE_SHARED_LIB@
+diff --git a/src/H5make_libsettings.c b/src/H5make_libsettings.c
+index 2661288..7c0f84f 100644
+--- a/src/H5make_libsettings.c
++++ b/src/H5make_libsettings.c
+@@ -205,23 +205,6 @@ information about the library build configuration\n";
+     fprintf(rawoutstream, "/* Generated automatically by H5make_libsettings -- do not edit */\n\n\n");
+     fputs(FileHeader, rawoutstream); /*the copyright notice--see top of this file */
+ 
+-    fprintf(rawoutstream, " *\n * Created:\t\t%s %2d, %4d\n", month_name[tm->tm_mon], tm->tm_mday,
+-            1900 + tm->tm_year);
+-    if (pwd || real_name[0] || host_name[0]) {
+-        fprintf(rawoutstream, " *\t\t\t");
+-        if (real_name[0])
+-            fprintf(rawoutstream, "%s <", real_name);
+-#ifdef H5_HAVE_GETPWUID
+-        if (pwd)
+-            fputs(pwd->pw_name, rawoutstream);
+-#endif
+-        if (host_name[0])
+-            fprintf(rawoutstream, "@%s", host_name);
+-        if (real_name[0])
+-            fprintf(rawoutstream, ">");
+-        fputc('\n', rawoutstream);
+-    }
+-
+     fprintf(rawoutstream, " *\n * Purpose:\t\t");
+ 
+     for (s = purpose; *s; s++) {
+-- 
+2.35.5
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.0.bb b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.0.bb
deleted file mode 100644
index d0ff2ef..0000000
--- a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.0.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "Management suite for extremely large and complex data collections"
-DESCRIPTION = "Unique technology suite that makes possible the management of \
-extremely large and complex data collections"
-HOMEPAGE = "https://www.hdfgroup.org/"
-SECTION = "libs"
-
-LICENSE = "HDF5"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ac1039f6bf7c9ab2b3693836f46d0735"
-
-inherit cmake siteinfo qemu multilib_header
-
-DEPENDS += "qemu-native"
-
-SRC_URI = " \
-    https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-${PV}/src/${BPN}-${PV}.tar.bz2 \
-    file://0002-Remove-suffix-shared-from-shared-library-name.patch \
-    file://0001-cmake-remove-build-flags.patch \
-"
-SRC_URI[sha256sum] = "e4e79433450edae2865a4c6328188bb45391b29d74f8c538ee699f0b116c2ba0"
-
-FILES:${PN} += "${libdir}/libhdf5.settings ${datadir}/*"
-
-EXTRA_OECMAKE = " \
-    -DHDF5_INSTALL_CMAKE_DIR=${libdir}/cmake \
-    -DCMAKE_INSTALL_PREFIX='${prefix}' \
-    -DHDF5_INSTALL_LIB_DIR='${baselib}' \
-"
-EXTRA_OECMAKE:prepend:class-target = "-DCMAKE_CROSSCOMPILING_EMULATOR=${WORKDIR}/qemuwrapper "
-
-gen_emu() {
-        # Write out a qemu wrapper that will be used by cmake
-        # so that it can run target helper binaries through that.
-        qemu_binary="${@qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'), [d.expand('${STAGING_DIR_HOST}${libdir}'),d.expand('${STAGING_DIR_HOST}${base_libdir}')])}"
-        cat > ${WORKDIR}/qemuwrapper << EOF
-#!/bin/sh
-$qemu_binary "\$@"
-EOF
-        chmod +x ${WORKDIR}/qemuwrapper
-}
-
-do_unpack[postfuncs] += "gen_emu"
-
-do_install:append() {
-    # Used for generating config files on target
-    install -m 755 ${B}/bin/H5detect ${D}${bindir}
-    install -m 755 ${B}/bin/H5make_libsettings ${D}${bindir}
-    oe_multilib_header H5pubconf.h
-}
-
-BBCLASSEXTEND = "native"
-
-SRC_DISTRIBUTE_LICENSES += "HDF5"
-
-# h5fuse.sh script needs bash
-RDEPENDS:${PN} += "bash"
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
new file mode 100644
index 0000000..68b91c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
@@ -0,0 +1,60 @@
+SUMMARY = "Management suite for extremely large and complex data collections"
+DESCRIPTION = "Unique technology suite that makes possible the management of \
+extremely large and complex data collections"
+HOMEPAGE = "https://www.hdfgroup.org/"
+SECTION = "libs"
+
+LICENSE = "HDF5"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ba0f3d878ab6c2403c86e9b0362d998"
+
+inherit cmake siteinfo qemu multilib_header
+
+DEPENDS += "qemu-native zlib"
+
+SRC_URI = " \
+    https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-${PV}/src/${BPN}-${PV}.tar.bz2 \
+    file://0002-Remove-suffix-shared-from-shared-library-name.patch \
+    file://0001-cmake-remove-build-flags.patch \
+"
+SRC_URI[sha256sum] = "ea3c5e257ef322af5e77fc1e52ead3ad6bf3bb4ac06480dd17ee3900d7a24cfb"
+
+FILES:${PN} += "${libdir}/libhdf5.settings ${datadir}/*"
+
+EXTRA_OECMAKE = " \
+    -DHDF5_INSTALL_CMAKE_DIR=${libdir}/cmake \
+    -DCMAKE_INSTALL_PREFIX='${prefix}' \
+    -DHDF5_INSTALL_LIB_DIR='${baselib}' \
+"
+EXTRA_OECMAKE:prepend:class-target = "-DCMAKE_CROSSCOMPILING_EMULATOR=${WORKDIR}/qemuwrapper "
+
+gen_emu() {
+        # Write out a qemu wrapper that will be used by cmake
+        # so that it can run target helper binaries through that.
+        qemu_binary="${@qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST'), [d.expand('${STAGING_DIR_HOST}${libdir}'),d.expand('${STAGING_DIR_HOST}${base_libdir}')])}"
+        cat > ${WORKDIR}/qemuwrapper << EOF
+#!/bin/sh
+$qemu_binary "\$@"
+EOF
+        chmod +x ${WORKDIR}/qemuwrapper
+}
+
+do_unpack[postfuncs] += "gen_emu"
+
+do_install:append() {
+    # Used for generating config files on target
+    install -m 755 ${B}/bin/H5detect ${D}${bindir}
+    install -m 755 ${B}/bin/H5make_libsettings ${D}${bindir}
+    oe_multilib_header H5pubconf.h
+    # remove the buildpath
+    sed -i -e 's|${RECIPE_SYSROOT}||g' ${D}${libdir}/pkgconfig/hdf5.pc
+    sed -i -e 's|${RECIPE_SYSROOT}||g' ${D}${libdir}/cmake/hdf5-targets.cmake
+    sed -i -e 's|${RECIPE_SYSROOT_NATIVE}||g' ${D}${bindir}/h5hlcc
+    sed -i -e 's|${RECIPE_SYSROOT_NATIVE}||g' ${D}${bindir}/h5cc
+}
+
+BBCLASSEXTEND = "native"
+
+SRC_DISTRIBUTE_LICENSES += "HDF5"
+
+# h5fuse.sh script needs bash
+RDEPENDS:${PN} += "bash"
diff --git a/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser/CVE-2023-33461.patch b/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser/CVE-2023-33461.patch
new file mode 100644
index 0000000..db5fb06
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser/CVE-2023-33461.patch
@@ -0,0 +1,48 @@
+CVE: CVE-2023-33461
+Upstream-Status: Backport [https://github.com/ndevilla/iniparser/pull/146/commits/ace9871f65d11b5d73f0b9ee8cf5d2807439442d]
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+
+From ace9871f65d11b5d73f0b9ee8cf5d2807439442d Mon Sep 17 00:00:00 2001
+From: Antonio <antoniolrt@gmail.com>
+Date: Fri, 2 Jun 2023 15:03:10 -0300
+Subject: [PATCH] Handle null return from iniparser_getstring
+
+Fix handling of NULL returns from iniparser_getstring in
+iniparser_getboolean, iniparser_getlongint and iniparser_getdouble,
+avoiding a crash.
+---
+ src/iniparser.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/iniparser.c b/src/iniparser.c
+index f1d1658..dbceb20 100644
+--- a/src/iniparser.c
++++ b/src/iniparser.c
+@@ -456,7 +456,7 @@ long int iniparser_getlongint(const dictionary * d, const char * key, long int n
+     const char * str ;
+ 
+     str = iniparser_getstring(d, key, INI_INVALID_KEY);
+-    if (str==INI_INVALID_KEY) return notfound ;
++    if (str==NULL || str==INI_INVALID_KEY) return notfound ;
+     return strtol(str, NULL, 0);
+ }
+ 
+@@ -511,7 +511,7 @@ double iniparser_getdouble(const dictionary * d, const char * key, double notfou
+     const char * str ;
+ 
+     str = iniparser_getstring(d, key, INI_INVALID_KEY);
+-    if (str==INI_INVALID_KEY) return notfound ;
++    if (str==NULL || str==INI_INVALID_KEY) return notfound ;
+     return atof(str);
+ }
+ 
+@@ -553,7 +553,7 @@ int iniparser_getboolean(const dictionary * d, const char * key, int notfound)
+     const char * c ;
+ 
+     c = iniparser_getstring(d, key, INI_INVALID_KEY);
+-    if (c==INI_INVALID_KEY) return notfound ;
++    if (c==NULL || c==INI_INVALID_KEY) return notfound ;
+     if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') {
+         ret = 1 ;
+     } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') {
diff --git a/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser_4.1.bb b/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser_4.1.bb
index f9e1530..5e42cdc 100644
--- a/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser_4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/iniparser/iniparser_4.1.bb
@@ -10,7 +10,9 @@
 
 SRC_URI = "git://github.com/ndevilla/iniparser.git;protocol=https;branch=master \
            file://0001-iniparser.pc-Make-libpath-a-variable.patch \
-	   file://Add-CMake-support.patch"
+	   file://Add-CMake-support.patch \
+           file://CVE-2023-33461.patch \
+"
 
 SRCREV= "deb85ad4936d4ca32cc2260ce43323d47936410d"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.0.bb b/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.0.bb
deleted file mode 100644
index 1efccdd..0000000
--- a/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "LibTomMath is a number theoretic multiple-precision integer library"
-HOMEPAGE = "https://www.libtom.net/LibTomMath"
-SECTION = "libs"
-LICENSE = "Unlicense"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=23e7e0a32e53a2b1d35f5fd9ef053402"
-
-DEPENDS = "libtool-cross"
-
-SRC_URI = "git://github.com/libtom/libtommath.git;protocol=https;branch=master"
-
-SRCREV = "6ca6898bf37f583c4cc9943441cd60dd69f4b8f2"
-
-S = "${WORKDIR}/git"
-
-EXTRA_OEMAKE = "'PREFIX=${prefix}' 'DESTDIR=${D}' 'LIBPATH=${libdir}' 'CFLAGS=${CFLAGS}'"
-
-do_compile() {
-    oe_runmake -f makefile.shared
-}
-
-do_install() {
-    oe_runmake -f makefile.shared install
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.1.bb b/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.1.bb
new file mode 100644
index 0000000..32ec290
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libtommath/libtommath_1.2.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "LibTomMath is a number theoretic multiple-precision integer library"
+HOMEPAGE = "https://www.libtom.net/LibTomMath"
+SECTION = "libs"
+LICENSE = "Unlicense"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=23e7e0a32e53a2b1d35f5fd9ef053402"
+
+DEPENDS = "libtool-cross"
+
+SRC_URI = "git://github.com/libtom/libtommath.git;protocol=https;branch=master"
+
+SRCREV = "97e500351e653472b2ea00b37137ad0414165efe"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "'PREFIX=${prefix}' 'DESTDIR=${D}' 'LIBPATH=${libdir}' 'CFLAGS=${CFLAGS}'"
+
+do_compile() {
+    oe_runmake -f makefile.shared
+}
+
+do_install() {
+    oe_runmake -f makefile.shared install
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb b/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb
index 0d3ea41..4a1a0f5 100644
--- a/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb
+++ b/meta-openembedded/meta-oe/recipes-support/openct/openct_0.6.20.bb
@@ -1,4 +1,4 @@
-Summanry = "Middleware framework for smart card terminals"
+SUMMARY = "Middleware framework for smart card terminals"
 HOMEPAGE = "https://github.com/OpenSC/openct/wiki"
 DESCRIPTION = " \
 OpenCT implements drivers for several smart card readers. \
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/0001-configure-Pass-pthread_t-to-pthread_detach.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/0001-configure-Pass-pthread_t-to-pthread_detach.patch
deleted file mode 100644
index 6e73f8b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/0001-configure-Pass-pthread_t-to-pthread_detach.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 7577b120acda087bf3f5f613c2c72663b3864ad8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 4 Sep 2022 09:43:06 -0700
-Subject: [PATCH] configure: Pass pthread_t to pthread_detach
-
-This helps compilers when using C2X standard
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 0978eeb..58d15f8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1467,10 +1467,7 @@ pthread_rwlock_t rwlock;
- 				dnl save the flags
- 				AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- #include <pthread.h>
--#ifndef NULL
--#define NULL (void*)0
--#endif
--]], [[pthread_detach(NULL);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
-+]], [[pthread_detach((pthread_t)-1);]])],[ol_cv_func_pthread_detach=yes],[ol_cv_func_pthread_detach=no])
- 			])
- 
- 			if test $ol_cv_func_pthread_detach = no ; then
--- 
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.13.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.13.bb
deleted file mode 100644
index 7dc926c..0000000
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.13.bb
+++ /dev/null
@@ -1,235 +0,0 @@
-SUMMARY = "OpenLDAP Directory Service"
-DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
-HOMEPAGE = "http://www.OpenLDAP.org/license.html"
-# The OpenLDAP Public License - see the HOMEPAGE - defines
-# the license.  www.openldap.org claims this is Open Source
-# (see http://www.openldap.org), the license appears to be
-# basically BSD.  opensource.org does not record this license
-# at present (so it is apparently not OSI certified).
-LICENSE = "OpenLDAP"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=beceb5ac7100b6430640c61655b25c1f \
-                    file://LICENSE;md5=153d07ef052c4a37a8fac23bc6031972 \
-                    "
-SECTION = "libs"
-
-LDAP_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
-
-SRC_URI = "http://www.openldap.org/software/download/OpenLDAP/openldap-release/${BP}.tgz \
-    file://initscript \
-    file://slapd.service \
-    file://remove-user-host-pwd-from-version.patch \
-    file://0001-build-top.mk-unset-STRIP_OPTS.patch \
-    file://0001-configure-Pass-pthread_t-to-pthread_detach.patch \
-"
-
-SRC_URI[sha256sum] = "ee3c430c4ef7b87c57b622108c7339376d6c27fbbf2767770be3de1df63d008c"
-
-DEPENDS = "util-linux groff-native"
-
-inherit autotools-brokensep update-rc.d systemd pkgconfig
-
-# CV SETTINGS
-# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
-# when cross compiling (should be in site?)
-EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"
-
-# CONFIG DEFINITIONS
-# The following is necessary because it cannot be determined for a
-# cross compile automagically.  Select should yield fine on all OE
-# systems...
-EXTRA_OECONF += "--with-yielding-select=yes"
-# Shared libraries are nice...
-EXTRA_OECONF += "--enable-dynamic"
-
-PACKAGECONFIG ??= "asyncmeta gnutls modules \
-                   mdb ldap meta null passwd proxycache dnssrv \
-                   ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
-"
-#--with-tls              with TLS/SSL support auto|openssl|gnutls [auto]
-PACKAGECONFIG[gnutls] = "--with-tls=gnutls,,gnutls"
-PACKAGECONFIG[openssl] = "--with-tls=openssl,,openssl"
-
-PACKAGECONFIG[sasl] = "--with-cyrus-sasl,--without-cyrus-sasl,cyrus-sasl"
-PACKAGECONFIG[modules] = "lt_cv_dlopen_self=yes --enable-modules,--disable-modules,libtool"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
-
-# SLAPD options
-#
-# UNIX crypt(3) passwd support:
-EXTRA_OECONF += "--enable-crypt"
-
-# SLAPD BACKEND
-#
-# The backend must be set by the configuration.  This controls the
-# required database.
-#
-# Backends="asyncmeta dnssrv ldap mdb meta ndb null passwd perl relay sock sql wt"
-#
-# Note that multiple backends can be built.  The ldbm backend requires a
-# build-time choice of database API. To use the gdbm (or other) API the 
-# Berkely database module must be removed from the build.
-md = "${libexecdir}/openldap"
-#
-
-#--enable-asyncmeta    enable asyncmeta backend no|yes|mod no
-PACKAGECONFIG[asyncmeta] = "--enable-asyncmeta=mod,--enable-asyncmeta=no"
-
-#--enable-dnssrv       enable dnssrv backend no|yes|mod no
-PACKAGECONFIG[dnssrv] = "--enable-dnssrv=mod,--enable-dnssrv=no"
-
-#--enable-ldap         enable ldap backend no|yes|mod no
-PACKAGECONFIG[ldap] = "--enable-ldap=mod,--enable-ldap=no,"
-
-#--enable-mdb          enable mdb database backend no|yes|mod [yes]
-PACKAGECONFIG[mdb] = "--enable-mdb=yes,--enable-mdb=no,"
-
-#--enable-meta         enable metadirectory backend no|yes|mod no
-PACKAGECONFIG[meta] = "--enable-meta=mod,--enable-meta=no,"
-
-#--enable-ndb          enable MySQL NDB Cluster backend no|yes|mod [no]
-PACKAGECONFIG[ndb] = "--enable-ndb=mod,--enable-ndb=no,"
-
-#--enable-null         enable null backend no|yes|mod no
-PACKAGECONFIG[null] = "--enable-null=mod,--enable-null=no,"
-
-#--enable-passwd       enable passwd backend no|yes|mod no
-PACKAGECONFIG[passwd] = "--enable-passwd=mod,--enable-passwd=no,"
-
-#--enable-perl         enable perl backend no|yes|mod no
-#  This requires a loadable perl dynamic library, if enabled without
-#  doing something appropriate (building perl?) the build will pick
-#  up the build machine perl - not good (inherit perlnative?)
-PACKAGECONFIG[perl] = "--enable-perl=mod,--enable-perl=no,perl"
-
-#--enable-relay        enable relay backend no|yes|mod [yes]
-PACKAGECONFIG[relay] = "--enable-relay=mod,--enable-relay=no,"
-
-#--enable-sock         enable sock backend no|yes|mod [no]
-PACKAGECONFIG[sock] = "--enable-sock=mod,--enable-sock=no,"
-
-#--enable-sql          enable sql backend no|yes|mod no
-# sql requires some sql backend which provides sql.h, sqlite* provides
-# sqlite.h (which may be compatible but hasn't been tried.)
-PACKAGECONFIG[sql] = "--enable-sql=mod,--enable-sql=no,sqlite3"
-
-#--enable-wt           enable wt backend no|yes|mod no
-# back-wt is marked currently as experimental
-PACKAGECONFIG[wt] = "--enable-wt=mod,--enable-wt=no"
-
-#--enable-dyngroup     Dynamic Group overlay no|yes|mod no
-#  This is a demo, Proxy Cache defines init_module which conflicts with the
-#  same symbol in dyngroup
-PACKAGECONFIG[dyngroup] = "--enable-dyngroup=mod,--enable-dyngroup=no,"
-
-#--enable-proxycache   Proxy Cache overlay no|yes|mod no
-PACKAGECONFIG[proxycache] = "--enable-proxycache=mod,--enable-proxycache=no,"
-FILES:${PN}-overlay-proxycache = "${md}/pcache-*.so.*"
-PACKAGES += "${PN}-overlay-proxycache"
-
-# Append URANDOM_DEVICE='/dev/urandom' to CPPFLAGS:
-# This allows tls to obtain random bits from /dev/urandom, by default
-# it was disabled for cross-compiling.
-CPPFLAGS:append = " -D_GNU_SOURCE -DURANDOM_DEVICE=\\"/dev/urandom\\" -fPIC"
-
-LDFLAGS:append = " -pthread"
-
-do_configure() {
-    rm -f ${S}/libtool
-    aclocal
-    libtoolize --force --copy
-    gnu-configize
-    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/ltmain.sh ${S}/build
-    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/missing ${S}/build
-    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/compile ${S}/build
-    autoconf
-    oe_runconf
-}
-
-LEAD_SONAME = "libldap-${LDAP_VER}.so.*"
-
-# The executables go in a separate package.  This allows the
-# installation of the libraries with no daemon support.
-# Each module also has its own package - see above.
-PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"
-
-# Package contents - shift most standard contents to -bin
-FILES:${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/${BPN}/data"
-FILES:${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run ${localstatedir}/volatile/run \
-    ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
-    ${sysconfdir}/openldap/DB_CONFIG.example ${systemd_unitdir}/system/*"
-FILES:${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp"
-FILES:${PN}-bin = "${bindir}"
-FILES:${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libexecdir}/openldap/*.a ${libexecdir}/openldap/*.la ${libexecdir}/openldap/*.so ${libdir}/pkgconfig/*.pc"
-FILES:${PN}-dbg += "${libexecdir}/openldap/.debug"
-
-do_install:append() {
-    install -d ${D}${sysconfdir}/init.d
-    cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
-    chmod 755 ${D}${sysconfdir}/init.d/openldap
-    # This is duplicated in /etc/openldap and is for slapd
-    rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
-
-    # Installing slapd under ${sbin} is more FHS and LSB compliance
-    mv ${D}${libexecdir}/slapd ${D}/${sbindir}/slapd
-    rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
-    SLAPTOOLS="slapadd slapcat slapdn slapindex slappasswd slaptest slapauth slapacl slapschema slapmodify"
-    cd ${D}/${sbindir}/
-    rm -f ${SLAPTOOLS}
-    for i in ${SLAPTOOLS}; do ln -sf slapd $i; done
-
-    rmdir "${D}${localstatedir}/run"
-    rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
-
-    install -d ${D}${systemd_unitdir}/system/
-    install -m 0644 ${WORKDIR}/slapd.service ${D}${systemd_unitdir}/system/
-    sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/*.service
-
-    # Uses mdm as the database
-    #  and localstatedir as data directory ...
-    sed -e 's/# modulepath/modulepath/' \
-        -e 's/# moduleload\s*back_bdb.*/moduleload    back_mdb/' \
-        -e 's/database\s*bdb/database        mdb/' \
-        -e 's%^directory\s*.*%directory   ${localstatedir}/${BPN}/data/%' \
-        -i ${D}${sysconfdir}/openldap/slapd.conf
-
-    mkdir -p ${D}${localstatedir}/${BPN}/data
-}
-
-INITSCRIPT_PACKAGES = "${PN}-slapd"
-INITSCRIPT_NAME:${PN}-slapd = "openldap"
-INITSCRIPT_PARAMS:${PN}-slapd = "defaults"
-SYSTEMD_PACKAGES = "${PN}-slapd"
-SYSTEMD_SERVICE:${PN}-slapd = "slapd.service"
-SYSTEMD_AUTO_ENABLE:${PN}-slapd ?= "disable"
-
-PACKAGES_DYNAMIC += "^${PN}-backends.* ^${PN}-backend-.*"
-
-# The modules require their .so to be dynamicaly loaded
-INSANE_SKIP:${PN}-backend-asyncmeta  += "dev-so"
-INSANE_SKIP:${PN}-backend-dnssrv     += "dev-so"
-INSANE_SKIP:${PN}-backend-ldap       += "dev-so"
-INSANE_SKIP:${PN}-backend-meta       += "dev-so"
-INSANE_SKIP:${PN}-backend-mdb        += "dev-so"
-INSANE_SKIP:${PN}-backend-null       += "dev-so"
-INSANE_SKIP:${PN}-backend-passwd     += "dev-so"
-
-python populate_packages:prepend () {
-    backend_dir    = d.expand('${libexecdir}/openldap')
-    do_split_packages(d, backend_dir, r'back_([a-z]*)\.so$', 'openldap-backend-%s', 'OpenLDAP %s backend', prepend=True, extra_depends='', allow_links=True)
-    do_split_packages(d, backend_dir, r'back_([a-z]*)\-.*\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)
-
-    metapkg = "${PN}-backends"
-    d.setVar('ALLOW_EMPTY:' + metapkg, "1")
-    d.setVar('FILES:' + metapkg, "")
-    metapkg_rdepends = []
-    packages = d.getVar('PACKAGES').split()
-    for pkg in packages[1:]:
-        if pkg.count("openldap-backend-") and not pkg in metapkg_rdepends and not pkg.count("-dev") and not pkg.count("-dbg") and not pkg.count("static") and not pkg.count("locale"):
-            metapkg_rdepends.append(pkg)
-    d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends))
-    d.setVar('DESCRIPTION:' + metapkg, 'OpenLDAP backends meta package')
-    packages.append(metapkg)
-    d.setVar('PACKAGES', ' '.join(packages))
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb
new file mode 100644
index 0000000..8d13a4d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb
@@ -0,0 +1,234 @@
+SUMMARY = "OpenLDAP Directory Service"
+DESCRIPTION = "OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol."
+HOMEPAGE = "http://www.OpenLDAP.org/license.html"
+# The OpenLDAP Public License - see the HOMEPAGE - defines
+# the license.  www.openldap.org claims this is Open Source
+# (see http://www.openldap.org), the license appears to be
+# basically BSD.  opensource.org does not record this license
+# at present (so it is apparently not OSI certified).
+LICENSE = "OpenLDAP"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=beceb5ac7100b6430640c61655b25c1f \
+                    file://LICENSE;md5=153d07ef052c4a37a8fac23bc6031972 \
+                    "
+SECTION = "libs"
+
+LDAP_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
+
+SRC_URI = "http://www.openldap.org/software/download/OpenLDAP/openldap-release/${BP}.tgz \
+    file://initscript \
+    file://slapd.service \
+    file://remove-user-host-pwd-from-version.patch \
+    file://0001-build-top.mk-unset-STRIP_OPTS.patch \
+"
+
+SRC_URI[sha256sum] = "546ba591822e8bb0e467d40c4d4a30f89d937c3a507fe83a578f582f6a211327"
+
+DEPENDS = "util-linux groff-native"
+
+inherit autotools-brokensep update-rc.d systemd pkgconfig
+
+# CV SETTINGS
+# Required to work round AC_FUNC_MEMCMP which gets the wrong answer
+# when cross compiling (should be in site?)
+EXTRA_OECONF += "ac_cv_func_memcmp_working=yes"
+
+# CONFIG DEFINITIONS
+# The following is necessary because it cannot be determined for a
+# cross compile automagically.  Select should yield fine on all OE
+# systems...
+EXTRA_OECONF += "--with-yielding-select=yes"
+# Shared libraries are nice...
+EXTRA_OECONF += "--enable-dynamic"
+
+PACKAGECONFIG ??= "asyncmeta gnutls modules \
+                   mdb ldap meta null passwd proxycache dnssrv \
+                   ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+#--with-tls              with TLS/SSL support auto|openssl|gnutls [auto]
+PACKAGECONFIG[gnutls] = "--with-tls=gnutls,,gnutls"
+PACKAGECONFIG[openssl] = "--with-tls=openssl,,openssl"
+
+PACKAGECONFIG[sasl] = "--with-cyrus-sasl,--without-cyrus-sasl,cyrus-sasl"
+PACKAGECONFIG[modules] = "lt_cv_dlopen_self=yes --enable-modules,--disable-modules,libtool"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+
+# SLAPD options
+#
+# UNIX crypt(3) passwd support:
+EXTRA_OECONF += "--enable-crypt"
+
+# SLAPD BACKEND
+#
+# The backend must be set by the configuration.  This controls the
+# required database.
+#
+# Backends="asyncmeta dnssrv ldap mdb meta ndb null passwd perl relay sock sql wt"
+#
+# Note that multiple backends can be built.  The ldbm backend requires a
+# build-time choice of database API. To use the gdbm (or other) API the 
+# Berkely database module must be removed from the build.
+md = "${libexecdir}/openldap"
+#
+
+#--enable-asyncmeta    enable asyncmeta backend no|yes|mod no
+PACKAGECONFIG[asyncmeta] = "--enable-asyncmeta=mod,--enable-asyncmeta=no"
+
+#--enable-dnssrv       enable dnssrv backend no|yes|mod no
+PACKAGECONFIG[dnssrv] = "--enable-dnssrv=mod,--enable-dnssrv=no"
+
+#--enable-ldap         enable ldap backend no|yes|mod no
+PACKAGECONFIG[ldap] = "--enable-ldap=mod,--enable-ldap=no,"
+
+#--enable-mdb          enable mdb database backend no|yes|mod [yes]
+PACKAGECONFIG[mdb] = "--enable-mdb=yes,--enable-mdb=no,"
+
+#--enable-meta         enable metadirectory backend no|yes|mod no
+PACKAGECONFIG[meta] = "--enable-meta=mod,--enable-meta=no,"
+
+#--enable-ndb          enable MySQL NDB Cluster backend no|yes|mod [no]
+PACKAGECONFIG[ndb] = "--enable-ndb=mod,--enable-ndb=no,"
+
+#--enable-null         enable null backend no|yes|mod no
+PACKAGECONFIG[null] = "--enable-null=mod,--enable-null=no,"
+
+#--enable-passwd       enable passwd backend no|yes|mod no
+PACKAGECONFIG[passwd] = "--enable-passwd=mod,--enable-passwd=no,"
+
+#--enable-perl         enable perl backend no|yes|mod no
+#  This requires a loadable perl dynamic library, if enabled without
+#  doing something appropriate (building perl?) the build will pick
+#  up the build machine perl - not good (inherit perlnative?)
+PACKAGECONFIG[perl] = "--enable-perl=mod,--enable-perl=no,perl"
+
+#--enable-relay        enable relay backend no|yes|mod [yes]
+PACKAGECONFIG[relay] = "--enable-relay=mod,--enable-relay=no,"
+
+#--enable-sock         enable sock backend no|yes|mod [no]
+PACKAGECONFIG[sock] = "--enable-sock=mod,--enable-sock=no,"
+
+#--enable-sql          enable sql backend no|yes|mod no
+# sql requires some sql backend which provides sql.h, sqlite* provides
+# sqlite.h (which may be compatible but hasn't been tried.)
+PACKAGECONFIG[sql] = "--enable-sql=mod,--enable-sql=no,sqlite3"
+
+#--enable-wt           enable wt backend no|yes|mod no
+# back-wt is marked currently as experimental
+PACKAGECONFIG[wt] = "--enable-wt=mod,--enable-wt=no"
+
+#--enable-dyngroup     Dynamic Group overlay no|yes|mod no
+#  This is a demo, Proxy Cache defines init_module which conflicts with the
+#  same symbol in dyngroup
+PACKAGECONFIG[dyngroup] = "--enable-dyngroup=mod,--enable-dyngroup=no,"
+
+#--enable-proxycache   Proxy Cache overlay no|yes|mod no
+PACKAGECONFIG[proxycache] = "--enable-proxycache=mod,--enable-proxycache=no,"
+FILES:${PN}-overlay-proxycache = "${md}/pcache-*.so.*"
+PACKAGES += "${PN}-overlay-proxycache"
+
+# Append URANDOM_DEVICE='/dev/urandom' to CPPFLAGS:
+# This allows tls to obtain random bits from /dev/urandom, by default
+# it was disabled for cross-compiling.
+CPPFLAGS:append = " -D_GNU_SOURCE -DURANDOM_DEVICE=\\"/dev/urandom\\" -fPIC"
+
+LDFLAGS:append = " -pthread"
+
+do_configure() {
+    rm -f ${S}/libtool
+    aclocal
+    libtoolize --force --copy
+    gnu-configize
+    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/ltmain.sh ${S}/build
+    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/missing ${S}/build
+    cp ${STAGING_DATADIR_NATIVE}/libtool/build-aux/compile ${S}/build
+    autoconf
+    oe_runconf
+}
+
+LEAD_SONAME = "libldap-${LDAP_VER}.so.*"
+
+# The executables go in a separate package.  This allows the
+# installation of the libraries with no daemon support.
+# Each module also has its own package - see above.
+PACKAGES += "${PN}-slapd ${PN}-slurpd ${PN}-bin"
+
+# Package contents - shift most standard contents to -bin
+FILES:${PN} = "${libdir}/lib*.so.* ${sysconfdir}/openldap/ldap.* ${localstatedir}/${BPN}/data"
+FILES:${PN}-slapd = "${sysconfdir}/init.d ${libexecdir}/slapd ${sbindir} ${localstatedir}/run ${localstatedir}/volatile/run \
+    ${sysconfdir}/openldap/slapd.* ${sysconfdir}/openldap/schema \
+    ${sysconfdir}/openldap/DB_CONFIG.example ${systemd_unitdir}/system/*"
+FILES:${PN}-slurpd = "${libexecdir}/slurpd ${localstatedir}/openldap-slurp"
+FILES:${PN}-bin = "${bindir}"
+FILES:${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libexecdir}/openldap/*.a ${libexecdir}/openldap/*.la ${libexecdir}/openldap/*.so ${libdir}/pkgconfig/*.pc"
+FILES:${PN}-dbg += "${libexecdir}/openldap/.debug"
+
+do_install:append() {
+    install -d ${D}${sysconfdir}/init.d
+    cat ${WORKDIR}/initscript > ${D}${sysconfdir}/init.d/openldap
+    chmod 755 ${D}${sysconfdir}/init.d/openldap
+    # This is duplicated in /etc/openldap and is for slapd
+    rm -f ${D}${localstatedir}/openldap-data/DB_CONFIG.example
+
+    # Installing slapd under ${sbin} is more FHS and LSB compliance
+    mv ${D}${libexecdir}/slapd ${D}/${sbindir}/slapd
+    rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
+    SLAPTOOLS="slapadd slapcat slapdn slapindex slappasswd slaptest slapauth slapacl slapschema slapmodify"
+    cd ${D}/${sbindir}/
+    rm -f ${SLAPTOOLS}
+    for i in ${SLAPTOOLS}; do ln -sf slapd $i; done
+
+    rmdir "${D}${localstatedir}/run"
+    rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
+
+    install -d ${D}${systemd_unitdir}/system/
+    install -m 0644 ${WORKDIR}/slapd.service ${D}${systemd_unitdir}/system/
+    sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/*.service
+
+    # Uses mdm as the database
+    #  and localstatedir as data directory ...
+    sed -e 's/# modulepath/modulepath/' \
+        -e 's/# moduleload\s*back_bdb.*/moduleload    back_mdb/' \
+        -e 's/database\s*bdb/database        mdb/' \
+        -e 's%^directory\s*.*%directory   ${localstatedir}/${BPN}/data/%' \
+        -i ${D}${sysconfdir}/openldap/slapd.conf
+
+    mkdir -p ${D}${localstatedir}/${BPN}/data
+}
+
+INITSCRIPT_PACKAGES = "${PN}-slapd"
+INITSCRIPT_NAME:${PN}-slapd = "openldap"
+INITSCRIPT_PARAMS:${PN}-slapd = "defaults"
+SYSTEMD_PACKAGES = "${PN}-slapd"
+SYSTEMD_SERVICE:${PN}-slapd = "slapd.service"
+SYSTEMD_AUTO_ENABLE:${PN}-slapd ?= "disable"
+
+PACKAGES_DYNAMIC += "^${PN}-backends.* ^${PN}-backend-.*"
+
+# The modules require their .so to be dynamicaly loaded
+INSANE_SKIP:${PN}-backend-asyncmeta  += "dev-so"
+INSANE_SKIP:${PN}-backend-dnssrv     += "dev-so"
+INSANE_SKIP:${PN}-backend-ldap       += "dev-so"
+INSANE_SKIP:${PN}-backend-meta       += "dev-so"
+INSANE_SKIP:${PN}-backend-mdb        += "dev-so"
+INSANE_SKIP:${PN}-backend-null       += "dev-so"
+INSANE_SKIP:${PN}-backend-passwd     += "dev-so"
+
+python populate_packages:prepend () {
+    backend_dir    = d.expand('${libexecdir}/openldap')
+    do_split_packages(d, backend_dir, r'back_([a-z]*)\.so$', 'openldap-backend-%s', 'OpenLDAP %s backend', prepend=True, extra_depends='', allow_links=True)
+    do_split_packages(d, backend_dir, r'back_([a-z]*)\-.*\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)
+
+    metapkg = "${PN}-backends"
+    d.setVar('ALLOW_EMPTY:' + metapkg, "1")
+    d.setVar('FILES:' + metapkg, "")
+    metapkg_rdepends = []
+    packages = d.getVar('PACKAGES').split()
+    for pkg in packages[1:]:
+        if pkg.count("openldap-backend-") and not pkg in metapkg_rdepends and not pkg.count("-dev") and not pkg.count("-dbg") and not pkg.count("static") and not pkg.count("locale"):
+            metapkg_rdepends.append(pkg)
+    d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends))
+    d.setVar('DESCRIPTION:' + metapkg, 'OpenLDAP backends meta package')
+    packages.append(metapkg)
+    d.setVar('PACKAGES', ' '.join(packages))
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/files/CVE-2023-2977.patch b/meta-openembedded/meta-oe/recipes-support/opensc/files/CVE-2023-2977.patch
new file mode 100644
index 0000000..165fc31
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opensc/files/CVE-2023-2977.patch
@@ -0,0 +1,54 @@
+CVE: CVE-2023-2977
+Upstream-Status: Backport [ https://github.com/OpenSC/OpenSC/commit/81944d1529202bd28359bede57c0a15deb65ba8a ]
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+
+From 81944d1529202bd28359bede57c0a15deb65ba8a Mon Sep 17 00:00:00 2001
+From: fullwaywang <fullwaywang@tencent.com>
+Date: Mon, 29 May 2023 10:38:48 +0800
+Subject: [PATCH] pkcs15init: correct left length calculation to fix buffer
+ overrun bug. Fixes #2785
+
+---
+ src/pkcs15init/pkcs15-cardos.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/pkcs15init/pkcs15-cardos.c b/src/pkcs15init/pkcs15-cardos.c
+index 9715cf390f..f41f73c349 100644
+--- a/src/pkcs15init/pkcs15-cardos.c
++++ b/src/pkcs15init/pkcs15-cardos.c
+@@ -872,7 +872,7 @@ static int cardos_have_verifyrc_package(sc_card_t *card)
+ 	sc_apdu_t apdu;
+         u8        rbuf[SC_MAX_APDU_BUFFER_SIZE];
+         int       r;
+-	const u8  *p = rbuf, *q;
++	const u8  *p = rbuf, *q, *pp;
+ 	size_t    len, tlen = 0, ilen = 0;
+ 
+ 	sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0xca, 0x01, 0x88);
+@@ -888,13 +888,13 @@ static int cardos_have_verifyrc_package(sc_card_t *card)
+ 		return 0;
+ 
+ 	while (len != 0) {
+-		p = sc_asn1_find_tag(card->ctx, p, len, 0xe1, &tlen);
+-		if (p == NULL)
++		pp = sc_asn1_find_tag(card->ctx, p, len, 0xe1, &tlen);
++		if (pp == NULL)
+ 			return 0;
+ 		if (card->type == SC_CARD_TYPE_CARDOS_M4_3)	{
+ 			/* the verifyRC package on CardOS 4.3B use Manufacturer ID 0x01	*/
+ 			/* and Package Number 0x07					*/
+-			q = sc_asn1_find_tag(card->ctx, p, tlen, 0x01, &ilen);
++			q = sc_asn1_find_tag(card->ctx, pp, tlen, 0x01, &ilen);
+ 			if (q == NULL || ilen != 4)
+ 				return 0;
+ 			if (q[0] == 0x07)
+@@ -902,7 +902,7 @@ static int cardos_have_verifyrc_package(sc_card_t *card)
+ 		} else if (card->type == SC_CARD_TYPE_CARDOS_M4_4)	{
+ 			/* the verifyRC package on CardOS 4.4 use Manufacturer ID 0x03	*/
+ 			/* and Package Number 0x02					*/
+-			q = sc_asn1_find_tag(card->ctx, p, tlen, 0x03, &ilen);
++			q = sc_asn1_find_tag(card->ctx, pp, tlen, 0x03, &ilen);
+ 			if (q == NULL || ilen != 4)
+ 				return 0;
+ 			if (q[0] == 0x02)
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.23.0.bb b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.23.0.bb
index f68107d..b3fc1f0 100644
--- a/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.23.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.23.0.bb
@@ -16,6 +16,7 @@
 SRC_URI = "git://github.com/OpenSC/OpenSC;branch=master;protocol=https \
            file://0001-pkcs11-tool-Fix-private-key-import.patch \
            file://0002-pkcs11-tool-Log-more-information-on-OpenSSL-errors.patch \
+           file://CVE-2023-2977.patch \
           "
 DEPENDS = "virtual/libiconv openssl"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch
new file mode 100644
index 0000000..25934d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch
@@ -0,0 +1,63 @@
+From ac0f06e20bdfaca74c8ab786be8ff8fc96b5a689 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 16 Sep 2023 19:52:56 -0700
+Subject: [PATCH] cppignore.lnx: Ignore PKCS12 and testLaunch test
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+These tests fail on Linux
+
+There were 4 failures:
+ 1: N7CppUnit10TestCallerI11ProcessTestEE.testLaunch
+    "rc == 3"
+    in "/usr/src/debug/poco/1.12.4-r0/Foundation/testsuite/src/ProcessTest.cpp", line 79
+ 2: N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectIn
+    "rc == 100"
+    in "/usr/src/debug/poco/1.12.4-r0/Foundation/testsuite/src/ProcessTest.cpp", line 106
+ 3: N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectOut
+    "s == "Hello, world!""
+    in "/usr/src/debug/poco/1.12.4-r0/Foundation/testsuite/src/ProcessTest.cpp", line 134
+ 4: N7CppUnit10TestCallerI11ProcessTestEE.testLaunchEnv
+    "s == "test""
+    in "/usr/src/debug/poco/1.12.4-r0/Foundation/testsuite/src/ProcessTest.cpp", line 166
+
+ There were 4 errors:-
+   1: N7CppUnit10TestCallerI7EVPTestEE.testRSAEVPKeyFromPKCS12
+  │ │ "N4Poco17NotFoundExceptionE:
+  Not found: POCO_BASE"
+  │ │ in "<unknown>", line -1
+   2: N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testFullPKCS12
+  │ │ "N4Poco17NotFoundExceptionE:
+  Not found: POCO_BASE"
+  │ │ in "<unknown>", line -1
+   3: N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testCertsOnlyPKCS12
+  │ │ "N4Poco17NotFoundExceptionE:
+  Not found: POCO_BASE"
+  │ │ in "<unknown>", line -1
+   4: N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testPEMReadWrite
+  │ │ "N4Poco17NotFoundExceptionE:
+  Not found: POCO_BASE"
+  │ │ in "<unknown>", line -1
+
+Upstream-Status: Inappropriate [OE specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cppignore.lnx | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/cppignore.lnx
++++ b/cppignore.lnx
+@@ -26,3 +26,12 @@ N7CppUnit10TestCallerI9TimerTestEE.testS
+ N7CppUnit10TestCallerI9TimerTestEE.testScheduleIntervalClock
+ N7CppUnit10TestCallerI9TimerTestEE.testScheduleIntervalTimestamp
+ N7CppUnit10TestCallerI9TimerTestEE.testTimer
++N7CppUnit10TestCallerI11ProcessTestEE.testLaunch
++N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectIn
++N7CppUnit10TestCallerI11ProcessTestEE.testLaunchRedirectOut
++N7CppUnit10TestCallerI11ProcessTestEE.testLaunchEnv
++N7CppUnit10TestCallerI7EVPTestEE.testRSAEVPKeyFromPKCS12
++N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testFullPKCS12
++N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testCertsOnlyPKCS12
++N7CppUnit10TestCallerI19PKCS12ContainerTestEE.testPEMReadWrite
++N7CppUnit10TestCallerI11MongoDBTestEE.testArray
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest b/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest
index 521cc08..c8e50fc 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/run-ptest
@@ -1,8 +1,21 @@
 #!/bin/sh
+export POCO_BASE=/usr/lib/poco/ptest
+export LD_LIBRARY_PATH=${POCO_BASE}/bin:${LD_LIBRARY_PATH}
+i=0
 while read runner; do
   oldpath=`pwd` >/dev/null
   cd bin
   echo Testing $runner
   ./$runner -ignore $oldpath/cppignore.lnx -all
+  export res$((i++))=$?
   cd $oldpath >/dev/null
 done < testrunners
+i=0
+while read runner; do
+  eval assign=\$res$((i++))
+  if [ $assign -ne 0 ]; then
+    echo "FAIL: $runner"
+  else
+    echo "PASS: $runner"
+  fi
+done < testrunners
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
index 47dac1a..8505f66 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
@@ -10,6 +10,7 @@
 
 SRC_URI = "git://github.com/pocoproject/poco.git;branch=master;protocol=https \
            file://0001-Use-std-atomic-int-instead-of-std-atomic-bool.patch \
+           file://0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch \
            file://run-ptest \
            "
 SRCREV = "1211613642269b7d53bea58b02de7fcd25ece3b9"
@@ -23,7 +24,13 @@
 # By default the most commonly used poco components are built
 # Foundation is built anyway and doesn't need to be listed explicitly
 # these don't have dependencies outside oe-core
-PACKAGECONFIG ??= "XML JSON MongoDB PDF Util Net NetSSL Crypto JWT Data DataSQLite Zip Encodings Redis Prometheus"
+PACKAGECONFIG ??= "XML JSON PDF Util Net NetSSL Crypto JWT Data DataSQLite Zip Encodings Redis Prometheus"
+# MongoDB does not build for all architectures yet keep in sync with COMPATIBLE_HOST list in mongodb recipe
+# and mongodb needs meta-python enabled as well
+PACKAGECONFIG:remove:riscv32 = "MongoDB"
+PACKAGECONFIG:remove:riscv64 = "MongoDB"
+PACKAGECONFIG:remove:mipsarch = "MongoDB"
+PACKAGECONFIG:remove:powerpc = "MongoDB"
 
 PACKAGECONFIG[XML] = "-DENABLE_XML=ON,-DENABLE_XML=OFF,expat"
 PACKAGECONFIG[JSON] = "-DENABLE_JSON=ON,-DENABLE_JSON=OFF"
@@ -105,5 +112,7 @@
 ALLOW_EMPTY:${PN}-cppunit = "1"
 
 RDEPENDS:${PN}-ptest += "${PN}-cppunit"
+RDEPENDS:${PN}-ptest += "${@bb.utils.contains('PACKAGECONFIG', 'MongoDB', 'mongodb', '', d)}"
+RDEPENDS:${PN}-ptest += "${@bb.utils.contains('PACKAGECONFIG', 'Redis', 'redis', '', d)}"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/pv/pv/0001-pv-display-handle-error-of-tcgetpgrp-in-pv_in_foregr.patch b/meta-openembedded/meta-oe/recipes-support/pv/pv/0001-pv-display-handle-error-of-tcgetpgrp-in-pv_in_foregr.patch
index 3c364dc..c51fb1c 100644
--- a/meta-openembedded/meta-oe/recipes-support/pv/pv/0001-pv-display-handle-error-of-tcgetpgrp-in-pv_in_foregr.patch
+++ b/meta-openembedded/meta-oe/recipes-support/pv/pv/0001-pv-display-handle-error-of-tcgetpgrp-in-pv_in_foregr.patch
@@ -15,6 +15,8 @@
 
 Signed-off-by: Michael Weiß <michael.weiss@aisec.fraunhofer.de>
 ---
+Upstream-Status: Pending
+
  src/pv/display.c | 4 ++++
  1 file changed, 4 insertions(+)
 
diff --git a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.31.bb b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.31.bb
deleted file mode 100644
index 56ad32c..0000000
--- a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.31.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-DESCRIPTION = "A feature rich Remote Desktop Application written in GTK+"
-HOMEPAGE = "https://remmina.org"
-SECTION = "Support"
-LICENSE = "GPL-2.0-only & OpenSSL"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=dab7215512044d49037272ce1ac4ea8f file://LICENSE.OpenSSL;md5=c1eb3cee0a4dea27503c531267a69769"
-
-DEPENDS = " \
-    glib-2.0-native \
-    openssl \
-    freerdp \
-    gtk+3 \
-    gdk-pixbuf \
-    atk \
-    libgcrypt \
-    libsodium \
-    libssh \
-    vte \
-    json-glib \
-    libsoup-3.0 \
-    libvncserver \
-    libsecret \
-    libxkbfile \
-"
-
-DEPENDS:append:libc-musl = " libexecinfo"
-LDFLAGS:append:libc-musl = " -lexecinfo"
-
-SRCREV = "7407cc3a27eb25ba4ddddeab565f67fd688324ed"
-SRC_URI = "git://gitlab.com/Remmina/Remmina;protocol=https;branch=master"
-S = "${WORKDIR}/git"
-
-inherit cmake features_check mime mime-xdg gtk-icon-cache pkgconfig
-REQUIRED_DISTRO_FEATURES = "x11"
-
-EXTRA_OECMAKE += "-DWITH_APPINDICATOR=OFF -DWITH_GETTEXT=OFF -DWITH_TRANSLATIONS=OFF -DHAVE_LIBAPPINDICATOR=OFF -DWITH_WEBKIT2GTK=OFF"
-
-PACKAGECONFIG[spice] = "-DWITH_SPICE=ON, -DWITH_SPICE=OFF, spice spice-protocol"
-# Switch on gtk support in avahi recipe if you want to enable avahi support
-PACKAGECONFIG[avahi] = "-DWITH_AVAHI=ON, -DWITH_AVAHI=OFF, avahi"
-
-do_configure:append() {
-    sed -i -e 's|${WORKDIR}|<WORKDIR>|g' ${B}/generated/buildflags.h
-}
-
-RDEPENDS:${PN} = "bash"
-
-FILES:${PN}+= " \
-    ${datadir}/metainfo \
-    ${datadir}/mime \
-"
diff --git a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb
new file mode 100644
index 0000000..74c68a5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb
@@ -0,0 +1,50 @@
+DESCRIPTION = "A feature rich Remote Desktop Application written in GTK+"
+HOMEPAGE = "https://remmina.org"
+SECTION = "Support"
+LICENSE = "GPL-2.0-only & OpenSSL"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dab7215512044d49037272ce1ac4ea8f file://LICENSE.OpenSSL;md5=c1eb3cee0a4dea27503c531267a69769"
+
+DEPENDS = " \
+    glib-2.0-native \
+    openssl \
+    freerdp \
+    gtk+3 \
+    gdk-pixbuf \
+    atk \
+    libgcrypt \
+    libsodium \
+    libssh \
+    vte \
+    json-glib \
+    libsoup-3.0 \
+    libvncserver \
+    libsecret \
+    libxkbfile \
+"
+
+DEPENDS:append:libc-musl = " libexecinfo"
+LDFLAGS:append:libc-musl = " -lexecinfo"
+
+SRCREV = "4804f68f23045a38c3a7be46810fce14bac2fc3c"
+SRC_URI = "git://gitlab.com/Remmina/Remmina;protocol=https;branch=master"
+S = "${WORKDIR}/git"
+
+inherit cmake features_check mime mime-xdg gtk-icon-cache pkgconfig
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECMAKE += "-DWITH_APPINDICATOR=OFF -DWITH_GETTEXT=OFF -DWITH_TRANSLATIONS=OFF -DHAVE_LIBAPPINDICATOR=OFF -DWITH_WEBKIT2GTK=OFF"
+
+PACKAGECONFIG[spice] = "-DWITH_SPICE=ON, -DWITH_SPICE=OFF, spice spice-protocol"
+# Switch on gtk support in avahi recipe if you want to enable avahi support
+PACKAGECONFIG[avahi] = "-DWITH_AVAHI=ON, -DWITH_AVAHI=OFF, avahi"
+
+do_configure:append() {
+    sed -i -e 's|${WORKDIR}|<WORKDIR>|g' ${B}/generated/buildflags.h
+}
+
+RDEPENDS:${PN} = "bash"
+
+FILES:${PN}+= " \
+    ${datadir}/metainfo \
+    ${datadir}/mime \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-configure.ac-Check-and-define-intmax_t-type.patch b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-configure.ac-Check-and-define-intmax_t-type.patch
new file mode 100644
index 0000000..32562a0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils/0001-configure.ac-Check-and-define-intmax_t-type.patch
@@ -0,0 +1,32 @@
+From ea6f7a4c22f1b6f28cf426566cccd65eb9a0e9de Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 10 Sep 2023 13:52:31 -0700
+Subject: [PATCH] configure.ac: Check and define intmax_t type
+
+If stdint.h or inttypes.h defines the type intmax_t, define HAVE_INTMAX_T.
+Otherwise, define intmax_t to the widest signed integer type.
+
+intmax_t is defined in lib/system.h if system is not providing it but it
+needs to be checked by configure for existence first.
+
+Upstream-Status: Submitted [https://savannah.gnu.org/bugs/index.php?64653]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 1242cb7..2ccaac9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -72,6 +72,7 @@ AC_HEADER_STAT
+ AC_HEADER_STDC
+ AC_STRUCT_TIMEZONE
+ AC_TYPE_SIZE_T
++AC_TYPE_INTMAX_T
+ AC_CHECK_FUNCS([fchmod isascii strchr])
+ AC_FUNC_CLOSEDIR_VOID
+ AC_FUNC_FSEEKO
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
index bd2776e..2a16b18 100644
--- a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
@@ -12,6 +12,7 @@
            file://0001-Fix-build-with-recent-gettext.patch \
            file://0001-Fix-building-with-GCC-10.patch \
            file://0002-Do-not-include-lib-md5.c-into-src-shar.c.patch \
+           file://0001-configure.ac-Check-and-define-intmax_t-type.patch \
            "
 SRC_URI[md5sum] = "32a51b23e25ad5e6af4b89f228be1800"
 SRC_URI[sha256sum] = "ee336e68549664e7a19b117adf02edfdeac6307f22e5ba78baca457116914637"
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-Makefile.am-Dont-include-buildpath.patch b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-Makefile.am-Dont-include-buildpath.patch
new file mode 100644
index 0000000..727c5a3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2/0001-Makefile.am-Dont-include-buildpath.patch
@@ -0,0 +1,47 @@
+From b1b58f122a3e05b5689358fdd3203ba110cca567 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sun, 24 Sep 2023 22:20:42 +0200
+Subject: [PATCH] Reproducibility fix
+
+This fixes:
+WARNING: udisks2-2.10.1-r0 do_package_qa: QA Issue: File /usr/lib/udisks2/modules/libudisks2_btrfs.so in package udisks2 contains reference to TMPDIR
+File /usr/lib/udisks2/modules/libudisks2_lvm2.so in package udisks2 contains reference to TMPDIR
+File /usr/libexec/udisks2/udisksd in package udisks2 contains reference to TMPDIR [buildpaths]
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ modules/lvm2/Makefile.am | 2 +-
+ src/Makefile.am          | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/lvm2/Makefile.am b/modules/lvm2/Makefile.am
+index 67b8aa6b3..e4ae462e7 100644
+--- a/modules/lvm2/Makefile.am
++++ b/modules/lvm2/Makefile.am
+@@ -16,7 +16,7 @@ CPPFLAGS =                                                                     \
+ 	-DLVM_HELPER_DIR=\""$(prefix)/lib/udisks2/"\"                          \
+ 	-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT                                \
+ 	-DUDISKS_COMPILATION                                                   \
+-	-DBUILD_DIR=\"$(abs_top_builddir)/\"                                   \
++	-DBUILD_DIR=\"/usr/src/\"                                              \
+ 	$(POLKIT_GOBJECT_1_CFLAGS)                                             \
+ 	$(GLIB_CFLAGS)                                                         \
+ 	$(GIO_CFLAGS)                                                          \
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 5a174d1ab..0da3a497b 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -20,7 +20,7 @@ CPPFLAGS =                                                                     \
+ 	-DUDISKS_MODULE_DIR=\"$(libdir)/udisks2/modules\"                      \
+ 	-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT                                \
+ 	-DUDISKS_COMPILATION                                                   \
+-	-DBUILD_DIR=\"$(abs_top_builddir)/\"                                   \
++	-DBUILD_DIR=\"/usr/src/\"                                              \
+ 	$(POLKIT_GOBJECT_1_CFLAGS)                                             \
+ 	$(GUDEV_CFLAGS)                                                        \
+ 	$(GLIB_CFLAGS)                                                         \
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.10.1.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.10.1.bb
new file mode 100644
index 0000000..cb1cbe6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.10.1.bb
@@ -0,0 +1,63 @@
+SUMMARY = "udisks provides dbus interfaces for disks and storage devices"
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd79f6dbbffdbc8e86b086a8f0c0ef43"
+
+DEPENDS = " \
+    glib-2.0-native \
+    libxslt-native \
+    acl \
+    libatasmart \
+    polkit \
+    libgudev \
+    glib-2.0 \
+    dbus-glib \
+    libblockdev \
+"
+DEPENDS += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+RDEPENDS:${PN} = "acl"
+
+SRC_URI = " \
+	git://github.com/storaged-project/udisks.git;branch=2.10.x-branch;protocol=https \
+	file://0001-Makefile.am-Dont-include-buildpath.patch \
+"
+SRCREV = "18c9faf089e306ad6f3f51f5cb887a6b9aa08350"
+S = "${WORKDIR}/git"
+
+CVE_PRODUCT = "udisks"
+
+inherit autotools-brokensep systemd gtk-doc gobject-introspection gettext features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+EXTRA_OECONF = "--disable-man --disable-gtk-doc"
+
+do_configure:prepend() {
+    # | configure.ac:656: error: required file 'build-aux/config.rpath' not found
+    mkdir -p ${S}/build-aux
+    touch ${S}/build-aux/config.rpath
+}
+
+PACKAGECONFIG ?= ""
+
+PACKAGECONFIG[lvm2] = "--enable-lvm2,--disable-lvm2,lvm2"
+PACKAGECONFIG[btrfs] = "--enable-btrfs,--disable-btrfs,,btrfs-tools"
+PACKAGECONFIG[lsm] = "--enable-lsm,--disable-lsm,libstoragemgmt"
+
+FILES:${PN} += " \
+    ${datadir}/dbus-1/ \
+    ${datadir}/polkit-1 \
+    ${datadir}/bash-completion \
+    ${datadir}/zsh \
+    ${libdir}/polkit-1/extensions/*.so \
+    ${nonarch_base_libdir}/udev/* \
+    ${exec_prefix}${nonarch_base_libdir}/udisks2/* \
+    ${systemd_system_unitdir} \
+"
+
+PACKAGES =+ "${PN}-libs"
+FILES:${PN}-libs = "${libdir}/lib*${SOLIBS}"
+FILES:${PN} += "${nonarch_libdir}/tmpfiles.d"
+
+SYSTEMD_SERVICE:${PN} = "${BPN}.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.9.4.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.9.4.bb
deleted file mode 100644
index 2030063..0000000
--- a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.9.4.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "udisks provides dbus interfaces for disks and storage devices"
-LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=dd79f6dbbffdbc8e86b086a8f0c0ef43"
-
-DEPENDS = " \
-    glib-2.0-native \
-    libxslt-native \
-    acl \
-    libatasmart \
-    polkit \
-    libgudev \
-    glib-2.0 \
-    dbus-glib \
-    libblockdev \
-"
-DEPENDS += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-
-RDEPENDS:${PN} = "acl"
-
-SRC_URI = "git://github.com/storaged-project/udisks.git;branch=2.9.x-branch;protocol=https"
-SRCREV = "001c486e6d099ed33e2de4f5c73c03e3ee180f81"
-S = "${WORKDIR}/git"
-
-CVE_PRODUCT = "udisks"
-
-inherit autotools-brokensep systemd gtk-doc gobject-introspection gettext features_check
-
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-EXTRA_OECONF = "--disable-man --disable-gtk-doc"
-
-do_configure:prepend() {
-    # | configure.ac:656: error: required file 'build-aux/config.rpath' not found
-    mkdir -p ${S}/build-aux
-    touch ${S}/build-aux/config.rpath
-}
-
-PACKAGECONFIG ?= ""
-
-PACKAGECONFIG[lvm2] = "--enable-lvm2,--disable-lvm2,lvm2"
-PACKAGECONFIG[btrfs] = "--enable-btrfs,--disable-btrfs,,btrfs-tools"
-PACKAGECONFIG[lsm] = "--enable-lsm,--disable-lsm,libstoragemgmt"
-
-FILES:${PN} += " \
-    ${datadir}/dbus-1/ \
-    ${datadir}/polkit-1 \
-    ${datadir}/bash-completion \
-    ${libdir}/polkit-1/extensions/*.so \
-    ${nonarch_base_libdir}/udev/* \
-    ${exec_prefix}${nonarch_base_libdir}/udisks2/* \
-    ${systemd_system_unitdir} \
-"
-
-PACKAGES =+ "${PN}-libs"
-FILES:${PN}-libs = "${libdir}/lib*${SOLIBS}"
-FILES:${PN} += "${nonarch_libdir}/tmpfiles.d"
-
-SYSTEMD_SERVICE:${PN} = "${BPN}.service"
-SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
new file mode 100644
index 0000000..01969d4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
@@ -0,0 +1,50 @@
+From 4cf34517b0c793405dca154cc70c9b5d1a566a8a Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@gmail.com>
+Date: Fri, 29 Sep 2023 14:52:50 -0400
+Subject: [PATCH] vbox_fb: fix kernel v6.5 build
+
+When building against the 6.5 kernel (and kernel headers), the following
+build error is encountered:
+
+   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:194:24: error: 'drm_fb_helper_sys_fillrect' undeclared here (not in a function); did you mean 'drm_fb_helper_lastclose'?
+   |   194 |         .fb_fillrect = drm_fb_helper_sys_fillrect,
+   |       |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
+   |       |                        drm_fb_helper_lastclose
+   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:195:24: error: 'drm_fb_helper_sys_copyarea' undeclared here (not in a function); did you mean 'drm_fb_helper_set_par'?
+   |   195 |         .fb_copyarea = drm_fb_helper_sys_copyarea,
+   |       |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
+   |       |                        drm_fb_helper_set_par
+   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:196:25: error: 'drm_fb_helper_sys_imageblit' undeclared here (not in a function)
+   |   196 |         .fb_imageblit = drm_fb_helper_sys_imageblit,
+   |       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We backport a patch from vbox-dev to fix the issue.
+
+Upstream-Status: Submitted [https://www.mail-archive.com/vbox-dev@virtualbox.org/msg10129.html]
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
+---
+ src/VBox/Additions/linux/drm/vbox_fb.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c b/src/VBox/Additions/linux/drm/vbox_fb.c
+index 2a8c79ab..d453533c 100644
+--- a/src/VBox/Additions/linux/drm/vbox_fb.c
++++ b/src/VBox/Additions/linux/drm/vbox_fb.c
+@@ -196,9 +196,13 @@ static struct fb_ops vboxfb_ops = {
+ 	.owner = THIS_MODULE,
+ 	.fb_check_var = drm_fb_helper_check_var,
+ 	.fb_set_par = drm_fb_helper_set_par,
++#if RTLNX_VER_MIN(6, 5, 0)
++	FB_DEFAULT_SYS_OPS,
++#else
+ 	.fb_fillrect = drm_fb_helper_sys_fillrect,
+ 	.fb_copyarea = drm_fb_helper_sys_copyarea,
+ 	.fb_imageblit = drm_fb_helper_sys_imageblit,
++#endif
+ 	.fb_pan_display = drm_fb_helper_pan_display,
+ 	.fb_blank = drm_fb_helper_blank,
+ 	.fb_setcmap = drm_fb_helper_setcmap,
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
index f193636..8e90138 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
@@ -13,6 +13,7 @@
 
 SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
     file://Makefile.utils \
+    file://0001-vbox_fb-fix-kernel-v6.5-build.patch \
 "
 
 SRC_URI[sha256sum] = "0b1e6d8b7f87d017c7fae37f80586acff04f799ffc1d51e995954d6415dee371"
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
index 8ae39f1..d6d4a2b 100644
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch
@@ -1,4 +1,4 @@
-From 10cfdcc905915d8814c609008a069102f2bc7e39 Mon Sep 17 00:00:00 2001
+From 69d8e34f60e6a124f699365101e854076cfe0f1b Mon Sep 17 00:00:00 2001
 From: Alexander Kanavin <alex.kanavin@gmail.com>
 Date: Tue, 27 Oct 2015 16:02:19 +0200
 Subject: [PATCH] FindGObjectIntrospection.cmake: prefix variables obtained
@@ -9,12 +9,13 @@
 
 Upstream-Status: Inappropriate [oe-core specific]
 Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
 ---
  Source/cmake/FindGI.cmake | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/Source/cmake/FindGI.cmake b/Source/cmake/FindGI.cmake
-index af039cbb..b3e810cd 100644
+index fdc56b21..d42eca52 100644
 --- a/Source/cmake/FindGI.cmake
 +++ b/Source/cmake/FindGI.cmake
 @@ -72,6 +72,9 @@ if (PKG_CONFIG_FOUND)
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0d3344e17d258106617b0e6d783d073b188a2548.patch b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0d3344e17d258106617b0e6d783d073b188a2548.patch
index 34e0ff9..d19d1e1 100644
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0d3344e17d258106617b0e6d783d073b188a2548.patch
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/0d3344e17d258106617b0e6d783d073b188a2548.patch
@@ -1,7 +1,8 @@
-From 647c93de99a0f71f478d76a4cc7714eba7ba1447 Mon Sep 17 00:00:00 2001
+From e3c12b38037b4bb3053c440e4bd22c36c1dc576b Mon Sep 17 00:00:00 2001
 From: Adrian Perez de Castro <aperez@igalia.com>
 Date: Thu, 2 Jun 2022 11:19:06 +0300
 Subject: [PATCH] FELightningNEON.cpp fails to build, NEON fast path seems
+
  unused https://bugs.webkit.org/show_bug.cgi?id=241182
 
 Reviewed by NOBODY (OOPS!).
@@ -33,6 +34,7 @@
 
 Upstream-Status: Submitted [https://github.com/WebKit/WebKit/pull/1233]
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
 ---
  .../cpu/arm/filters/FELightingNEON.cpp        |  4 +-
  .../graphics/cpu/arm/filters/FELightingNEON.h | 52 +++++++++----------
@@ -203,7 +205,7 @@
 -
 -#endif // FELightingNEON_h
 diff --git a/Source/WebCore/platform/graphics/filters/DistantLightSource.h b/Source/WebCore/platform/graphics/filters/DistantLightSource.h
-index 70c6512f..b032c82e 100644
+index 70f583b3..7d5d27e5 100644
 --- a/Source/WebCore/platform/graphics/filters/DistantLightSource.h
 +++ b/Source/WebCore/platform/graphics/filters/DistantLightSource.h
 @@ -26,6 +26,10 @@
@@ -218,7 +220,7 @@
  
  class DistantLightSource : public LightSource {
 diff --git a/Source/WebCore/platform/graphics/filters/FELighting.h b/Source/WebCore/platform/graphics/filters/FELighting.h
-index 53beb596..e78a9354 100644
+index 179edf6d..694d712d 100644
 --- a/Source/WebCore/platform/graphics/filters/FELighting.h
 +++ b/Source/WebCore/platform/graphics/filters/FELighting.h
 @@ -35,8 +35,6 @@
@@ -229,8 +231,8 @@
 -
  class FELighting : public FilterEffect {
  public:
-     const Color& lightingColor() const { return m_lightingColor; }
-@@ -64,11 +62,6 @@ protected:
+     bool operator==(const FELighting&) const;
+@@ -68,11 +66,6 @@ protected:
  
      std::unique_ptr<FilterEffectApplier> createSoftwareApplier() const override;
  
@@ -243,7 +245,7 @@
      float m_surfaceScale;
      float m_diffuseConstant;
 diff --git a/Source/WebCore/platform/graphics/filters/PointLightSource.h b/Source/WebCore/platform/graphics/filters/PointLightSource.h
-index 3a5723f0..675d63f5 100644
+index a8cfdab8..34f867bb 100644
 --- a/Source/WebCore/platform/graphics/filters/PointLightSource.h
 +++ b/Source/WebCore/platform/graphics/filters/PointLightSource.h
 @@ -26,6 +26,10 @@
@@ -258,7 +260,7 @@
  
  class PointLightSource : public LightSource {
 diff --git a/Source/WebCore/platform/graphics/filters/SpotLightSource.h b/Source/WebCore/platform/graphics/filters/SpotLightSource.h
-index 684626f7..dea58389 100644
+index 6404467a..5cac38f2 100644
 --- a/Source/WebCore/platform/graphics/filters/SpotLightSource.h
 +++ b/Source/WebCore/platform/graphics/filters/SpotLightSource.h
 @@ -26,6 +26,10 @@
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/no-musttail-arm.patch b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/no-musttail-arm.patch
new file mode 100644
index 0000000..c660baa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/no-musttail-arm.patch
@@ -0,0 +1,21 @@
+clang/arm: Do not use MUST_TAIL_CALL
+
+This causes clang-17 to crash see [1]
+this code is new in webkit 2.42[2] thats why we do not see the crash in older webkit
+
+[1] https://github.com/llvm/llvm-project/issues/67767
+[2] https://github.com/WebKit/WebKit/commit/4d816460b765acd8aef90ab474615850b91ecc35
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/Source/WTF/wtf/Compiler.h
++++ b/Source/WTF/wtf/Compiler.h
+@@ -284,7 +284,7 @@
+ /* MUST_TAIL_CALL */
+ 
+ #if !defined(MUST_TAIL_CALL) && defined(__cplusplus) && defined(__has_cpp_attribute)
+-#if __has_cpp_attribute(clang::musttail)
++#if __has_cpp_attribute(clang::musttail) && !defined(__arm__)
+ #define MUST_TAIL_CALL [[clang::musttail]]
+ #endif
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/reproducibility.patch b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/reproducibility.patch
index e866a1a..15e255e 100644
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/reproducibility.patch
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3/reproducibility.patch
@@ -1,3 +1,8 @@
+From 3b25aac4240d8af8bed3b0113110b36980370a98 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 27 Jul 2023 22:09:06 +0200
+Subject: [PATCH] webkitgtk3: add recipe
+
 Injection a year based on the current date isn't reproducible. Hack this
 to a specific year for now for reproducibilty and to avoid autobuilder failures.
 
@@ -7,10 +12,14 @@
 Upstream-Status: Pending [could be reworked]
 Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
 
-Index: webkitgtk-2.34.2/Source/JavaScriptCore/generator/GeneratedFile.rb
-===================================================================
---- webkitgtk-2.34.2.orig/Source/JavaScriptCore/generator/GeneratedFile.rb
-+++ webkitgtk-2.34.2/Source/JavaScriptCore/generator/GeneratedFile.rb
+---
+ Source/JavaScriptCore/generator/GeneratedFile.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Source/JavaScriptCore/generator/GeneratedFile.rb b/Source/JavaScriptCore/generator/GeneratedFile.rb
+index 6ed2b6e4..86a28286 100644
+--- a/Source/JavaScriptCore/generator/GeneratedFile.rb
++++ b/Source/JavaScriptCore/generator/GeneratedFile.rb
 @@ -25,7 +25,7 @@ require 'date'
  require 'digest'
  
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.40.5.bb b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.40.5.bb
deleted file mode 100644
index 5d43f3a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.40.5.bb
+++ /dev/null
@@ -1,179 +0,0 @@
-SUMMARY = "WebKit web rendering engine for the GTK+ platform"
-HOMEPAGE = "https://www.webkitgtk.org/"
-BUGTRACKER = "https://bugs.webkit.org/"
-
-LICENSE = "BSD-2-Clause & LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d84286dda758da57bd691 \
-                    file://Source/WebCore/LICENSE-APPLE;md5=4646f90082c40bcf298c285f8bab0b12 \
-                    file://Source/WebCore/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \
-                    file://Source/WebCore/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
-                    "
-
-SRC_URI = "https://www.webkitgtk.org/releases/webkitgtk-${PV}.tar.xz \
-           file://0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch \
-           file://reproducibility.patch \
-           file://0d3344e17d258106617b0e6d783d073b188a2548.patch \
-           file://check-GST_GL_HAVE_PLATFORM_GLX.patch \
-           "
-SRC_URI[sha256sum] = "7de051a263668621d91a61a5eb1c3771d1a7cec900043d4afef06c326c16037f"
-
-inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gi-docgen
-
-S = "${WORKDIR}/webkitgtk-${PV}"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'opengl', '', d)}"
-
-CVE_PRODUCT = "webkitgtk webkitgtk\+"
-
-DEPENDS += " \
-          ruby-native \
-          gperf-native \
-          unifdef-native \
-          cairo \
-          harfbuzz \
-          jpeg \
-          atk \
-          libwebp \
-          gtk+3 \
-          libxslt \
-          libtasn1 \
-          libnotify \
-          gstreamer1.0 \
-          gstreamer1.0-plugins-base \
-          glib-2.0-native \
-          gettext-native \
-          "
-
-PACKAGECONFIG_SOUP ?= "soup3"
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd wayland x11', d)} \
-                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'webgl opengl', '', d)} \
-                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'webgl gles2', d)} \
-                   ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl-or-es', '', d)} \
-                   enchant \
-                   libsecret \
-                   ${PACKAGECONFIG_SOUP} \
-                  "
-
-PACKAGECONFIG[wayland] = "-DENABLE_WAYLAND_TARGET=ON,-DENABLE_WAYLAND_TARGET=OFF,wayland libwpe wpebackend-fdo wayland-native"
-PACKAGECONFIG[angle] = "-DUSE_ANGLE_WEBGL=ON,-DUSE_ANGLE_WEBGL=OFF"
-PACKAGECONFIG[x11] = "-DENABLE_X11_TARGET=ON,-DENABLE_X11_TARGET=OFF,virtual/libx11 libxcomposite libxdamage libxrender libxt"
-PACKAGECONFIG[geoclue] = "-DENABLE_GEOLOCATION=ON,-DENABLE_GEOLOCATION=OFF,geoclue"
-PACKAGECONFIG[enchant] = "-DENABLE_SPELLCHECK=ON,-DENABLE_SPELLCHECK=OFF,enchant2"
-PACKAGECONFIG[gles2] = "-DENABLE_GLES2=ON,-DENABLE_GLES2=OFF,virtual/libgles2"
-PACKAGECONFIG[webgl] = "-DENABLE_WEBGL=ON,-DENABLE_WEBGL=OFF,virtual/egl"
-PACKAGECONFIG[opengl] = "-DENABLE_GRAPHICS_CONTEXT_GL=ON,-DENABLE_GRAPHICS_CONTEXT_GL=OFF,virtual/egl"
-PACKAGECONFIG[opengl-or-es] = "-DUSE_OPENGL_OR_ES=ON,-DUSE_OPENGL_OR_ES=OFF"
-PACKAGECONFIG[libsecret] = "-DUSE_LIBSECRET=ON,-DUSE_LIBSECRET=OFF,libsecret"
-PACKAGECONFIG[libhyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,libhyphen"
-PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
-PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
-PACKAGECONFIG[systemd] = "-DUSE_SYSTEMD=ON,-DUSE_SYSTEMD=off,systemd"
-PACKAGECONFIG[reduce-size] = "-DCMAKE_BUILD_TYPE=MinSizeRel,-DCMAKE_BUILD_TYPE=Release,,"
-PACKAGECONFIG[lcms] = "-DUSE_LCMS=ON,-DUSE_LCMS=OFF,lcms"
-PACKAGECONFIG[soup2] = "-DUSE_SOUP2=ON,-DUSE_SOUP2=OFF,libsoup-2.4,,,soup3"
-PACKAGECONFIG[soup3] = ",,libsoup,,,soup2"
-PACKAGECONFIG[journald] = "-DENABLE_JOURNALD_LOG=ON,-DENABLE_JOURNALD_LOG=OFF,systemd"
-PACKAGECONFIG[avif] = "-DUSE_AVIF_LOG=ON,-DUSE_AVIF=OFF,libavif"
-PACKAGECONFIG[media-recorder] = "-DENABLE_MEDIA_RECORDER=ON,-DENABLE_MEDIA_RECORDER=OFF,gstreamer1.0-plugins-bad"
-PACKAGECONFIG[gamepad] = "-DENABLE_GAMEPAD=ON,-DENABLE_GAMEPAD=OFF,libmanette"
-PACKAGECONFIG[webrtc] = "-DENABLE_WEB_RTC=ON,-DENABLE_WEB_RTC=OFF"
-PACKAGECONFIG[bubblewrap] = "-DENABLE_BUBBLEWRAP_SANDBOX=ON -DBWRAP_EXECUTABLE=${bindir}/bwrap -DDBUS_PROXY_EXECUTABLE=${bindir}/xdg-dbus-proxy,-DENABLE_BUBBLEWRAP_SANDBOX=OFF,,bubblewrap xdg-dbus-proxy"
-
-EXTRA_OECMAKE = " \
-		-DPORT=GTK \
-		${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DENABLE_INTROSPECTION=ON', '-DENABLE_INTROSPECTION=OFF', d)} \
-		${@bb.utils.contains('GIDOCGEN_ENABLED', 'True', '-DENABLE_DOCUMENTATION=ON', '-DENABLE_DOCUMENTATION=OFF', d)} \
-		-DENABLE_MINIBROWSER=ON \
-		"
-
-# Javascript JIT is not supported on ARC
-EXTRA_OECMAKE:append:arc = " -DENABLE_JIT=OFF "
-# By default 25-bit "medium" calls are used on ARC
-# which is not enough for binaries larger than 32 MiB
-CFLAGS:append:arc = " -mlong-calls"
-CXXFLAGS:append:arc = " -mlong-calls"
-
-# Needed for non-mesa graphics stacks when x11 is disabled
-CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
-
-# Javascript JIT is not supported on powerpc
-EXTRA_OECMAKE:append:powerpc = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE:append:powerpc64 = " -DENABLE_JIT=OFF "
-
-# ARM JIT code does not build on ARMv4/5/6 anymore
-EXTRA_OECMAKE:append:armv4 = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE:append:armv5 = " -DENABLE_JIT=OFF "
-EXTRA_OECMAKE:append:armv6 = " -DENABLE_JIT=OFF "
-
-# And for armv7* don't enable it for softfp, because after:
-# https://github.com/WebKit/WebKit/commit/a2ec4ef1997d6fafa6ffc607bffb54e76168a918
-# https://bugs.webkit.org/show_bug.cgi?id=242172
-# softfp armv7* fails because WEBASSEMBLY is left enabled by default and JIT gets
-# explicitly disabled causing:
-# http://errors.yoctoproject.org/Errors/Details/734587/
-# PR was sent upstream, but the end result is the same both JIT and WEBASSEMBLY disabled
-# https://github.com/WebKit/WebKit/pull/17447
-EXTRA_OECMAKE:append:armv7a = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
-EXTRA_OECMAKE:append:armv7r = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
-EXTRA_OECMAKE:append:armv7ve = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
-
-EXTRA_OECMAKE:append:mipsarch = " -DUSE_LD_GOLD=OFF "
-EXTRA_OECMAKE:append:powerpc = " -DUSE_LD_GOLD=OFF "
-
-# JIT and gold linker does not work on RISCV
-EXTRA_OECMAKE:append:riscv32 = " -DUSE_LD_GOLD=OFF -DENABLE_JIT=OFF"
-EXTRA_OECMAKE:append:riscv64 = " -DUSE_LD_GOLD=OFF"
-
-# JIT not supported on MIPS either
-EXTRA_OECMAKE:append:mipsarch = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
-
-# JIT not supported on X32
-# An attempt was made to upstream JIT support for x32 in
-# https://bugs.webkit.org/show_bug.cgi?id=100450, but this was closed as
-# unresolved due to limited X32 adoption.
-EXTRA_OECMAKE:append:x86-x32 = " -DENABLE_JIT=OFF "
-
-SECURITY_CFLAGS:remove:aarch64 = "-fpie"
-SECURITY_CFLAGS:append:aarch64 = " -fPIE"
-
-FILES:${PN} += "${libdir}/webkit2gtk-4.*/injected-bundle/libwebkit2gtkinjectedbundle.so"
-
-RRECOMMENDS:${PN} += "ca-certificates shared-mime-info"
-
-# http://errors.yoctoproject.org/Errors/Details/20370/
-ARM_INSTRUCTION_SET:armv4 = "arm"
-ARM_INSTRUCTION_SET:armv5 = "arm"
-ARM_INSTRUCTION_SET:armv6 = "arm"
-
-# https://bugzilla.yoctoproject.org/show_bug.cgi?id=9474
-# https://bugs.webkit.org/show_bug.cgi?id=159880
-# JSC JIT can build on ARMv7 with -marm, but doesn't work on runtime.
-# Upstream only tests regularly the JSC JIT on ARMv7 with Thumb2 (-mthumb).
-ARM_INSTRUCTION_SET:armv7a = "thumb"
-ARM_INSTRUCTION_SET:armv7r = "thumb"
-ARM_INSTRUCTION_SET:armv7ve = "thumb"
-
-# ANGLE requires SSE support as of webkit 2.40.x on 32 bit x86
-COMPATIBLE_HOST:x86 = "${@bb.utils.contains_any('TUNE_FEATURES', 'core2 corei7', '.*', 'null', d)}"
-
-# introspection inside qemu-arm hangs forever on musl/arm builds
-# therefore disable GI_DATA
-GI_DATA_ENABLED:libc-musl:armv7a = "False"
-GI_DATA_ENABLED:libc-musl:armv7ve = "False"
-
-do_install:append() {
-	mv ${D}${bindir}/WebKitWebDriver ${D}${bindir}/WebKitWebDriver3
-}
-
-PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess"
-src_package_preprocess () {
-        # Trim build paths from comments in generated sources to ensure reproducibility
-        sed -i -e "s,${WORKDIR},,g" \
-            ${B}/JavaScriptCore/DerivedSources/*.h \
-            ${B}/JavaScriptCore/DerivedSources/yarr/*.h \
-            ${B}/JavaScriptCore/PrivateHeaders/JavaScriptCore/*.h \
-            ${B}/WebCore/DerivedSources/*.cpp \
-            ${B}/WebKitGTK/DerivedSources/webkit/*.cpp
-}
-
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb
new file mode 100644
index 0000000..f682cd9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb
@@ -0,0 +1,183 @@
+SUMMARY = "WebKit web rendering engine for the GTK+ platform"
+HOMEPAGE = "https://www.webkitgtk.org/"
+BUGTRACKER = "https://bugs.webkit.org/"
+
+LICENSE = "BSD-2-Clause & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://Source/JavaScriptCore/COPYING.LIB;md5=d0c6d6397a5d84286dda758da57bd691 \
+                    file://Source/WebCore/LICENSE-APPLE;md5=4646f90082c40bcf298c285f8bab0b12 \
+                    file://Source/WebCore/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \
+                    file://Source/WebCore/LICENSE-LGPL-2.1;md5=a778a33ef338abbaf8b8a7c36b6eec80 \
+                    "
+
+SRC_URI = "https://www.webkitgtk.org/releases/webkitgtk-${PV}.tar.xz \
+           file://0001-FindGObjectIntrospection.cmake-prefix-variables-obta.patch \
+           file://reproducibility.patch \
+           file://0d3344e17d258106617b0e6d783d073b188a2548.patch \
+           file://no-musttail-arm.patch \
+           "
+SRC_URI[sha256sum] = "828f95935861fae583fb8f2ae58cf64c63c178ae2b7c2d6f73070813ad64ed1b"
+
+inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gi-docgen
+
+S = "${WORKDIR}/webkitgtk-${PV}"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'opengl', '', d)}"
+
+CVE_PRODUCT = "webkitgtk webkitgtk\+"
+
+DEPENDS += " \
+          ruby-native \
+          gperf-native \
+          unifdef-native \
+          cairo \
+          harfbuzz \
+          jpeg \
+          atk \
+          libwebp \
+          gtk+3 \
+          libxslt \
+          libtasn1 \
+          libnotify \
+          gstreamer1.0 \
+          gstreamer1.0-plugins-base \
+          glib-2.0-native \
+          gettext-native \
+          "
+
+PACKAGECONFIG_SOUP ?= "soup3"
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd wayland x11', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'webgl opengl', '', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'webgl gles2', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl-or-es', '', d)} \
+                   enchant \
+                   libsecret \
+                   ${PACKAGECONFIG_SOUP} \
+                  "
+
+PACKAGECONFIG[wayland] = "-DENABLE_WAYLAND_TARGET=ON,-DENABLE_WAYLAND_TARGET=OFF,wayland libwpe wpebackend-fdo wayland-native"
+PACKAGECONFIG[angle] = "-DUSE_ANGLE_WEBGL=ON,-DUSE_ANGLE_WEBGL=OFF"
+PACKAGECONFIG[x11] = "-DENABLE_X11_TARGET=ON,-DENABLE_X11_TARGET=OFF,virtual/libx11 libxcomposite libxdamage libxrender libxt"
+PACKAGECONFIG[geoclue] = "-DENABLE_GEOLOCATION=ON,-DENABLE_GEOLOCATION=OFF,geoclue"
+PACKAGECONFIG[enchant] = "-DENABLE_SPELLCHECK=ON,-DENABLE_SPELLCHECK=OFF,enchant2"
+PACKAGECONFIG[gles2] = "-DENABLE_GLES2=ON,-DENABLE_GLES2=OFF,virtual/libgles2"
+PACKAGECONFIG[jpegxl] = " -DUSE_JPEGXL=ON,-DUSE_JPEGXL=OFF,libjxl"
+PACKAGECONFIG[webgl] = "-DENABLE_WEBGL=ON,-DENABLE_WEBGL=OFF,virtual/egl"
+PACKAGECONFIG[opengl] = "-DENABLE_GRAPHICS_CONTEXT_GL=ON,-DENABLE_GRAPHICS_CONTEXT_GL=OFF,virtual/egl"
+PACKAGECONFIG[opengl-or-es] = "-DUSE_OPENGL_OR_ES=ON,-DUSE_OPENGL_OR_ES=OFF"
+PACKAGECONFIG[libsecret] = "-DUSE_LIBSECRET=ON,-DUSE_LIBSECRET=OFF,libsecret"
+PACKAGECONFIG[libhyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,libhyphen"
+PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
+PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
+PACKAGECONFIG[systemd] = "-DUSE_SYSTEMD=ON,-DUSE_SYSTEMD=off,systemd"
+PACKAGECONFIG[reduce-size] = "-DCMAKE_BUILD_TYPE=MinSizeRel,-DCMAKE_BUILD_TYPE=Release,,"
+PACKAGECONFIG[lcms] = "-DUSE_LCMS=ON,-DUSE_LCMS=OFF,lcms"
+PACKAGECONFIG[soup2] = "-DUSE_SOUP2=ON,-DUSE_SOUP2=OFF,libsoup-2.4,,,soup3"
+PACKAGECONFIG[soup3] = ",,libsoup,,,soup2"
+PACKAGECONFIG[journald] = "-DENABLE_JOURNALD_LOG=ON,-DENABLE_JOURNALD_LOG=OFF,systemd"
+PACKAGECONFIG[avif] = "-DUSE_AVIF_LOG=ON,-DUSE_AVIF=OFF,libavif"
+PACKAGECONFIG[media-recorder] = "-DENABLE_MEDIA_RECORDER=ON,-DENABLE_MEDIA_RECORDER=OFF,gstreamer1.0-plugins-bad"
+PACKAGECONFIG[gamepad] = "-DENABLE_GAMEPAD=ON,-DENABLE_GAMEPAD=OFF,libmanette"
+PACKAGECONFIG[webrtc] = "-DENABLE_WEB_RTC=ON,-DENABLE_WEB_RTC=OFF"
+PACKAGECONFIG[bubblewrap] = "-DENABLE_BUBBLEWRAP_SANDBOX=ON -DBWRAP_EXECUTABLE=${bindir}/bwrap -DDBUS_PROXY_EXECUTABLE=${bindir}/xdg-dbus-proxy,-DENABLE_BUBBLEWRAP_SANDBOX=OFF,,bubblewrap xdg-dbus-proxy"
+
+EXTRA_OECMAKE = " \
+		-DPORT=GTK \
+		${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DENABLE_INTROSPECTION=ON', '-DENABLE_INTROSPECTION=OFF', d)} \
+		${@bb.utils.contains('GIDOCGEN_ENABLED', 'True', '-DENABLE_DOCUMENTATION=ON', '-DENABLE_DOCUMENTATION=OFF', d)} \
+		-DENABLE_MINIBROWSER=ON \
+		"
+# Unless DEBUG_BUILD is enabled, pass -g1 to massively reduce the size of the
+# debug symbols (4.3GB to 700M at time of writing)
+DEBUG_FLAGS:append = "${@oe.utils.vartrue('DEBUG_BUILD', '', ' -g1', d)}"
+
+# Javascript JIT is not supported on ARC
+EXTRA_OECMAKE:append:arc = " -DENABLE_JIT=OFF "
+# By default 25-bit "medium" calls are used on ARC
+# which is not enough for binaries larger than 32 MiB
+CFLAGS:append:arc = " -mlong-calls"
+CXXFLAGS:append:arc = " -mlong-calls"
+
+# Needed for non-mesa graphics stacks when x11 is disabled
+CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DEGL_NO_X11=1', d)}"
+
+# Javascript JIT is not supported on powerpc
+EXTRA_OECMAKE:append:powerpc = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:powerpc64 = " -DENABLE_JIT=OFF "
+
+# ARM JIT code does not build on ARMv4/5/6 anymore
+EXTRA_OECMAKE:append:armv4 = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:armv5 = " -DENABLE_JIT=OFF "
+EXTRA_OECMAKE:append:armv6 = " -DENABLE_JIT=OFF "
+
+# And for armv7* don't enable it for softfp, because after:
+# https://github.com/WebKit/WebKit/commit/a2ec4ef1997d6fafa6ffc607bffb54e76168a918
+# https://bugs.webkit.org/show_bug.cgi?id=242172
+# softfp armv7* fails because WEBASSEMBLY is left enabled by default and JIT gets
+# explicitly disabled causing:
+# http://errors.yoctoproject.org/Errors/Details/734587/
+# PR was sent upstream, but the end result is the same both JIT and WEBASSEMBLY disabled
+# https://github.com/WebKit/WebKit/pull/17447
+EXTRA_OECMAKE:append:armv7a = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+EXTRA_OECMAKE:append:armv7r = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+EXTRA_OECMAKE:append:armv7ve = " -DENABLE_JIT=${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'ON', 'OFF', d)}"
+
+EXTRA_OECMAKE:append:mipsarch = " -DUSE_LD_GOLD=OFF "
+EXTRA_OECMAKE:append:powerpc = " -DUSE_LD_GOLD=OFF "
+
+# JIT and gold linker does not work on RISCV
+EXTRA_OECMAKE:append:riscv32 = " -DUSE_LD_GOLD=OFF -DENABLE_JIT=OFF"
+EXTRA_OECMAKE:append:riscv64 = " -DUSE_LD_GOLD=OFF"
+
+# JIT not supported on MIPS either
+EXTRA_OECMAKE:append:mipsarch = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
+
+# JIT not supported on X32
+# An attempt was made to upstream JIT support for x32 in
+# https://bugs.webkit.org/show_bug.cgi?id=100450, but this was closed as
+# unresolved due to limited X32 adoption.
+EXTRA_OECMAKE:append:x86-x32 = " -DENABLE_JIT=OFF "
+
+SECURITY_CFLAGS:remove:aarch64 = "-fpie"
+SECURITY_CFLAGS:append:aarch64 = " -fPIE"
+
+FILES:${PN} += "${libdir}/webkit2gtk-4.*/injected-bundle/libwebkit2gtkinjectedbundle.so"
+
+RRECOMMENDS:${PN} += "ca-certificates shared-mime-info"
+
+# http://errors.yoctoproject.org/Errors/Details/20370/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
+
+# https://bugzilla.yoctoproject.org/show_bug.cgi?id=9474
+# https://bugs.webkit.org/show_bug.cgi?id=159880
+# JSC JIT can build on ARMv7 with -marm, but doesn't work on runtime.
+# Upstream only tests regularly the JSC JIT on ARMv7 with Thumb2 (-mthumb).
+ARM_INSTRUCTION_SET:armv7a = "thumb"
+ARM_INSTRUCTION_SET:armv7r = "thumb"
+ARM_INSTRUCTION_SET:armv7ve = "thumb"
+
+# ANGLE requires SSE support as of webkit 2.40.x on 32 bit x86
+COMPATIBLE_HOST:x86 = "${@bb.utils.contains_any('TUNE_FEATURES', 'core2 corei7', '.*', 'null', d)}"
+
+# introspection inside qemu-arm hangs forever on musl/arm builds
+# therefore disable GI_DATA
+GI_DATA_ENABLED:libc-musl:armv7a = "False"
+GI_DATA_ENABLED:libc-musl:armv7ve = "False"
+
+do_install:append() {
+	mv ${D}${bindir}/WebKitWebDriver ${D}${bindir}/WebKitWebDriver3
+}
+
+PACKAGE_PREPROCESS_FUNCS += "src_package_preprocess"
+src_package_preprocess () {
+        # Trim build paths from comments in generated sources to ensure reproducibility
+        sed -i -e "s,${WORKDIR},,g" \
+            ${B}/JavaScriptCore/DerivedSources/*.h \
+            ${B}/JavaScriptCore/DerivedSources/yarr/*.h \
+            ${B}/JavaScriptCore/PrivateHeaders/JavaScriptCore/*.h \
+            ${B}/WebCore/DerivedSources/*.cpp \
+            ${B}/WebKitGTK/DerivedSources/webkit/*.cpp
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-meson.build-add-a-hack-for-crosscompile.patch b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-meson.build-add-a-hack-for-crosscompile.patch
new file mode 100644
index 0000000..3410a88
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-meson.build-add-a-hack-for-crosscompile.patch
@@ -0,0 +1,28 @@
+From 7abb3840ac2870fcfc174fbbd81c4209c838e1a9 Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Mon, 18 Sep 2023 22:22:17 +0200
+Subject: [PATCH] meson.build: add a hack for cross-compiling
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+
+Upstream-Status: Inappropriate [cross-compile specific]
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 760613a..d339d26 100644
+--- a/meson.build
++++ b/meson.build
+@@ -168,7 +168,7 @@ pkgconfig.generate(
+     'prefix': get_option('prefix'),
+     'datarootdir': dataroot_dir,
+     'datadir': '${prefix}/@0@'.format(get_option('datadir')),
+-    'interfaces_dir': '${datadir}/dbus-1/interfaces/',
++    'interfaces_dir': '${pc_sysrootdir}${datadir}/dbus-1/interfaces/',
+   },
+ )
+ 
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-xdg-desktop-portal-pc-in-add-pc_sysrootdir-dir.patch b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-xdg-desktop-portal-pc-in-add-pc_sysrootdir-dir.patch
deleted file mode 100644
index 1997d0f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal/0001-xdg-desktop-portal-pc-in-add-pc_sysrootdir-dir.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 7727dbfef4dd7ced3958ae9ada59a8899976b12d Mon Sep 17 00:00:00 2001
-From: Markus Volk <f_l_k@t-online.de>
-Date: Mon, 12 Dec 2022 18:40:31 +0100
-Subject: [PATCH] xdg-desktop-portal.pc.in: add pc_sysrootdir dir
-
----
-Upstream-Status: Pending
-
- xdg-desktop-portal.pc.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/xdg-desktop-portal.pc.in b/xdg-desktop-portal.pc.in
-index 585c0c8..15b5817 100644
---- a/xdg-desktop-portal.pc.in
-+++ b/xdg-desktop-portal.pc.in
-@@ -2,7 +2,7 @@ prefix=@prefix@
- datarootdir=@datarootdir@
- datadir=@datadir@
- 
--interfaces_dir=${datadir}/dbus-1/interfaces/
-+interfaces_dir=${pc_sysrootdir}${datadir}/dbus-1/interfaces
- 
- Name: xdg-desktop-portal
- Description: Desktop integration portal
--- 
-2.34.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.16.0.bb b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.16.0.bb
deleted file mode 100644
index 0b3a93a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.16.0.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "A portal frontend service for Flatpak and possibly other desktop containment frameworks."
-HOMEPAGE = "https://github.com/flatpak/xdg-desktop-portal"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-DEPENDS = " \
-    json-glib \
-    glib-2.0 \
-    libportal \
-    geoclue \
-    pipewire \
-    dbus-native \
-    fuse3 \
-    xmlto-native \
-    flatpak \
-    python3-dbus-native \
-"
-
-PORTAL_BACKENDS ?= " \
-	${@bb.utils.contains('DISTRO_FEATURES', 'gtk+3', 'xdg-desktop-portal-gtk', '', d)} \
-	${@bb.utils.contains('DISTRO_FEATURES', 'gtk4', 'xdg-desktop-portal-gtk', '', d)} \
-"
-
-RDEPENDS:${PN} = "bubblewrap rtkit ${PORTAL_BACKENDS}"
-
-inherit meson pkgconfig python3native features_check
-
-SRC_URI = " \
-	git://github.com/flatpak/xdg-desktop-portal.git;protocol=https;branch=main \
-	file://0001-xdg-desktop-portal-pc-in-add-pc_sysrootdir-dir.patch \
-"
-
-S = "${WORKDIR}/git"
-SRCREV = "88af6c8ca4106fcf70925355350a669848e9fd5a"
-
-FILES:${PN} += "${libdir}/systemd ${datadir}/dbus-1"
-
-EXTRA_OEMESON += "--cross-file=${WORKDIR}/meson-${PN}.cross"
-
-do_write_config:append() {
-    cat >${WORKDIR}/meson-${PN}.cross <<EOF
-[binaries]
-bwrap = '${bindir}/bwrap'
-EOF
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb
new file mode 100644
index 0000000..b9173a9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb
@@ -0,0 +1,49 @@
+SUMMARY = "A portal frontend service for Flatpak and possibly other desktop containment frameworks."
+HOMEPAGE = "https://github.com/flatpak/xdg-desktop-portal"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+DEPENDS = " \
+    json-glib \
+    glib-2.0 \
+    flatpak \
+    libportal \
+    geoclue \
+    pipewire \
+    fuse3 \
+    xmlto-native \
+"
+
+PORTAL_BACKENDS ?= " \
+	${@bb.utils.contains('DISTRO_FEATURES', 'gtk+3', 'xdg-desktop-portal-gtk', '', d)} \
+	${@bb.utils.contains('DISTRO_FEATURES', 'gtk4', 'xdg-desktop-portal-gtk', '', d)} \
+"
+
+RDEPENDS:${PN} = "bubblewrap rtkit ${PORTAL_BACKENDS}"
+
+inherit meson pkgconfig python3native features_check
+
+SRC_URI = " \
+	git://github.com/flatpak/xdg-desktop-portal.git;protocol=https;branch=main \
+	file://0001-meson.build-add-a-hack-for-crosscompile.patch \
+"
+
+S = "${WORKDIR}/git"
+SRCREV = "a4b27063222b16652e73b422e5448d75335199ef"
+
+FILES:${PN} += "${libdir}/systemd ${datadir}/dbus-1"
+
+EXTRA_OEMESON += " \
+	--cross-file=${WORKDIR}/meson-${PN}.cross \
+	-Dflatpak-interfaces-dir=${STAGING_DATADIR}/dbus-1/interfaces \
+	-Ddbus-service-dir=${datadir}/dbus-1/services \
+"
+
+do_write_config:append() {
+    cat >${WORKDIR}/meson-${PN}.cross <<EOF
+[binaries]
+bwrap = '${bindir}/bwrap'
+EOF
+}
diff --git a/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.6.2.bb b/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.6.2.bb
index 470d26e..ed7a3f0 100644
--- a/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.6.2.bb
+++ b/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.6.2.bb
@@ -13,8 +13,6 @@
 
 S = "${WORKDIR}/git"
 
-inherit allarch
-
 RRECOMMENDS:${PN} = "libgpiod-tools"
 
 do_install () {
diff --git a/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb
index 8ae5c0e..4d793a4 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb
@@ -38,7 +38,7 @@
 }
 
 RDEPENDS:${PN}-ptest += "\
-    libnet-libidn-perl \
+    libnet-idn-encode \
     liburi-perl \
     perl-module-file-glob \
     perl-module-findbin \
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb
new file mode 100644
index 0000000..ce3b75b
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb
@@ -0,0 +1,23 @@
+SUMMARY = "IDN Perl module"
+DESCRIPTION = "This module provides an easy-to-use interface for encoding \
+               and decoding Internationalized Domain Names (IDNs)."
+
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8ea5704cf65ca4ec6e9e167fb94f14dd"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/C/CF/CFAERBER/Net-IDN-Encode-${PV}.tar.gz"
+SRC_URI[sha256sum] = "55453633e3ff24ce325b34bc2c8157b9859962a31ab5cf28bf7ccc1c9b3a3eaa"
+
+S = "${WORKDIR}/Net-IDN-Encode-${PV}"
+
+inherit cpan ptest-perl
+
+do_configure:prepend() {
+    perl -pi -e 's/auto_install_now.*//g' Makefile.PL
+}
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS:${PN} += "perl-module-unicode-normalize"
diff --git a/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb b/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
index f75007e..3b9a0f0 100644
--- a/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
+++ b/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
@@ -360,7 +360,6 @@
     python3-python-vlc \
     python3-pytoml \
     python3-pytun \
-    python3-pytz-deprecation-shim \
     python3-pyudev \
     python3-pyusb \
     python3-pywbem \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc
deleted file mode 100644
index 356a387..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Patch ssl.match_hostname for Unicode(idna) domains support"
-HOMEPAGE = "https://github.com/aio-libs/idna-ssl"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a61b9c5aec8796b64a6bf15d42605073"
-
-SRC_URI[md5sum] = "dd44ec53bac36e68446766fd8d3835bd"
-SRC_URI[sha256sum] = "a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"
-
-PYPI_PACKAGE = "idna-ssl"
-inherit pypi
-
-RDEPENDS:${PN} += " \
-    python3-idna \
-    python3-io \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_1.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_1.4.0.bb
deleted file mode 100644
index bbea9ca..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_1.4.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Abseil Python Common Libraries"
-HOMEPAGE = "https://github.com/abseil/abseil-py"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI[sha256sum] = "d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d"
-
-PYPI_PACKAGE = "absl-py"
-
-inherit pypi setuptools3
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_2.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_2.0.0.bb
new file mode 100644
index 0000000..42c7f3f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_2.0.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Abseil Python Common Libraries"
+HOMEPAGE = "https://github.com/abseil/abseil-py"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[sha256sum] = "d9690211c5fcfefcdd1a45470ac2b5c5acd45241c3af71eed96bc5441746c0d5"
+
+PYPI_PACKAGE = "absl-py"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.1.0.bb
deleted file mode 100644
index c06f09f..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.1.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "File support for asyncio"
-DESCRIPTION = "Asynchronous local file IO library for asyncio and Python"
-HOMEPAGE = "https://github.com/aio-libs/aiohttp"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
-
-SRC_URI[sha256sum] = "edd247df9a19e0db16534d4baaf536d6609a43e1de5401d7a4c1c148753a1635"
-
-PYPI_PACKAGE = "aiofiles"
-
-inherit pypi python_poetry_core
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-asyncio \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.2.1.bb
new file mode 100644
index 0000000..7992b00
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_23.2.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "File support for asyncio"
+DESCRIPTION = "Asynchronous local file IO library for asyncio and Python"
+HOMEPAGE = "https://github.com/aio-libs/aiohttp"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[sha256sum] = "84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"
+
+PYPI_PACKAGE = "aiofiles"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-asyncio \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.0.bb
deleted file mode 100644
index 870152c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SUMMARY = "ANTLR runtime for Python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b38bac4871765ce562806c44d2f18cf1"
-
-SRC_URI[sha256sum] = "0d5454928ae40c8a6b653caa35046cd8492c8743b5fbc22ff4009099d074c7ae"
-
-PYPI_PACKAGE = "antlr4-python3-runtime"
-
-inherit pypi python_setuptools_build_meta
-
-BBCLASSEXTEND = "nativesdk native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.1.bb
new file mode 100644
index 0000000..431d37c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-antlr4-runtime_4.13.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "ANTLR runtime for Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=4b18e4a9f93178eaa50a9a37f26da7f7"
+
+SRC_URI[sha256sum] = "3cd282f5ea7cfb841537fe01f143350fdb1c0b1ce7981443a2fa8513fddb6d1a"
+
+PYPI_PACKAGE = "antlr4-python3-runtime"
+
+inherit pypi python_setuptools_build_meta
+
+BBCLASSEXTEND = "nativesdk native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-apiflask_2.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-apiflask_2.0.2.bb
new file mode 100644
index 0000000..88afdda
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-apiflask_2.0.2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "APIFlask is a lightweight Python web API framework based on Flask and marshmallow-code projects."
+HOMEPAGE = "https://github.com/apiflask/apiflask"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5f89d1b0dec37448d4f4163dc3c40e64"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "APIFlask"
+
+SRC_URI[sha256sum] = "c1ab81640a1ab252888e2cc7ae556272a169b449c582abae309a8fe295f9337d"
+
+RDEPENDS:${PN} += "\
+    python3-flask \
+    python3-flask-marshmallow \
+    python3-webargs \
+    python3-flask-httpauth \
+    python3-apispec \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-apispec_6.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-apispec_6.3.0.bb
new file mode 100644
index 0000000..fcdcd7a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-apispec_6.3.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification)."
+HOMEPAGE = "https://github.com/marshmallow-code/apispec"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=824d596e050c0d5e3361efb438425945"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "6cb08d92ce73ff0b3bf46cb2ea5c00d57289b0f279fb0256a3df468182ba5344"
+
+RDEPENDS:${PN} += "python3-packaging"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest
index 5287f3e..b63c4de 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest
@@ -1,3 +1,3 @@
 #!/bin/sh
 
-pytest | sed -e 's/\[100%\]//g' | sed -e 's/\.\.F/: FAIL/g' | sed -e 's/\.\.\./: PASS/g'
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.1.bb
deleted file mode 100644
index 504e7e2..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Argcomplete provides easy, extensible command line tab completion of arguments for your Python script."
-HOMEPAGE = "https://github.com/kislyuk/argcomplete"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2ee41112a44fe7014dce33e26468ba93"
-
-SRC_URI[sha256sum] = "6c4c563f14f01440aaffa3eae13441c5db2357b5eec639abe7c0b15334627dff"
-
-PYPI_PACKAGE = "argcomplete"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-core \
-    ${PYTHON_PN}-io \
-"
-
-BBCLASSEXTEND = "native nativesdk"
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb
new file mode 100644
index 0000000..fb66f3d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Argcomplete provides easy, extensible command line tab completion of arguments for your Python script."
+HOMEPAGE = "https://github.com/kislyuk/argcomplete"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[sha256sum] = "d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b"
+
+PYPI_PACKAGE = "argcomplete"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.3.bb
deleted file mode 100644
index 93e0a84..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.3.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "An unobtrusive argparse wrapper with natural syntax"
-DESCRIPTION = "Building a command-line interface? Found yourself uttering \
-'argh!' while struggling with the API of argparse? Don't like the complexity \
-but need the power? \
-\
-Everything should be made as simple as possible, but no simpler. \
-\
-—Albert Einstein (probably) \
-\
-Argh is a smart wrapper for argparse. Argparse is a very powerful \
-tool; Argh just makes it easy to use."
-
-LICENSE = "LGPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=3000208d539ec061b899bce1d9ce9404 \
-                    file://README.rst;beginline=261;endline=275;md5=a8bf3475df7e0d575a53d04c83d5e090"
-
-SRC_URI[sha256sum] = "58e438ce9169aaa2e6de147e3ceb34ceacfe26556a2306f50e2d46f52779acb1"
-
-inherit pypi python_flit_core
-
-RDEPENDS:${PN} += " \
-    python3-argcomplete \
-    python3-logging \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb
new file mode 100644
index 0000000..f67ac9d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb
@@ -0,0 +1,26 @@
+SUMMARY = "An unobtrusive argparse wrapper with natural syntax"
+DESCRIPTION = "Building a command-line interface? Found yourself uttering \
+'argh!' while struggling with the API of argparse? Don't like the complexity \
+but need the power? \
+\
+Everything should be made as simple as possible, but no simpler. \
+\
+—Albert Einstein (probably) \
+\
+Argh is a smart wrapper for argparse. Argparse is a very powerful \
+tool; Argh just makes it easy to use."
+
+LICENSE = "LGPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=3000208d539ec061b899bce1d9ce9404 \
+                    file://README.rst;beginline=261;endline=275;md5=a8bf3475df7e0d575a53d04c83d5e090"
+
+SRC_URI[sha256sum] = "695c0ae4534270cae2697841b4a56f434a990694a00264ea10ebbbcdc02c13f7"
+
+inherit pypi python_flit_core
+
+RDEPENDS:${PN} += " \
+    python3-argcomplete \
+    python3-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.15.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.15.6.bb
deleted file mode 100644
index 7325eb1..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.15.6.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "An abstract syntax tree for Python with inference support."
-HOMEPAGE = "https://pypi.python.org/pypi/astroid"
-SECTION = "devel/python"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
-
-SRC_URI[sha256sum] = "903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"
-
-inherit pypi python_setuptools_build_meta
-
-DEPENDS += "\
-    ${PYTHON_PN}-pytest-runner-native \
-    ${PYTHON_PN}-wheel-native \
-"
-
-PACKAGES =+ "${PN}-tests"
-
-FILES:${PN}-tests += " \
-    ${PYTHON_SITEPACKAGES_DIR}/astroid/test* \
-    ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \
-"
-
-RDEPENDS:${PN}:class-target += "\
-    ${PYTHON_PN}-distutils \
-    ${PYTHON_PN}-lazy-object-proxy \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-wrapt \
-    ${PYTHON_PN}-setuptools \
-"
-
-RDEPENDS:${PN}-tests:class-target += "\
-    ${PYTHON_PN}-unittest \
-    ${PYTHON_PN}-xml \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb
new file mode 100644
index 0000000..2f80187
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "An abstract syntax tree for Python with inference support."
+HOMEPAGE = "https://pypi.python.org/pypi/astroid"
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
+
+SRC_URI[sha256sum] = "1defdbca052635dd29657ea674edfc45e4b5be9cd53630c5b084fcfed94344a8"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "\
+    ${PYTHON_PN}-pytest-runner-native \
+    ${PYTHON_PN}-wheel-native \
+"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES:${PN}-tests += " \
+    ${PYTHON_SITEPACKAGES_DIR}/astroid/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \
+"
+
+RDEPENDS:${PN}:class-target += "\
+    ${PYTHON_PN}-distutils \
+    ${PYTHON_PN}-lazy-object-proxy \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-wrapt \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-typing-extensions \
+"
+
+RDEPENDS:${PN}-tests:class-target += "\
+    ${PYTHON_PN}-unittest \
+    ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_4.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_4.0.0.bb
deleted file mode 100644
index ca61490..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_4.0.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "asyncio-compatible timeout context manager"
-DESCRIPTION = "\
-The context manager is useful in cases when you want to apply \
-timeout logic around block of code or in cases when asyncio.wait_for() \
-is not suitable. Also it's much faster than asyncio.wait_for() because \
-timeout doesn't create a new task."
-HOMEPAGE = "https://github.com/aio-libs/async-timeout"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4fa41f15bb5f23b6d3560c5845eb8d57"
-
-SRC_URI[sha256sum] = "7d87a4e8adba8ededb52e579ce6bc8276985888913620c935094c2276fd83382"
-
-PYPI_PACKAGE = "async-timeout"
-inherit pypi setuptools3
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-asyncio \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-autoflake_2.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-autoflake_2.2.1.bb
new file mode 100644
index 0000000..7b74308
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-autoflake_2.2.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Removes unused imports and unused variables"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=88246be6a34c1496c253f58599f3db85"
+
+SRC_URI[sha256sum] = "62b7b6449a692c3c9b0c916919bbc21648da7281e8506bcf8d3f8280e431ebc1"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} += "python3-pyflakes"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.1.bb
deleted file mode 100644
index f45bfc0..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.1.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Simple construction, analysis and modification of binary data."
-HOMEPAGE = "https://github.com/scott-griffiths/bitstring"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=661f450e2c0aef39b4b15597333444a7"
-
-SRC_URI[sha256sum] = "a9c97fdf9fe38f27ea0ac2b4cf2a3f5bce5ccc23b863082582b9f48b22274528"
-
-PYPI_PACKAGE = "bitstring"
-
-inherit pypi python_poetry_core
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-core \
-    ${PYTHON_PN}-io \
-    ${PYTHON_PN}-mmap \
-    ${PYTHON_PN}-numbers \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.2.bb
new file mode 100644
index 0000000..7a04973
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstring_4.1.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Simple construction, analysis and modification of binary data."
+HOMEPAGE = "https://github.com/scott-griffiths/bitstring"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=661f450e2c0aef39b4b15597333444a7"
+
+SRC_URI[sha256sum] = "c22283d60fd3e1a8f386ccd4f1915d7fe13481d6349db39711421e24d4a9cccf"
+
+PYPI_PACKAGE = "bitstring"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-mmap \
+    ${PYTHON_PN}-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak/0001-fix-poetry-version-compatibility.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak/0001-fix-poetry-version-compatibility.patch
deleted file mode 100644
index 051ebbe..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak/0001-fix-poetry-version-compatibility.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Upstream-Status: Pending
-
---- a/pyproject.toml	2023-04-19 19:04:47.159474100 -0300
-+++ b/pyproject.toml	2023-05-04 08:08:12.289941765 -0300
-@@ -31,15 +31,15 @@
- bleak-winrt = { version = "^1.2.0", markers = "platform_system=='Windows'" }
- dbus-fast = { version = "^1.83.0", markers = "platform_system == 'Linux'" }
- 
--[tool.poetry.group.docs.dependencies]
-+#[tool.poetry.group.docs.dependencies]
- Sphinx = { version = "^5.1.1", python = ">=3.8" }
- sphinx-rtd-theme = "^1.0.0"
- 
--[tool.poetry.group.lint.dependencies]
-+#[tool.poetry.group.lint.dependencies]
- black = "^22.1.0"
- flake8 = { version = "^5.0.0", python = ">=3.8" }
- 
--[tool.poetry.group.test.dependencies]
-+#[tool.poetry.group.test.dependencies]
- asynctest = { version = "^0.13.0",  python = "<3.8" }
- pytest = "^7.0.0"
- pytest-asyncio = "^0.19.0"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.20.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.20.2.bb
deleted file mode 100644
index 9b81efe..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.20.2.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Bleak is a GATT client software, capable of connecting to BLE devices acting as GATT servers."
-HOMEPAGE = "https://github.com/hbldh/bleak"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bcbc2069a86cba1b5e47253679f66ed7"
-
-SRC_URI:append = " \
-    file://0001-fix-poetry-version-compatibility.patch \
-"
-
-SRC_URI[sha256sum] = "6c92a47abe34e6dea8ffc5cea9457cbff6e1be966854839dbc25cddb36b79ee4"
-
-PYPI_PACKAGE = "bleak"
-
-inherit pypi python_poetry_core
-
-RDEPENDS:${PN} += " \
-    python3-core (>=3.7) \
-    python3-async-timeout \
-    python3-dbus-fast \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.21.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.21.1.bb
new file mode 100644
index 0000000..4a1fafb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bleak_0.21.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Bleak is a GATT client software, capable of connecting to BLE devices acting as GATT servers."
+HOMEPAGE = "https://github.com/hbldh/bleak"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bcbc2069a86cba1b5e47253679f66ed7"
+
+SRC_URI[sha256sum] = "ec4a1a2772fb315b992cbaa1153070c7e26968a52b0e2727035f443a1af5c18f"
+
+PYPI_PACKAGE = "bleak"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += " \
+    python3-core (>3.7) \
+    python3-async-timeout \
+    python3-dbus-fast \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-boto3_1.28.57.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-boto3_1.28.57.bb
new file mode 100644
index 0000000..ad40fd0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-boto3_1.28.57.bb
@@ -0,0 +1,16 @@
+HOMEPAGE = "https://github.com/boto/boto"
+SUMMARY = "Amazon Web Services API"
+DESCRIPTION = "\
+  Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, \
+  which allows Python developers to write software that makes use of services like \
+  Amazon S3 and Amazon EC2. \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[sha256sum] = "e2d2824ba6459b330d097e94039a9c4f96ae3f4bcdc731d620589ad79dcd16d3"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-botocore python3-urllib3 python3-unixadmin"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-botocore_1.31.57.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-botocore_1.31.57.bb
new file mode 100644
index 0000000..d0c3ff2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-botocore_1.31.57.bb
@@ -0,0 +1,10 @@
+SUMMARY = "A low-level interface to a growing number of Amazon Web Services."
+HOMEPAGE = "https://github.com/boto/botocore"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[sha256sum] = "301436174635bec739b225b840fc365ca00e5c1a63e5b2a19ee679d204e01b78"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-jmespath python3-dateutil python3-logging"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.0.9.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.0.9.bb
deleted file mode 100644
index 5dfac58..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.0.9.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Brotli compression format"
-HOMEPAGE = "https://pypi.org/project/Brotli/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=941ee9cd1609382f946352712a319b4b"
-
-PYPI_PACKAGE = "Brotli"
-PYPI_PACKAGE_EXT = "zip"
-
-SRC_URI[sha256sum] = "4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} = "\
-  ${PYTHON_PN}-cffi \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.1.0.bb
new file mode 100644
index 0000000..0f639f3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-brotli_1.1.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Brotli compression format"
+HOMEPAGE = "https://pypi.org/project/Brotli/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=941ee9cd1609382f946352712a319b4b"
+
+PYPI_PACKAGE = "Brotli"
+
+SRC_URI[sha256sum] = "81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} = "\
+  ${PYTHON_PN}-cffi \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.0.bb
deleted file mode 100644
index e4e3c49..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.0.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "httplib2 caching for requests"
-HOMEPAGE = "https://pypi.org/project/CacheControl/"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=12;endline=12;md5=e2fd6ddcf506e08972d5ba4b93c0022e"
-
-# On PyPi, this is "CacheControl", rather than "cachecontrol", so we need to
-# override PYPI_PACKAGE so fetch succeeds.
-PYPI_PACKAGE = "CacheControl"
-
-SRC_URI[sha256sum] = "fd3fd2cb0ca66b9a6c1d56cc9709e7e49c63dbd19b1b1bcbd8d3f94cedfe8ce5"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "\
-    python3-crypt \
-    python3-datetime \
-    python3-email \
-    python3-lockfile \
-    python3-json \
-    python3-logging \
-    python3-msgpack \
-    python3-netclient \
-    python3-pickle \
-    python3-requests \
-    python3-urllib3 \
-    python3-mmap \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.1.bb
new file mode 100644
index 0000000..b4c90bc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.13.1.bb
@@ -0,0 +1,28 @@
+SUMMARY = "httplib2 caching for requests"
+HOMEPAGE = "https://pypi.org/project/CacheControl/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=12;endline=12;md5=e2fd6ddcf506e08972d5ba4b93c0022e"
+
+SRC_URI[sha256sum] = "f012366b79d2243a6118309ce73151bf52a38d4a5dac8ea57f09bd29087e506b"
+
+inherit pypi python_poetry_core
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/CacheControl/"
+UPSTREAM_CHECK_REGEX = "/CacheControl/(?P<pver>(\d+[\.\-_]*)+)"
+
+RDEPENDS:${PN} += "\
+    python3-crypt \
+    python3-datetime \
+    python3-email \
+    python3-lockfile \
+    python3-json \
+    python3-logging \
+    python3-msgpack \
+    python3-netclient \
+    python3-pickle \
+    python3-requests \
+    python3-urllib3 \
+    python3-mmap \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_38.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_38.0.2.bb
deleted file mode 100644
index 0035735..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_38.0.2.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "CAN BUS tools in Python 3."
-HOMEPAGE = "https://github.com/eerimoq/cantools"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd"
-
-SRC_URI[sha256sum] = "93bfe6f4bd652f369763ea9162b027a62f424a8400f2423d41137918ce68c68e"
-
-PYPI_PACKAGE = "cantools"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "\
-	${PYTHON_PN}-can \
-	${PYTHON_PN}-bitstruct \
-	${PYTHON_PN}-core \
-	${PYTHON_PN}-textparser \
-	${PYTHON_PN}-typing-extensions \
-	${PYTHON_PN}-diskcache \
-        ${PYTHON_PN}-asyncio \
-"
-
-CLEANBROKEN = "1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb
new file mode 100644
index 0000000..a87aff1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "CAN BUS tools in Python 3."
+HOMEPAGE = "https://github.com/eerimoq/cantools"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd"
+
+SRC_URI[sha256sum] = "24045c5575217bb5331543e6a55cee822c37ad811dc4a08c75aa2eee3c6d529c"
+
+PYPI_PACKAGE = "cantools"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-can \
+    ${PYTHON_PN}-bitstruct \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-textparser \
+    ${PYTHON_PN}-typing-extensions \
+    ${PYTHON_PN}-diskcache \
+    ${PYTHON_PN}-asyncio \
+"
+
+CLEANBROKEN = "1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb
deleted file mode 100644
index f9f8853..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Lightweight, extensible schema and data validation tool for Python dictionaries."
-HOMEPAGE = "http://docs.python-cerberus.org/"
-SECTION = "devel/python"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=48f8e9432d0dac5e0e7a18211a0bacdb"
-
-RDEPENDS:${PN} += "python3-setuptools"
-
-# The PyPI package uses a capital letter so we have to specify this explicitly
-PYPI_PACKAGE = "Cerberus"
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.5.bb
new file mode 100644
index 0000000..eb3453a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cerberus_1.3.5.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Lightweight, extensible schema and data validation tool for Python dictionaries."
+HOMEPAGE = "http://docs.python-cerberus.org/"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=48f8e9432d0dac5e0e7a18211a0bacdb"
+
+# The PyPI package uses a capital letter so we have to specify this explicitly
+PYPI_PACKAGE = "Cerberus"
+inherit pypi python_poetry_core
+
+SRC_URI[sha256sum] = "81011e10266ef71b6ec6d50e60171258a5b134d69f8fb387d16e4936d0d47642"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.4.1.bb
deleted file mode 100644
index 6d3e81f..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.4.1.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "CMake is an open-source, cross-platform family of tools designed to build, test and package software"
-LICENSE = "BSD-3-Clause & Apache-2.0"
-LIC_FILES_CHKSUM = " \
-	file://LICENSE_BSD_3;md5=9134cb61aebbdd79dd826ccb9ae6afcd \
-	file://LICENSE_Apache_20;md5=19cbd64715b51267a47bf3750cc6a8a5 \
-"
-
-DEPENDS = "ninja-native cmake-native python3-scikit-build-native"
-
-PYPI_PACKAGE = "cmake"
-PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
-
-inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "70526bbff5eeb7d4d6b921af1b80d2d29828302882f94a2cba93ad7d469b90f6"
-
-SRC_URI += " \
-	file://CMakeLists.txt \
-	file://run-cmake-from-path.patch \
-"
-
-addtask do_patchbuild after do_patch before do_configure
-
-do_patchbuild () {
-	rm -f ${S}/CMakeLists.txt
-	cp ${WORKDIR}/CMakeLists.txt ${S}/
-}
-
-do_install:append () {
-	rm -rf ${D}${bindir}
-}
-
-RDEPENDS:${PN} = " \
-	cmake \
-	python3-scikit-build \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb
new file mode 100644
index 0000000..ad58c6d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb
@@ -0,0 +1,37 @@
+SUMMARY = "CMake is an open-source, cross-platform family of tools designed to build, test and package software"
+LICENSE = "BSD-3-Clause & Apache-2.0"
+LIC_FILES_CHKSUM = " \
+	file://LICENSE_BSD_3;md5=9134cb61aebbdd79dd826ccb9ae6afcd \
+	file://LICENSE_Apache_20;md5=19cbd64715b51267a47bf3750cc6a8a5 \
+"
+
+DEPENDS = "ninja-native cmake-native python3-scikit-build-native"
+
+PYPI_PACKAGE = "cmake"
+PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
+
+inherit pypi python_setuptools_build_meta
+SRC_URI[sha256sum] = "101d4e56154658c974e9425acd31f0fedde3ce68b47263fd14f789b028f8a13a"
+
+SRC_URI += " \
+	file://CMakeLists.txt \
+	file://run-cmake-from-path.patch \
+"
+
+addtask do_patchbuild after do_patch before do_configure
+
+do_patchbuild () {
+	rm -f ${S}/CMakeLists.txt
+	cp ${WORKDIR}/CMakeLists.txt ${S}/
+}
+
+do_install:append () {
+	rm -rf ${D}${bindir}
+}
+
+RDEPENDS:${PN} = " \
+	cmake \
+	python3-scikit-build \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.29.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.29.bb
deleted file mode 100644
index 7a7ecd7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.29.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "A Python library for building configuration shells"
-DESCRIPTION = "configshell-fb is a Python library that provides a framework for \
-building simple but nice CLI-based applications. This runs with Python 2 and \
-2to3 is run by setup.py to run on Python 3."
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1dece7821bf3fd70fe1309eaa37d52a2"
-
-SRC_URI = "git://github.com/open-iscsi/configshell-fb.git;protocol=https;branch=master"
-SRCREV = "d74a33b69f688ed9b8b28033835303604639d4eb"
-
-S = "${WORKDIR}/git"
-
-inherit setuptools3
-PIP_INSTALL_PACKAGE = "configshell_fb"
-
-RDEPENDS:${PN} += " \
-    python3-fcntl \
-    python3-modules \
-    python3-pyparsing \
-    python3-six \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.30.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.30.bb
new file mode 100644
index 0000000..aa14c99
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.30.bb
@@ -0,0 +1,18 @@
+SUMMARY = "A Python library for building configuration shells"
+DESCRIPTION = "configshell-fb is a Python library that provides a framework for \
+building simple but nice CLI-based applications. This runs with Python 2 and \
+2to3 is run by setup.py to run on Python 3."
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+
+SRC_URI[sha256sum] = "41f6b7eaa7c9ff422acdc910762fd39ef3333a365918463fef8b398d857170fe"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += " \
+    python3-fcntl \
+    python3-modules \
+    python3-pyparsing \
+    python3-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.0.bb
deleted file mode 100644
index 0a32a6a..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Code coverage measurement for Python"
-HOMEPAGE = "https://coverage.readthedocs.io"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
-
-SRC_URI[sha256sum] = "49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-crypt \
-    python3-io \
-    python3-json \
-    python3-multiprocessing \
-    python3-pprint \
-    python3-shell \
-    python3-sqlite3 \
-    python3-tomllib \
-    python3-xml \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb
new file mode 100644
index 0000000..636b737
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Code coverage measurement for Python"
+HOMEPAGE = "https://coverage.readthedocs.io"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[sha256sum] = "6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-crypt \
+    python3-io \
+    python3-json \
+    python3-multiprocessing \
+    python3-pprint \
+    python3-shell \
+    python3-sqlite3 \
+    python3-tomllib \
+    python3-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.1.bb
deleted file mode 100644
index 8ff3b9e..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.1.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "A Python package that provides customized docstring inheritance schemes between derived classes and their parents."
-HOMEPAGE = "https://github.com/rsokl/custom_inherit"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=f910a85a4c3da51edf780f17a7608434"
-
-PYPI_PACKAGE = "custom_inherit"
-
-SRC_URI[sha256sum] = "a0d104847b4cc1ae24e00061fc2e11da8766b019bf4c8c753822347366c8c49f"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-json \
-    python3-stringold \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.4.1.bb
new file mode 100644
index 0000000..478abbf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.4.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A Python package that provides customized docstring inheritance schemes between derived classes and their parents."
+HOMEPAGE = "https://github.com/rsokl/custom_inherit"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=f910a85a4c3da51edf780f17a7608434"
+
+PYPI_PACKAGE = "custom_inherit"
+
+SRC_URI[sha256sum] = "7052eb337bcce83551815264391cc4efc2bf70b295a3c52aba64f1ab57c3a8a2"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-json \
+    python3-stringold \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.6.bb
deleted file mode 100644
index ffffece..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.6.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-# SPDX-License-Identifier: MIT
-# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
-
-SUMMARY = "A library which implements low-level functions that relate to packaging and distribution of Python software."
-HOMEPAGE = "https://github.com/pypa/distlib"
-LICENSE = "PSF-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f6a11430d5cd6e2cd3832ee94f22ddfc"
-
-SRC_URI[sha256sum] = "14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.7.bb
new file mode 100644
index 0000000..1d9d53e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-distlib_0.3.7.bb
@@ -0,0 +1,12 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "A library which implements low-level functions that relate to packaging and distribution of Python software."
+HOMEPAGE = "https://github.com/pypa/distlib"
+LICENSE = "PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f6a11430d5cd6e2cd3832ee94f22ddfc"
+
+SRC_URI[sha256sum] = "9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dynamic-dispatch_1.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dynamic-dispatch_1.0.3.bb
index 9e4a13c..eeb013d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dynamic-dispatch_1.0.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dynamic-dispatch_1.0.3.bb
@@ -5,11 +5,13 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "6bd3cc24427de753eed0656e89d5302c"
 SRC_URI[sha256sum] = "fbc676aaedc8ec542056c21e5e206b8b62b8d11c3f3c5cfb32b273936da89604"
 
 PYPI_PACKAGE = "dynamic_dispatch"
 
+UPSTREAM_CHECK_URI = "https://pypi.org/project/dynamic-dispatch/"
+UPSTREAM_CHECK_REGEX = "/dynamic-dispatch/(?P<pver>(\d+[\.\-_]*)+)"
+
 DEPENDS += "python3-setuptools-scm-native"
 RDEPENDS:${PN} += "\
   python3-typeguard \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.0.bb
deleted file mode 100644
index 85f5371..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Engine.IO server"
-HOMEPAGE = "https://github.com/miguelgrinberg/python-engineio/"
-SECTION = "devel/python"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
-
-inherit pypi python_setuptools_build_meta
-
-PYPI_PACKAGE = "python-engineio"
-
-RDEPENDS:${PN} += " \
-	python3-netclient \
-	python3-json \
-	python3-logging \
-	python3-compression \
-	python3-asyncio \
-"
-
-SRC_URI[sha256sum] = "8b4f30ba58a5bff001801127227f44a1da0c0a22045f798c1a13ebb0d618e2a3"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb
new file mode 100644
index 0000000..0ef6426
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Engine.IO server"
+HOMEPAGE = "https://github.com/miguelgrinberg/python-engineio/"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "python-engineio"
+
+RDEPENDS:${PN} += " \
+	python3-netclient \
+	python3-json \
+	python3-logging \
+	python3-compression \
+	python3-asyncio \
+"
+
+SRC_URI[sha256sum] = "a8422e345cd9a21451303380b160742ff02197975b1c3a02cef115febe2b1b20"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.0.bb
deleted file mode 100644
index ce2dcb0..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "Common utility functions for codebases which interact with ethereum."
-HOMEPAGE = "https://github.com/ethereum/eth-utils"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6749008d847c14b9718949c2e24d5c0a"
-
-SRC_URI[sha256sum] = "7f1a9e10400ee332432a778c321f446abaedb8f538df550e7c9964f446f7e265"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-eth-hash \
-    python3-eth-typing \
-    python3-setuptools \
-    python3-toolz \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb
new file mode 100644
index 0000000..bace620
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Common utility functions for codebases which interact with ethereum."
+HOMEPAGE = "https://github.com/ethereum/eth-utils"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6749008d847c14b9718949c2e24d5c0a"
+
+SRC_URI[sha256sum] = "f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-eth-hash \
+    python3-eth-typing \
+    python3-setuptools \
+    python3-toolz \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.18.bb
deleted file mode 100644
index 5f63891..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.18.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "A python package that provides useful locks."
-HOMEPAGE = "https://github.com/harlowja/fasteners"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4476c4be31402271e101d9a4a3430d52"
-
-SRC_URI[sha256sum] = "cb7c13ef91e0c7e4fe4af38ecaf6b904ec3f5ce0dda06d34924b6b74b869d953"
-
-inherit pypi python_setuptools_build_meta
-
-RDEPENDS:${PN} += "\
-	${PYTHON_PN}-logging \
-	${PYTHON_PN}-fcntl \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.19.bb
new file mode 100644
index 0000000..a4fece0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.19.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A python package that provides useful locks."
+HOMEPAGE = "https://github.com/harlowja/fasteners"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4476c4be31402271e101d9a4a3430d52"
+
+SRC_URI[sha256sum] = "b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += "\
+	${PYTHON_PN}-logging \
+	${PYTHON_PN}-fcntl \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.0.bb
deleted file mode 100644
index 8deca31..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-# SPDX-License-Identifier: MIT
-# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
-
-SUMMARY = "A single module, which implements a platform independent file lock in Python, which provides a simple way of inter-process communication"
-HOMEPAGE = "https://py-filelock.readthedocs.io/"
-LICENSE = "Unlicense"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f"
-
-SRC_URI[sha256sum] = "fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"
-
-UPSTREAM_CHECK_URI = "https://pypi.org/project/lockfile/"
-UPSTREAM_CHECK_REGEX = "/lockfile/(?P<pver>(\d+[\.\-_]*)+)"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi python_hatchling
-
-DEPENDS += "\
-    ${PYTHON_PN}-hatch-vcs-native \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb
new file mode 100644
index 0000000..49a9d95
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "A single module, which implements a platform independent file lock in Python, which provides a simple way of inter-process communication"
+HOMEPAGE = "https://py-filelock.readthedocs.io/"
+LICENSE = "Unlicense"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f"
+
+SRC_URI[sha256sum] = "2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi python_hatchling
+
+DEPENDS += "\
+    ${PYTHON_PN}-hatch-vcs-native \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb
deleted file mode 100644
index 657c190..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "i18n and l10n support for Flask based on babel and pytz"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
-
-SRC_URI[md5sum] = "50d5e92d96ef58787bf85b5a1b0a5567"
-SRC_URI[sha256sum] = "f9faf45cdb2e1a32ea2ec14403587d4295108f35017a7821a2b1acb8cfd9257d"
-
-PYPI_PACKAGE = "Flask-Babel"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-speaklater \
-    ${PYTHON_PN}-babel \
-    ${PYTHON_PN}-flask \
-    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb
new file mode 100644
index 0000000..610c40f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "i18n and l10n support for Flask based on babel and pytz"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
+
+SRC_URI[sha256sum] = "be015772c5d7f046f3b99c508dcf618636eb93d21b713b356db79f3e79f69f39"
+
+PYPI_PACKAGE = "flask_babel"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-speaklater \
+    ${PYTHON_PN}-babel \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-cors_4.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-cors_4.0.0.bb
new file mode 100644
index 0000000..1d0d86b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-cors_4.0.0.bb
@@ -0,0 +1,16 @@
+HOMEPAGE = "https://pypi.python.org/pypi/Flask-Cors/"
+SUMMARY = "A Flask extension adding a decorator for CORS support"
+DESCRIPTION = "\
+  A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible \
+  "
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=118fecaa576ab51c1520f95e98db61ce"
+
+PYPI_PACKAGE = "Flask-Cors"
+
+SRC_URI[sha256sum] = "f268522fcb2f73e2ecdde1ef45e2fd5c71cc48fe03cffb4b441c6d1b40684eb0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "python3-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-httpauth_4.8.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-httpauth_4.8.0.bb
new file mode 100644
index 0000000..51b907e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-httpauth_4.8.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Simple extension that provides Basic and Digest HTTP authentication for Flask routes."
+HOMEPAGE = "https://github.com/miguelgrinberg/flask-httpauth"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "Flask-HTTPAuth"
+
+SRC_URI[sha256sum] = "66568a05bc73942c65f1e2201ae746295816dc009edd84b482c44c758d75097a"
+
+RDEPENDS:${PN} += "\
+    python3-flask \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb
new file mode 100644
index 0000000..f55d771
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Extended JWT integration with Flask"
+HOMEPAGE = "https://github.com/vimalloc/flask-jwt-extended"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9166295d7c482b9440bbb2b5c0fa43ac"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "Flask-JWT-Extended"
+
+SRC_URI[sha256sum] = "ba56245ba43b71c8ae936784b867625dce8b9956faeedec2953222e57942fb0b"
+
+RDEPENDS:${PN} += "\
+    python3-werkzeug \
+    python3-flask \
+    python3-pyjwt \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-marshmallow_0.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-marshmallow_0.15.0.bb
new file mode 100644
index 0000000..25ca4d2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-marshmallow_0.15.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Flask + marshmallow for beautiful APIs"
+HOMEPAGE = "https://github.com/marshmallow-code/flask-marshmallow"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c3ff8567ef1f2a8cf223f30ac5a6f094"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "2083ae55bebb5142fff98c6bbd483a2f5dbc531a8bc1be2180ed5f75e7f3fccc"
+
+RDEPENDS:${PN} += "\
+    python3-flask \
+    python3-marshmallow \
+    python3-packaging \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.4.bb
deleted file mode 100644
index d9df2a4..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.4.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alembic"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
-
-SRC_URI[sha256sum] = "73293d40b10ac17736e715b377e7b7bde474cb8105165d77474df4c3619b10b3"
-
-PYPI_PACKAGE = "Flask-Migrate"
-
-inherit pypi python_setuptools_build_meta
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-flask-sqlalchemy \
-    ${PYTHON_PN}-alembic \
-    ${PYTHON_PN}-flask \
-    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.5.bb
new file mode 100644
index 0000000..13f4e0f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.5.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alembic"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
+
+SRC_URI[sha256sum] = "d3f437a8b5f3849d1bb1b60e1b818efc564c66e3fefe90b62e5db08db295e1b1"
+
+PYPI_PACKAGE = "Flask-Migrate"
+
+inherit pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-flask-sqlalchemy \
+    ${PYTHON_PN}-alembic \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.5.bb
deleted file mode 100644
index 34919d2..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.5.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Socket.IO integration for Flask applications"
-HOMEPAGE = "https://github.com/miguelgrinberg/Flask-SocketIO/"
-SECTION = "devel/python"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=38cc21254909604298ce763a6e4440a0"
-
-inherit pypi python_setuptools_build_meta
-
-PYPI_PACKAGE = "Flask-SocketIO"
-
-SRC_URI[sha256sum] = "5f01158d10db71aa78c969b631ce3b9148b47ab0de1995158f9577f85b004d25"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-flask \
-    ${PYTHON_PN}-socketio \
-    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb
new file mode 100644
index 0000000..e151fda
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Socket.IO integration for Flask applications"
+HOMEPAGE = "https://github.com/miguelgrinberg/Flask-SocketIO/"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=38cc21254909604298ce763a6e4440a0"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE = "Flask-SocketIO"
+
+SRC_URI[sha256sum] = "bb8f9f9123ef47632f5ce57a33514b0c0023ec3696b2384457f0fcaa5b70501c"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-flask \
+    ${PYTHON_PN}-socketio \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.2.bb
deleted file mode 100644
index c4c1ff7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.2.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions"
-DESCRIPTION = "\
-Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \
-intentions. And before you ask: It’s BSD licensed!"
-HOMEPAGE = "https://github.com/mitsuhiko/flask/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
-
-SRC_URI[sha256sum] = "8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"
-
-PYPI_PACKAGE = "Flask"
-
-inherit pypi python_setuptools_build_meta
-
-CLEANBROKEN = "1"
-
-RDEPENDS:${PN} = " \
-    ${PYTHON_PN}-blinker \
-    ${PYTHON_PN}-click \
-    ${PYTHON_PN}-itsdangerous \
-    ${PYTHON_PN}-jinja2 \
-    ${PYTHON_PN}-profile \
-    ${PYTHON_PN}-werkzeug \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.3.bb
new file mode 100644
index 0000000..c8c8d87
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_2.3.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions"
+DESCRIPTION = "\
+Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \
+intentions. And before you ask: It’s BSD licensed!"
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[sha256sum] = "09c347a92aa7ff4a8e7f3206795f30d826654baf38b873d0744cd571ca609efc"
+
+inherit pypi python_setuptools_build_meta
+
+CLEANBROKEN = "1"
+
+RDEPENDS:${PN} = " \
+    ${PYTHON_PN}-blinker \
+    ${PYTHON_PN}-click \
+    ${PYTHON_PN}-itsdangerous \
+    ${PYTHON_PN}-jinja2 \
+    ${PYTHON_PN}-profile \
+    ${PYTHON_PN}-werkzeug \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.7.0.bb
deleted file mode 100644
index a82abcc..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.7.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "A coroutine-based Python networking library"
-DESCRIPTION = "gevent is a coroutine-based Python networking library that uses greenlet to provide \
-a high-level synchronous API on top of the libevent event loop."
-HOMEPAGE = "http://www.gevent.org"
-LICENSE = "MIT & Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4de99aac27b470c29c6c309e0c279b65"
-DEPENDS += "${PYTHON_PN}-greenlet libev libuv c-ares python3-cython-native"
-
-RDEPENDS:${PN} = "${PYTHON_PN}-greenlet \
-		  ${PYTHON_PN}-mime \
-		  ${PYTHON_PN}-pprint \
-		 "
-
-SRC_URI += "file://0001-_setuputils.py-Do-not-add-sys_inc_dir.patch"
-
-SRC_URI[sha256sum] = "d0d3630674c1b344b256a298ab1ff43220f840b12af768131b5d74e485924237"
-
-inherit pypi setuptools3
-
-# Don't embed libraries, link to the system provided libs instead
-export GEVENTSETUP_EMBED_CARES = "0"
-export GEVENTSETUP_EMBED_LIBEV = "0"
-export GEVENTSETUP_EMBED_LIBUV = "0"
-
-do_configure:append() {
-	# Delete the embedded copies of libraries so we can't accidentally link to them
-	rm -rf ${S}/deps
-
-	# Delete the generated cython files, as they are all out of date with python 3.11
-	rm -rf ${S}/src/gevent/*.c
-}
-
-do_compile:append() {
-        sed -i -e 's#${WORKDIR}##g' ${S}/src/gevent/*.c ${S}/src/gevent/libev/*.c ${S}/src/gevent/resolver/*.c
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.9.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.9.1.bb
new file mode 100644
index 0000000..0caebce
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_23.9.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "A coroutine-based Python networking library"
+DESCRIPTION = "gevent is a coroutine-based Python networking library that uses greenlet to provide \
+a high-level synchronous API on top of the libevent event loop."
+HOMEPAGE = "http://www.gevent.org"
+LICENSE = "MIT & Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4de99aac27b470c29c6c309e0c279b65"
+DEPENDS += "${PYTHON_PN}-greenlet libev libuv c-ares python3-cython-native"
+
+RDEPENDS:${PN} = "${PYTHON_PN}-greenlet \
+		  ${PYTHON_PN}-mime \
+		  ${PYTHON_PN}-pprint \
+		 "
+
+SRC_URI += "file://0001-_setuputils.py-Do-not-add-sys_inc_dir.patch"
+
+SRC_URI[sha256sum] = "72c002235390d46f94938a96920d8856d4ffd9ddf62a303a0d7c118894097e34"
+
+inherit pypi setuptools3
+
+# Don't embed libraries, link to the system provided libs instead
+export GEVENTSETUP_EMBED_CARES = "0"
+export GEVENTSETUP_EMBED_LIBEV = "0"
+export GEVENTSETUP_EMBED_LIBUV = "0"
+
+do_configure:append() {
+	# Delete the embedded copies of libraries so we can't accidentally link to them
+	rm -rf ${S}/deps
+
+	# Delete the generated cython files, as they are all out of date with python 3.11
+	rm -rf ${S}/src/gevent/*.c
+}
+
+do_compile:append() {
+        sed -i -e 's#${WORKDIR}##g' ${S}/src/gevent/*.c ${S}/src/gevent/libev/*.c ${S}/src/gevent/resolver/*.c
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.11.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.11.1.bb
deleted file mode 100644
index de2bd3d..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.11.1.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Google API client core library"
-HOMEPAGE = "https://github.com/googleapis/python-api-core"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "25d29e05a0058ed5f19c61c0a78b1b53adea4d9364b464d014fbda941f6d1c9a"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-asyncio \
-    ${PYTHON_PN}-datetime \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-math \
-"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-googleapis-common-protos \
-    ${PYTHON_PN}-google-auth \
-    ${PYTHON_PN}-grpcio \
-    ${PYTHON_PN}-protobuf \
-    ${PYTHON_PN}-pytz \
-    ${PYTHON_PN}-requests \
-    ${PYTHON_PN}-six \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb
new file mode 100644
index 0000000..28c6a79
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Google API client core library"
+HOMEPAGE = "https://github.com/googleapis/python-api-core"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-googleapis-common-protos \
+    ${PYTHON_PN}-google-auth \
+    ${PYTHON_PN}-grpcio \
+    ${PYTHON_PN}-protobuf \
+    ${PYTHON_PN}-pytz \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb
new file mode 100644
index 0000000..495a374
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "The Google API Client for Python is a client library for accessing the Plus, \
+Moderator, and many other Google APIs."
+HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "e9620a809251174818e1fce16604006f10a9c2ac0d3d94a139cdddcd4dbea2d8"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-httplib2 \
+    ${PYTHON_PN}-uritemplate \
+    ${PYTHON_PN}-google-api-core \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.97.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.97.0.bb
deleted file mode 100644
index 1ee9f5b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.97.0.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "The Google API Client for Python is a client library for accessing the Plus, \
-Moderator, and many other Google APIs."
-HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-SRC_URI[sha256sum] = "48277291894876a1ca7ed4127e055e81f81e6343ced1b544a7200ae2c119dcd7"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-core \
-    ${PYTHON_PN}-netclient \
-    ${PYTHON_PN}-httplib2 \
-    ${PYTHON_PN}-uritemplate \
-    ${PYTHON_PN}-google-api-core \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.22.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.22.0.bb
deleted file mode 100644
index 23def6c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.22.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Google Authentication Library"
-HOMEPAGE = "https://github.com/googleapis/google-auth-library-python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-asyncio \
-    ${PYTHON_PN}-datetime \
-    ${PYTHON_PN}-io \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-netclient \
-    ${PYTHON_PN}-numbers \
-"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-aiohttp \
-    ${PYTHON_PN}-cachetools \
-    ${PYTHON_PN}-pyasn1-modules \
-    ${PYTHON_PN}-rsa \
-    ${PYTHON_PN}-six \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb
new file mode 100644
index 0000000..a3228be
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Google Authentication Library"
+HOMEPAGE = "https://github.com/googleapis/google-auth-library-python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "d38bdf4fa1e7c5a35e574861bce55784fd08afadb4e48f99f284f1e487ce702d"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-aiohttp \
+    ${PYTHON_PN}-cachetools \
+    ${PYTHON_PN}-pyasn1-modules \
+    ${PYTHON_PN}-rsa \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb
index 3643fcf..503b79d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb
@@ -1,2 +1,17 @@
-inherit setuptools3
-require python-idna-ssl.inc
+SUMMARY = "Patch ssl.match_hostname for Unicode(idna) domains support"
+HOMEPAGE = "https://github.com/aio-libs/idna-ssl"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a61b9c5aec8796b64a6bf15d42605073"
+
+SRC_URI[sha256sum] = "a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"
+
+PYPI_PACKAGE = "idna-ssl"
+inherit pypi setuptools3
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/idna_ssl/"
+UPSTREAM_CHECK_REGEX = "/idna_ssl/(?P<pver>(\d+[\.\-_]*)+)"
+
+RDEPENDS:${PN} += " \
+    python3-idna \
+    python3-io \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.1.bb
deleted file mode 100644
index c65083b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.1.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "ISO 8601 date/time parser"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
-
-SRC_URI[sha256sum] = "48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-numbers \
-    python3-six \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.63.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.63.bb
deleted file mode 100644
index ca68a6c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.63.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "langtable is used to guess reasonable defaults for locale,\
-keyboard, territory"
-HOMEPAGE = "https://github.com/mike-fabian/langtable/"
-LICENSE = "GPL-3.0-or-later"
-SECTION = "devel/python"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-SRC_URI[sha256sum] = "ff2b5a1db27900cb83e06bcbd14cb0bbd5caaf304c913308246608d8e93d684f"
-
-inherit pypi setuptools3 python3native
-
-DISTUTILS_INSTALL_ARGS += " \
-    --install-data=${datadir}/langtable"
-
-FILES:${PN} += "${datadir}/*"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-compression \
-    ${PYTHON_PN}-doctest \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-xml \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.64.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.64.bb
new file mode 100644
index 0000000..8fb8c6e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.64.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "langtable is used to guess reasonable defaults for locale,\
+keyboard, territory"
+HOMEPAGE = "https://github.com/mike-fabian/langtable/"
+LICENSE = "GPL-3.0-or-later"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI[sha256sum] = "1297b7f6e33160887fe08a88176aa0ea873b810a55f2a2740257b124184b067a"
+
+inherit pypi setuptools3 python3native
+
+DISTUTILS_INSTALL_ARGS += " \
+    --install-data=${datadir}/langtable"
+
+FILES:${PN} += "${datadir}/*"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-doctest \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.5.bb
deleted file mode 100644
index cdff28c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.5.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-SUMMARY = "Lazy attributes are computed attributes that are evaluated only once, the first time they are used."
-
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=84689cccb68e3c397d0856e8ad5a73b2"
-
-SRC_URI[sha256sum] = "cb3d8612aa895a48afe8f08860573ba8ef5ee4fdbe1b3cd606c5f50a16152186"
-
-inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.6.bb
new file mode 100644
index 0000000..97517f8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy_1.6.bb
@@ -0,0 +1,8 @@
+SUMMARY = "Lazy attributes are computed attributes that are evaluated only once, the first time they are used."
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7df3865e8640604acfa474235d2db76b"
+
+SRC_URI[sha256sum] = "7127324ec709e8324f08cb4611c1abe01776bda53bb9ce68dc5dfa46ca0ed3e9"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.5.bb
deleted file mode 100644
index 3965dad..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.5.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "MessagePack (de)serializer"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
-
-PYPI_PACKAGE = "msgpack"
-inherit pypi setuptools3 ptest
-
-SRC_URI[sha256sum] = "c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"
-
-RDEPENDS:${PN}:class-target += "\
-    ${PYTHON_PN}-io \
-"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI += " \
-	file://run-ptest \
-"
-
-RDEPENDS:${PN}-ptest += " \
-	${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
-	install -d ${D}${PTEST_PATH}/test
-	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb
new file mode 100644
index 0000000..3cddcb9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb
@@ -0,0 +1,26 @@
+SUMMARY = "MessagePack (de)serializer"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[sha256sum] = "25d3746da40f3c8c59c3b1d001e49fd2aa17904438f980d9a391370366df001e"
+
+RDEPENDS:${PN}:class-target += "\
+    ${PYTHON_PN}-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb
new file mode 100644
index 0000000..7d52927
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python binding to the Networking and Cryptography (NaCl) library"
+HOMEPAGE = "https://github.com/pyca/pynacl"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8cc789b082b3d97e1ccc5261f8594d3f"
+
+PYPI_PACKAGE = "PyNaCl"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"
+
+DEPENDS += "\
+    libsodium \
+    python3-cffi-native \
+    python3-pip-native \
+"
+
+RDEPENDS:${PN}:class-target += " \
+    python3-cffi \
+    python3-pycparser \
+"
+
+export SODIUM_INSTALL = "system"
+
+BBCLASSEXTEND = "native"
\ No newline at end of file
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.8.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.8.0.bb
deleted file mode 100644
index 5ba0066..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.8.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "A network address manipulation library for Python."
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e6345d695ffe3776f68a56fe7962db44"
-
-SRC_URI[md5sum] = "34cad578473b66ad77bc3b2a7613ed4a"
-SRC_URI[sha256sum] = "d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-io \
-    python3-pprint \
-    python3-xml \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.9.0.bb
new file mode 100644
index 0000000..471d939
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.9.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A network address manipulation library for Python."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6345d695ffe3776f68a56fe7962db44"
+
+SRC_URI[sha256sum] = "7b46fa9b1a2d71fd5de9e4a3784ef339700a53a08c8040f08baf5f1194da0128"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-io \
+    python3-pprint \
+    python3-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
index 9a6326f..ec77473 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
@@ -8,3 +8,5 @@
 inherit pypi setuptools3
 
 PYPI_PACKAGE = "ninja_syntax"
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/ninja_syntax/"
+UPSTREAM_CHECK_REGEX = "/ninja_syntax/(?P<pver>(\d+[\.\-_]*)+)"
\ No newline at end of file
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.5.2.bb
deleted file mode 100644
index 7eebbfb..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.5.2.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Simplifies building parse types based on the parse module"
-HOMEPAGE = "https://github.com/jenisys/parse_type"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=16374dbaeaca1890153edb3f41371222"
-
-SRC_URI[md5sum] = "b954062f14ab723a91fe1e2be15e859d"
-SRC_URI[sha256sum] = "7f690b18d35048c15438d6d0571f9045cffbec5907e0b1ccf006f889e3a38c0b"
-
-PYPI_PACKAGE = "parse_type"
-inherit pypi ptest setuptools3
-
-RDEPENDS:${PN} += "${PYTHON_PN}-parse ${PYTHON_PN}-six"
-
-SRC_URI += " \
-	file://run-ptest \
-"
-
-RDEPENDS:${PN}-ptest += " \
-	${PYTHON_PN}-pytest \
-"
-
-do_configure:prepend() {
-	sed -i -e "/python_version >= 3.0/d" ${S}/setup.py
-	sed -i -e "/use_2to3/d" ${S}/setup.py
-}
-
-do_install_ptest() {
-	install -d ${D}${PTEST_PATH}/tests
-	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.6.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.6.2.bb
new file mode 100644
index 0000000..99493db
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.6.2.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Simplifies building parse types based on the parse module"
+HOMEPAGE = "https://github.com/jenisys/parse_type"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2e469278ace89c246d52505acc39c3da"
+
+SRC_URI[sha256sum] = "79b1f2497060d0928bc46016793f1fca1057c4aacdf15ef876aa48d75a73a355"
+
+PYPI_PACKAGE = "parse_type"
+inherit pypi ptest setuptools3
+
+RDEPENDS:${PN} += "${PYTHON_PN}-parse"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.0.bb
deleted file mode 100644
index 8683ef2..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.0.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-SUMMARY = "Python Imaging Library (Fork). Pillow is the friendly PIL fork by Alex \
-Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and \
-Contributors."
-HOMEPAGE = "https://pillow.readthedocs.io"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b22dc6b663b9175820e5e03337c7596b"
-
-SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=main;protocol=https \
-           file://0001-support-cross-compiling.patch \
-           file://0001-explicitly-set-compile-options.patch \
-           file://run-ptest \
-           "
-SRCREV ?= "82541b6dec8452cb612067fcebba1c5a1a2bfdc8"
-
-inherit setuptools3 ptest
-
-PIP_INSTALL_PACKAGE = "Pillow"
-PIP_INSTALL_DIST_PATH = "${S}/dist"
-
-DEPENDS += " \
-    zlib \
-    jpeg \
-    tiff \
-    freetype \
-    lcms \
-    openjpeg \
-"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-misc \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-numbers \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxcb', '', d)} \
-"
-
-RDEPENDS:${PN}-ptest += " \
-    bash \
-    ghostscript \
-    jpeg-tools \
-    libwebp \
-    ${PYTHON_PN}-core \
-    ${PYTHON_PN}-distutils \
-    ${PYTHON_PN}-image \
-    ${PYTHON_PN}-mmap \
-    ${PYTHON_PN}-pytest \
-    ${PYTHON_PN}-pytest-timeout \
-    ${PYTHON_PN}-resource \
-    ${PYTHON_PN}-unixadmin\
-    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'tk', '', d)} \
-"
-
-CVE_PRODUCT = "pillow"
-
-S = "${WORKDIR}/git"
-
-RPROVIDES:${PN} += "python3-imaging"
-
-do_install_ptest() {
-        install -d ${D}${PTEST_PATH}/Tests
-        cp -rf ${S}/Tests ${D}${PTEST_PATH}/
-}
-
-BBCLASSEXTEND = "native"
-
-SRCREV = "6e28ed1f36d0eb74053af54e1eddc9c29db698cd"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb
new file mode 100644
index 0000000..055b41b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Python Imaging Library (Fork). Pillow is the friendly PIL fork by Alex \
+Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and \
+Contributors."
+HOMEPAGE = "https://pillow.readthedocs.io"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b22dc6b663b9175820e5e03337c7596b"
+
+SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=10.0.x;protocol=https \
+           file://0001-support-cross-compiling.patch \
+           file://0001-explicitly-set-compile-options.patch \
+           file://run-ptest \
+           "
+SRCREV ?= "82541b6dec8452cb612067fcebba1c5a1a2bfdc8"
+
+inherit setuptools3 ptest
+
+PIP_INSTALL_PACKAGE = "Pillow"
+PIP_INSTALL_DIST_PATH = "${S}/dist"
+
+DEPENDS += " \
+    zlib \
+    jpeg \
+    tiff \
+    freetype \
+    lcms \
+    openjpeg \
+"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-numbers \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxcb', '', d)} \
+"
+
+RDEPENDS:${PN}-ptest += " \
+    bash \
+    ghostscript \
+    jpeg-tools \
+    libwebp \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-distutils \
+    ${PYTHON_PN}-image \
+    ${PYTHON_PN}-mmap \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-pytest-timeout \
+    ${PYTHON_PN}-resource \
+    ${PYTHON_PN}-unixadmin\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'tk', '', d)} \
+"
+
+CVE_PRODUCT = "pillow"
+
+S = "${WORKDIR}/git"
+
+RPROVIDES:${PN} += "python3-imaging"
+
+do_install_ptest() {
+        install -d ${D}${PTEST_PATH}/Tests
+        cp -rf ${S}/Tests ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native"
+
+SRCREV = "e34d346f10c0b1c814661e662a3e0c1ef084cf1c"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.0.5.bb
deleted file mode 100644
index d66ef0e..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.0.5.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "POSIX IPC primitives (semaphores, shared memory and message queues) for Python"
-HOMEPAGE = "http://semanchuk.com/philip/posix_ipc/"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=dc089fb2f37e90799a54c19a20c9880f"
-
-PYPI_PACKAGE = "posix_ipc"
-
-# Archived version so we need to overwrite what the pypi class will derive
-PYPI_SRC_URI = "https://pypi.python.org/packages/source/p/${PYPI_PACKAGE}/${PYPI_PACKAGE}-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "8c9443859492ecf3aae9182aa6b5c78c"
-SRC_URI[sha256sum] = "6cddb1ce2cf4aae383f2a0079c26c69bee257fe2720f372201ef047f8ceb8b97"
-
-inherit setuptools3 pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.1.1.bb
new file mode 100644
index 0000000..a711873
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-posix-ipc_1.1.1.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "POSIX IPC primitives (semaphores, shared memory and message queues) for Python"
+HOMEPAGE = "http://semanchuk.com/philip/posix_ipc/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=513d94a7390d4d72f3475e2d45c739b5"
+
+PYPI_PACKAGE = "posix_ipc"
+
+SRC_URI[sha256sum] = "e2456ba0cfb2ee5ba14121450e8d825b3c4a1461fca0761220aab66d4111cbb7"
+
+inherit setuptools3 pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.6.0.bb
deleted file mode 100644
index 0c0692b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.6.0.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Python library for displaying tabular data in a ASCII table format"
-HOMEPAGE = "http://code.google.com/p/prettytable"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c9a6829fcd174d9535b46211917c7671"
-
-SRC_URI[sha256sum] = "2e0026af955b4ea67b22122f310b90eae890738c08cb0458693a49b6221530ac"
-
-do_install:append() {
-    perm_files=`find "${D}${PYTHON_SITEPACKAGES_DIR}/" -name "*.txt" -o -name "PKG-INFO"`
-    for f in $perm_files; do
-        chmod 644 "${f}"
-    done
-}
-
-UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/PrettyTable/"
-UPSTREAM_CHECK_REGEX = "/PrettyTable/(?P<pver>(\d+[\.\-_]*)+)"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi ptest python_hatchling
-
-SRC_URI += " \
-	file://run-ptest \
-"
-
-DEPENDS += "\
-    ${PYTHON_PN}-hatch-vcs-native \
-"
-
-RDEPENDS:${PN} += " \
-	${PYTHON_PN}-math \
-	${PYTHON_PN}-html \
-	${PYTHON_PN}-wcwidth \
-	${PYTHON_PN}-json \
-	${PYTHON_PN}-compression \
-	${PYTHON_PN}-importlib-metadata \
-"
-
-RDEPENDS:${PN}-ptest += " \
-    ${PYTHON_PN}-pytest \
-    ${PYTHON_PN}-pytest-lazy-fixture \
-    ${PYTHON_PN}-sqlite3 \
-"
-
-do_install_ptest() {
-	cp -f ${S}/tests/test_prettytable.py ${D}${PTEST_PATH}/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.9.0.bb
new file mode 100644
index 0000000..c1e394d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_3.9.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Python library for displaying tabular data in a ASCII table format"
+HOMEPAGE = "http://code.google.com/p/prettytable"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c9a6829fcd174d9535b46211917c7671"
+
+SRC_URI[sha256sum] = "f4ed94803c23073a90620b201965e5dc0bccf1760b7a7eaf3158cab8aaffdf34"
+
+do_install:append() {
+    perm_files=`find "${D}${PYTHON_SITEPACKAGES_DIR}/" -name "*.txt" -o -name "PKG-INFO"`
+    for f in $perm_files; do
+        chmod 644 "${f}"
+    done
+}
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi ptest python_hatchling
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+DEPENDS += "\
+    ${PYTHON_PN}-hatch-vcs-native \
+"
+
+RDEPENDS:${PN} += " \
+	${PYTHON_PN}-math \
+	${PYTHON_PN}-html \
+	${PYTHON_PN}-wcwidth \
+	${PYTHON_PN}-json \
+	${PYTHON_PN}-compression \
+	${PYTHON_PN}-importlib-metadata \
+"
+
+RDEPENDS:${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-pytest-lazy-fixture \
+    ${PYTHON_PN}-sqlite3 \
+"
+
+do_install_ptest() {
+	cp -f ${S}/tests/test_prettytable.py ${D}${PTEST_PATH}/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.2.bb
deleted file mode 100644
index 3014884..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.2.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "Protocol Buffers"
-HOMEPAGE = "https://developers.google.com/protocol-buffers/"
-SECTION = "devel/python"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=53dbfa56f61b90215a9f8f0d527c043d"
-
-inherit pypi setuptools3
-SRC_URI += "file://0001-message.c-Cast-uintptr_t-types-to-upb_MessageDef.patch"
-SRC_URI[sha256sum] = "7fda70797ddec31ddfa3576cbdcc3ddbb6b3078b737a1a87ab9136af0570cd6e"
-
-# http://errors.yoctoproject.org/Errors/Details/184715/
-# Can't find required file: ../src/google/protobuf/descriptor.proto
-CLEANBROKEN = "1"
-
-UPSTREAM_CHECK_REGEX = "protobuf/(?P<pver>\d+(\.\d+)+)/"
-
-DEPENDS += "protobuf"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-datetime \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-netclient \
-    ${PYTHON_PN}-numbers \
-    ${PYTHON_PN}-pkgutil \
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-unittest \
-"
-
-# For usage in other recipies when compiling protobuf files (e.g. by grpcio-tools)
-BBCLASSEXTEND = "native nativesdk"
-
-DISTUTILS_BUILD_ARGS += "--cpp_implementation"
-DISTUTILS_INSTALL_ARGS += "--cpp_implementation"
-
-do_compile:prepend:class-native () {
-    export KOKORO_BUILD_NUMBER="1"
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb
new file mode 100644
index 0000000..b78ae6a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Protocol Buffers"
+HOMEPAGE = "https://developers.google.com/protocol-buffers/"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=53dbfa56f61b90215a9f8f0d527c043d"
+
+inherit pypi setuptools3
+SRC_URI += "file://0001-message.c-Cast-uintptr_t-types-to-upb_MessageDef.patch"
+SRC_URI[sha256sum] = "12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"
+
+# http://errors.yoctoproject.org/Errors/Details/184715/
+# Can't find required file: ../src/google/protobuf/descriptor.proto
+CLEANBROKEN = "1"
+
+UPSTREAM_CHECK_REGEX = "protobuf/(?P<pver>\d+(\.\d+)+)/"
+
+DEPENDS += "protobuf"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-unittest \
+"
+
+# For usage in other recipies when compiling protobuf files (e.g. by grpcio-tools)
+BBCLASSEXTEND = "native nativesdk"
+
+DISTUTILS_BUILD_ARGS += "--cpp_implementation"
+DISTUTILS_INSTALL_ARGS += "--cpp_implementation"
+
+do_compile:prepend:class-native () {
+    export KOKORO_BUILD_NUMBER="1"
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb
deleted file mode 100644
index d6a2749..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.8.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "A collection of ASN.1-based protocols modules."
-DESCRIPTION = "A collection of ASN.1 modules expressed in form of pyasn1\
- classes. Includes protocols PDUs definition (SNMP, LDAP etc.) and various\
- data structures (X.509, PKCS etc.)."
-HOMEPAGE = "https://github.com/etingof/pyasn1-modules"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a14482d15c2249de3b6f0e8a47e021fd"
-
-SRC_URI[md5sum] = "107e1ece7d0a41d782f69f8a95a4d9bc"
-SRC_URI[sha256sum] = "905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"
-
-inherit pypi ptest setuptools3
-
-RDEPENDS:${PN} = "${PYTHON_PN}-pyasn1"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI += " \
-	file://run-ptest \
-"
-
-RDEPENDS:${PN}-ptest += " \
-	${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
-	install -d ${D}${PTEST_PATH}/tests
-	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.3.0.bb
new file mode 100644
index 0000000..d158876
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.3.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "A collection of ASN.1-based protocols modules."
+DESCRIPTION = "A collection of ASN.1 modules expressed in form of pyasn1\
+ classes. Includes protocols PDUs definition (SNMP, LDAP etc.) and various\
+ data structures (X.509, PKCS etc.)."
+HOMEPAGE = "https://github.com/etingof/pyasn1-modules"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=190f79253908c986e6cacf380c3a5f6d"
+
+SRC_URI[sha256sum] = "5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"
+
+PYPI_PACKAGE = "pyasn1_modules"
+
+inherit pypi ptest setuptools3
+
+RDEPENDS:${PN} = "${PYTHON_PN}-pyasn1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez/0001-Use-Py_ssize_t-when-parsing-buffer-length-fix-426-42.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez/0001-Use-Py_ssize_t-when-parsing-buffer-length-fix-426-42.patch
index 9126aba..fea87a2 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez/0001-Use-Py_ssize_t-when-parsing-buffer-length-fix-426-42.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez/0001-Use-Py_ssize_t-when-parsing-buffer-length-fix-426-42.patch
@@ -19,9 +19,10 @@
 > values for detail. (Contributed by Inada Naoki in bpo-36381.)
 
 Fixes https://github.com/pybluez/pybluez/issues/426
----
-Upstream-Status: Accepted
 
+Upstream-Status: Backport [https://github.com/pybluez/pybluez/pull/427]
+Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
+---
  bluez/btmodule.c | 23 ++++++++++++++---------
  msbt/_msbt.c     |  6 ++++--
  2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_1.10.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_1.10.7.bb
deleted file mode 100644
index 9d59cf8..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_1.10.7.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Data validation and settings management using Python type hinting"
-HOMEPAGE = "https://github.com/samuelcolvin/pydantic"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2c02ea30650b91528657db64baea1757"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"
-
-RDEPENDS:${PN} += "\
-    python3-core \
-    python3-datetime \
-    python3-image \
-    python3-io \
-    python3-json \
-    python3-logging \
-    python3-netclient \
-    python3-numbers \
-    python3-profile \
-    python3-typing-extensions \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb
new file mode 100644
index 0000000..6d06650
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Data validation and settings management using Python type hinting"
+HOMEPAGE = "https://github.com/samuelcolvin/pydantic"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=09280955509d1c4ca14bae02f21d49a6"
+
+inherit pypi python_hatchling
+
+SRC_URI[sha256sum] = "b172505886028e4356868d617d2d1a776d7af1625d1313450fd51bdd19d9d61f"
+
+DEPENDS += "python3-hatch-fancy-pypi-readme-native"
+
+RDEPENDS:${PN} += "\
+    python3-core \
+    python3-datetime \
+    python3-image \
+    python3-io \
+    python3-json \
+    python3-logging \
+    python3-netclient \
+    python3-numbers \
+    python3-profile \
+    python3-typing-extensions \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify/0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify/0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch
index 933e086..2fa3cb0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify/0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify/0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch
@@ -13,11 +13,11 @@
  1 file changed, 3 insertions(+)
 
 diff --git a/src/ext.c b/src/ext.c
-index 2ba9a14..98ffc20 100644
+index e0bbe21..7d979d3 100644
 --- a/src/ext.c
 +++ b/src/ext.c
-@@ -18,6 +18,9 @@
- #include <sys/un.h>
+@@ -19,6 +19,9 @@
+ #include <sys/vfs.h>
  #include <unistd.h>
  
 +#ifndef FNM_EXTMATCH
@@ -27,5 +27,5 @@
  PyDoc_STRVAR(ext__doc__,
  "Wrapper for fanotify.\n"
 -- 
-2.32.0
+2.34.1
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.0.bb
deleted file mode 100644
index 7c16750..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Python wrapper for Linux fanotify."
-HOMEPAGE = "https://github.com/baskiton/pyfanotify"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=636a36c9df04efcfacf839b8866d9a37"
-
-SRC_URI += "file://0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch"
-SRC_URI[sha256sum] = "1ec1c61fba9dea96cf8eac7f1a0cca2517613da20d156b7da2a06f9d63c77aca"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-crypt \
-    python3-datetime \
-    python3-logging \
-    python3-multiprocessing \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.1.bb
new file mode 100644
index 0000000..c9fd071
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfanotify_0.2.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Python wrapper for Linux fanotify."
+HOMEPAGE = "https://github.com/baskiton/pyfanotify"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=636a36c9df04efcfacf839b8866d9a37"
+
+SRC_URI += "file://0001-ext-define-FNM_EXTMATCH-if-not-already-defined.patch"
+SRC_URI[sha256sum] = "fd62dccdf3c17ca117e3279f0cbc65c639e53c9dec8a459d44ed6a35c1a18e60"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-crypt \
+    python3-datetime \
+    python3-logging \
+    python3-multiprocessing \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb
index 888278a..4ee8453 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb
@@ -9,6 +9,9 @@
 
 DEPENDS += "${PYTHON_PN}-hatch-vcs-native"
 
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/PyHamcrest/"
+UPSTREAM_CHECK_REGEX = "/PyHamcrest/(?P<pver>(\d+[\.\-_]*)+)"
+
 RDEPENDS:${PN} += " \
     ${PYTHON_PN}-six \
     ${PYTHON_PN}-numbers \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
new file mode 100644
index 0000000..b5bd89d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Pyiface is a package that exposes the network interfaces of the operating system in a easy to use and transparent way"
+HOMEPAGE = "https://pypi.python.org/pypi/pyiface/"
+SECTION = "devel/python"
+LICENSE = "GPL-3.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fe869ee987a340198fb0d54c55c47f1"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+SRC_URI[sha256sum] = "e231e5735d329c5b2d4fc8854f069fdaa5436d3ef91ed64ee49e41e3f5e8a3f5"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-ctypes \
+    python3-fcntl \
+    python3-io \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_git.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_git.bb
deleted file mode 100644
index 29a0bc8..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_git.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Pyiface is a package that exposes the network interfaces of the operating system in a easy to use and transparent way"
-SECTION = "devel/python"
-HOMEPAGE = "https://pypi.python.org/pypi/pyiface/"
-LICENSE = "GPL-3.0-or-later"
-
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fe869ee987a340198fb0d54c55c47f1"
-
-DEPENDS += "python3-setuptools-scm-native"
-
-RDEPENDS:${PN} += " \
-    python3-ctypes \
-    python3-fcntl \
-    python3-io \
-"
-
-inherit setuptools3
-
-SRC_URI = "git://github.com/bat-serjo/PyIface.git;protocol=https;branch=master"
-SRCREV = "4557dbda96d2e4b1142c60603d4a27d007a9ffe6"
-PV = "0.1.dev33+g4557dbd"
-
-PIP_INSTALL_PACKAGE = "pyiface"
-
-S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.175.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.175.bb
deleted file mode 100644
index 969e4b7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.175.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Python API for MISP"
-HOMEPAGE = "https://github.com/MISP/PyMISP"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
-
-SRC_URI = "git://github.com/MISP/PyMISP.git;protocol=https;branch=main"
-SRCREV = "69e660ef03108cc16a52b170e7ab4440bd202520"
-S = "${WORKDIR}/git"
-
-inherit python_poetry_core
-
-PIP_INSTALL_PACKAGE = "pymisp"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-dateutil \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-jsonschema \
-    ${PYTHON_PN}-requests \
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-deprecated \
-    ${PYTHON_PN}-wrapt \
-"
-
-# Fixes: python3-pymisp requires /bin/bash, but no
-# providers found in RDEPENDS:python3-pymisp? [file-rdep]
-RDEPENDS:${PN} += "bash"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb
new file mode 100644
index 0000000..56f34d4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Python API for MISP"
+HOMEPAGE = "https://github.com/MISP/PyMISP"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
+
+SRC_URI = "git://github.com/MISP/PyMISP.git;protocol=https;branch=main"
+SRCREV = "249cf20f3516100cea0adb0396635e2c13d7695d"
+S = "${WORKDIR}/git"
+
+inherit python_poetry_core
+
+PIP_INSTALL_PACKAGE = "pymisp"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-jsonschema \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-deprecated \
+    ${PYTHON_PN}-wrapt \
+"
+
+# Fixes: python3-pymisp requires /bin/bash, but no
+# providers found in RDEPENDS:python3-pymisp? [file-rdep]
+RDEPENDS:${PN} += "bash"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.0.bb
deleted file mode 100644
index 1eb25af..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "A fully featured modbus protocol stack in python"
-HOMEPAGE = "https://github.com/riptideio/pymodbus/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6a146397c35e3d0953758ce8803de347"
-DEPENDS += "python3-six-native"
-
-SRC_URI[sha256sum] = "4c6fb9af3a6c5a5cba59e4c62812d911f1d5c02dc3aedaaec858990574bc6b4c"
-S = "${WORKDIR}/pymodbus-${PV}"
-
-inherit pypi setuptools3
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[repl] = ",,,python3-aiohttp python3-click python3-prompt-toolkit python3-pygments python3-pyserial-asyncio"
-PACKAGECONFIG[asyncio] = ",,,python3-pyserial-asyncio"
-PACKAGECONFIG[tornado] = ",,,python3-tornado"
-PACKAGECONFIG[twisted] = ",,,python3-twisted-conch"
-PACKAGECONFIG[redis] = ",,,python3-redis"
-PACKAGECONFIG[sql] = ",,,python3-sqlalchemy"
-
-RDEPENDS:${PN} += " \
-    python3-asyncio \
-    python3-core \
-    python3-io \
-    python3-json \
-    python3-logging \
-    python3-math \
-    python3-netserver \
-"
-
-RDEPENDS:${PN} += " \
-    python3-pyserial \
-    python3-six \
-"
-
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.2.bb
new file mode 100644
index 0000000..4cd3801
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymodbus_3.5.2.bb
@@ -0,0 +1,35 @@
+SUMMARY = "A fully featured modbus protocol stack in python"
+HOMEPAGE = "https://github.com/riptideio/pymodbus/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6a146397c35e3d0953758ce8803de347"
+DEPENDS += "python3-six-native"
+
+SRC_URI[sha256sum] = "26c1aa9919b24f2247794d5d9d80f65ec06fdfd9bd6b76b81d446b55335cabf3"
+S = "${WORKDIR}/pymodbus-${PV}"
+
+inherit pypi setuptools3
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[repl] = ",,,python3-aiohttp python3-click python3-prompt-toolkit python3-pygments python3-pyserial-asyncio"
+PACKAGECONFIG[asyncio] = ",,,python3-pyserial-asyncio"
+PACKAGECONFIG[tornado] = ",,,python3-tornado"
+PACKAGECONFIG[twisted] = ",,,python3-twisted-conch"
+PACKAGECONFIG[redis] = ",,,python3-redis"
+PACKAGECONFIG[sql] = ",,,python3-sqlalchemy"
+
+RDEPENDS:${PN} += " \
+    python3-asyncio \
+    python3-core \
+    python3-io \
+    python3-json \
+    python3-logging \
+    python3-math \
+    python3-netserver \
+"
+
+RDEPENDS:${PN} += " \
+    python3-pyserial \
+    python3-six \
+"
+
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.0.2.bb
deleted file mode 100644
index 1f6fbd3..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.0.2.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "A pure-Python MySQL client library"
-DESCRIPTION = " \
-  This package contains a pure-Python MySQL client library, based on PEP 249 \
-  Most public APIs are compatible with mysqlclient and MySQLdb. \
-  "
-SECTION = "devel/python"
-HOMEPAGE = "https://pymysql.readthedocs.io"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=528175c84163bb800d23ad835c7fa0fc"
-
-SRC_URI[sha256sum] = "816927a350f38d56072aeca5dfb10221fe1dc653745853d30a216637f5d7ad36"
-
-PYPI_PACKAGE = "PyMySQL"
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += "${PYTHON_PN}-cryptography"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.1.0.bb
new file mode 100644
index 0000000..f797674
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_1.1.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "A pure-Python MySQL client library"
+DESCRIPTION = " \
+  This package contains a pure-Python MySQL client library, based on PEP 249 \
+  Most public APIs are compatible with mysqlclient and MySQLdb. \
+  "
+SECTION = "devel/python"
+HOMEPAGE = "https://pymysql.readthedocs.io"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=528175c84163bb800d23ad835c7fa0fc"
+
+SRC_URI[sha256sum] = "4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96"
+
+PYPI_PACKAGE = "PyMySQL"
+inherit pypi python_setuptools_build_meta
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/pymysql/"
+UPSTREAM_CHECK_REGEX = "/pymysql/(?P<pver>(\d+[\.\-_]*)+)"
+
+RDEPENDS:${PN} += "${PYTHON_PN}-cryptography"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux/0002-Fixed-relative-imports.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux/0002-Fixed-relative-imports.patch
index 9b5d9d6..65f3881 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux/0002-Fixed-relative-imports.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux/0002-Fixed-relative-imports.patch
@@ -6,7 +6,7 @@
 Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
 
 ---
-Upstream-Status: Accepted
+Upstream-Status: Backport [https://github.com/rlisagor/pynetlinux/commit/afb778669efbc658a29e6bdb1c4834fee42931aa]
 
  pynetlinux/__init__.py | 8 ++++----
  pynetlinux/brctl.py    | 2 +-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.0.bb
deleted file mode 100644
index d8708f5..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "Python interface to PROJ (cartographic projections and coordinate transformations library)"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=873757af01d2d221eedb422c4c1dd163"
-DEPENDS = "python3-cython proj"
-DEPENDS:append:class-target = " python3-cython-native proj-native"
-
-PYPI_PACKAGE = "pyproj"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "a5b111865b3f0f8b77b3983f2fbe4dd6248fc09d3730295949977c8dcd988062"
-
-RDEPENDS:${PN} = " \
-    python3-certifi \
-    python3-compression \
-    python3-json \
-    python3-logging \
-    python3-profile \
-"
-
-export PROJ_INCDIR = "${STAGING_INCDIR}"
-export PROJ_LIBDIR = "${STAGING_LIBDIR}"
-export PROJ_DIR = "${STAGING_BINDIR_NATIVE}/.."
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.1.bb
new file mode 100644
index 0000000..a4121c3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproj_3.6.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Python interface to PROJ (cartographic projections and coordinate transformations library)"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=873757af01d2d221eedb422c4c1dd163"
+DEPENDS = "python3-cython proj"
+DEPENDS:append:class-target = " python3-cython-native proj-native"
+
+PYPI_PACKAGE = "pyproj"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf"
+
+RDEPENDS:${PN} = " \
+    python3-certifi \
+    python3-compression \
+    python3-json \
+    python3-logging \
+    python3-profile \
+"
+
+export PROJ_INCDIR = "${STAGING_INCDIR}"
+export PROJ_LIBDIR = "${STAGING_LIBDIR}"
+export PROJ_DIR = "${STAGING_BINDIR_NATIVE}/.."
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.5.1.bb
deleted file mode 100644
index 1b458fa..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.5.1.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-# SPDX-License-Identifier: MIT
-# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
-
-SUMMARY = "pyproject-api aims to abstract away interaction with pyproject.toml style projects in a flexible way."
-HOMEPAGE = "https://pyproject-api.readthedocs.io"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7"
-
-SRC_URI[sha256sum] = "435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9"
-
-PYPI_PACKAGE = "pyproject_api"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi python_hatchling
-
-DEPENDS += "\
-    ${PYTHON_PN}-hatch-vcs-native \
-"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-packaging \
-    ${PYTHON_PN}-tomli \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.6.1.bb
new file mode 100644
index 0000000..739df2a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyproject-api_1.6.1.bb
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "pyproject-api aims to abstract away interaction with pyproject.toml style projects in a flexible way."
+HOMEPAGE = "https://pyproject-api.readthedocs.io"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7"
+
+SRC_URI[sha256sum] = "1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"
+
+PYPI_PACKAGE = "pyproject_api"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi python_hatchling
+
+DEPENDS += "\
+    ${PYTHON_PN}-hatch-vcs-native \
+"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-packaging \
+    ${PYTHON_PN}-tomli \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz-deprecation-shim_0.1.0.post0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz-deprecation-shim_0.1.0.post0.bb
deleted file mode 100644
index 022cf39..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz-deprecation-shim_0.1.0.post0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Shims to help you safely remove pytz"
-HOMEPAGE = "https://github.com/pganssle/pytz-deprecation-shim"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=fca9fd5c15a28eb874ba38577a585d48"
-
-SRC_URI[sha256sum] = "af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"
-
-PYPI_PACKAGE = "pytz_deprecation_shim"
-PYPI_SRC_URI = "https://files.pythonhosted.org/packages/94/f0/909f94fea74759654390a3e1a9e4e185b6cd9aa810e533e3586f39da3097/${PYPI_PACKAGE}-${PV}.tar.gz"
-
-inherit pypi python_setuptools_build_meta
-
-RDEPENDS:${PN} += "\
-        ${PYTHON_PN}-zoneinfo \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyu2f_0.1.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyu2f_0.1.5.bb
new file mode 100644
index 0000000..c58981a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyu2f_0.1.5.bb
@@ -0,0 +1,20 @@
+SUMMARY = "U2F host library for interacting with a U2F device over USB."
+HOMEPAGE = "https://github.com/google/pyu2f/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[sha256sum] = "a3caa3a11842fc7d5746376f37195e6af5f17c0a15737538bb1cebf656fb306b"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.0.0.bb
deleted file mode 100644
index 39a7614..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.0.0.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "PyZMQ: Python bindings for ZMQ"
-DESCRIPTION = "This package contains Python bindings for ZeroMQ. ZMQ is a lightweight and fast messaging implementation."
-HOMEPAGE = "http://zeromq.org/bindings:python"
-LICENSE = "BSD-3-Clause & LGPL-3.0-only"
-LIC_FILES_CHKSUM = "\
-    file://COPYING.BSD;md5=11c65680f637c3df7f58bbc8d133e96e \
-    file://COPYING.LESSER;md5=12c592fa0bcfff3fb0977b066e9cb69e \
-"
-
-DEPENDS = "python3-packaging-native zeromq"
-
-SRC_URI:append = " \
-    file://club-rpath-out.patch \
-    file://run-ptest \
-"
-SRC_URI[sha256sum] = "f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"
-
-inherit pypi pkgconfig python_setuptools_build_meta ptest
-
-PACKAGES =+ "\
-    ${PN}-test \
-"
-
-FILES:${PN}-test += "\
-    ${libdir}/${PYTHON_DIR}/site-packages/*/tests \
-"
-
-RDEPENDS:${PN} += "\
-        ${PYTHON_PN}-json \
-        ${PYTHON_PN}-multiprocessing \
-"
-
-RDEPENDS:${PN}-ptest += "\
-        ${PN}-test \
-        ${PYTHON_PN}-pytest \
-"
-
-do_compile:prepend() {
-    echo [global] > ${S}/setup.cfg
-    echo zmq_prefix = ${STAGING_DIR_HOST} >> ${S}/setup.cfg
-    echo have_sys_un_h = True >> ${S}/setup.cfg
-    echo skip_check_zmq = True >> ${S}/setup.cfg
-    echo libzmq_extension = False >> ${S}/setup.cfg
-    echo no_libzmq_extension = True >> ${S}/setup.cfg
-}
-
-do_install:append() {
-        sed -i -e 's#${RECIPE_SYSROOT}##g' ${D}${PYTHON_SITEPACKAGES_DIR}/zmq/utils/config.json
-        sed -i -e 's#${RECIPE_SYSROOT}##g' ${D}${PYTHON_SITEPACKAGES_DIR}/zmq/utils/compiler.json
-}
-
-do_install_ptest() {
-        install -d ${D}${PTEST_PATH}/tests
-        cp -rf ${S}/zmq/tests/* ${D}${PTEST_PATH}/tests/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.1.1.bb
new file mode 100644
index 0000000..504ef7a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_25.1.1.bb
@@ -0,0 +1,55 @@
+SUMMARY = "PyZMQ: Python bindings for ZMQ"
+DESCRIPTION = "This package contains Python bindings for ZeroMQ. ZMQ is a lightweight and fast messaging implementation."
+HOMEPAGE = "http://zeromq.org/bindings:python"
+LICENSE = "BSD-3-Clause & LGPL-3.0-only"
+LIC_FILES_CHKSUM = "\
+    file://LICENSE.BSD;md5=1787206f198344195a671b60326c59dc \
+    file://LICENSE.LESSER;md5=0e99bfbdd8b9d33b0221986fe3be89ed \
+"
+
+DEPENDS = "python3-packaging-native python3-cython-native python3-setuptools-scm-native zeromq"
+
+SRC_URI:append = " \
+    file://club-rpath-out.patch \
+    file://run-ptest \
+"
+SRC_URI[sha256sum] = "259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"
+
+inherit pypi pkgconfig python_setuptools_build_meta ptest
+
+PACKAGES =+ "\
+    ${PN}-test \
+"
+
+FILES:${PN}-test += "\
+    ${libdir}/${PYTHON_DIR}/site-packages/*/tests \
+"
+
+RDEPENDS:${PN} += "\
+        ${PYTHON_PN}-json \
+        ${PYTHON_PN}-multiprocessing \
+"
+
+RDEPENDS:${PN}-ptest += "\
+        ${PN}-test \
+        ${PYTHON_PN}-pytest \
+"
+
+do_compile:prepend() {
+    echo [global] > ${S}/setup.cfg
+    echo zmq_prefix = ${STAGING_DIR_HOST} >> ${S}/setup.cfg
+    echo have_sys_un_h = True >> ${S}/setup.cfg
+    echo skip_check_zmq = True >> ${S}/setup.cfg
+    echo libzmq_extension = False >> ${S}/setup.cfg
+    echo no_libzmq_extension = True >> ${S}/setup.cfg
+}
+
+do_install:append() {
+        sed -i -e 's#${RECIPE_SYSROOT}##g' ${D}${PYTHON_SITEPACKAGES_DIR}/zmq/utils/config.json
+        sed -i -e 's#${RECIPE_SYSROOT}##g' ${D}${PYTHON_SITEPACKAGES_DIR}/zmq/utils/compiler.json
+}
+
+do_install_ptest() {
+        install -d ${D}${PTEST_PATH}/tests
+        cp -rf ${S}/zmq/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.10.bb
deleted file mode 100644
index 7dac464..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.10.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "Python wrapper around rapidjson"
-HOMEPAGE = "https://github.com/python-rapidjson/python-rapidjson"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4daf3929156304df67003c33274a98bd"
-
-SRC_URI = "git://github.com/python-rapidjson/python-rapidjson.git;protocol=https;branch=master"
-SRCREV = "e9e209553a65db3568471f32392f54549c8a9816"
-
-S = "${WORKDIR}/git"
-
-inherit setuptools3
-
-SETUPTOOLS_BUILD_ARGS += " --rj-include-dir=${RECIPE_SYSROOT}${includedir}"
-
-DEPENDS += " \
-    rapidjson \
-"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-core \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb
new file mode 100644
index 0000000..930ad34
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Python wrapper around rapidjson"
+HOMEPAGE = "https://github.com/python-rapidjson/python-rapidjson"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4daf3929156304df67003c33274a98bd"
+
+SRC_URI = "git://github.com/python-rapidjson/python-rapidjson.git;protocol=https;branch=master"
+SRCREV = "e1b41f64df1705770b7b70d7221a4812909c1d0f"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
+SETUPTOOLS_BUILD_ARGS += " --rj-include-dir=${RECIPE_SYSROOT}${includedir}"
+
+DEPENDS += " \
+    rapidjson \
+"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-core \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_7.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_7.0.0.bb
deleted file mode 100644
index 952c210..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_7.0.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "RDFLib is a pure Python package for working with RDF"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=37d489c0cefe52a17e1d5007e196464a"
-
-SRC_URI[sha256sum] = "9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"
-
-inherit pypi python_poetry_core
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-isodate \
-    ${PYTHON_PN}-pyparsing \
-    ${PYTHON_PN}-logging \
-    ${PYTHON_PN}-numbers \
-    ${PYTHON_PN}-xml \
-    ${PYTHON_PN}-compression \
-    ${PYTHON_PN}-core \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.0.bb
deleted file mode 100644
index f04e04b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Python client for Redis key-value store"
-DESCRIPTION = "The Python interface to the Redis key-value store."
-HOMEPAGE = "http://github.com/andymccurdy/redis-py"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=609ded3add9111c4c6e102f1d421d3f8"
-
-SRC_URI[sha256sum] = "5cea6c0d335c9a7332a460ed8729ceabb4d0c489c7285b0a86dbbf8a017bd120"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-asyncio \
-    python3-compression \
-    python3-cryptography \
-    python3-datetime \
-    python3-json \
-    python3-packaging \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.1.bb
new file mode 100644
index 0000000..2c473c0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_5.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python client for Redis key-value store"
+DESCRIPTION = "The Python interface to the Redis key-value store."
+HOMEPAGE = "http://github.com/andymccurdy/redis-py"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=609ded3add9111c4c6e102f1d421d3f8"
+
+SRC_URI[sha256sum] = "0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-asyncio \
+    python3-compression \
+    python3-cryptography \
+    python3-datetime \
+    python3-json \
+    python3-packaging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb
new file mode 100644
index 0000000..aff5f24
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Tool to Detect Surrounding Shell"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=78e1c0248051c32a38a7f820c30bd7a5"
+
+SRC_URI[sha256sum] = "cb4a6fec583535bc6da17b647dd2330cf7ef30239e05d547d99ae3705fd0f7f8"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.20.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.20.bb
deleted file mode 100644
index 414b2f6..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.20.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \
-application developers the full power and flexibility of SQL"
-HOMEPAGE = "http://www.sqlalchemy.org/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b707d50badb798e1d897f2c8f649382d"
-
-SRC_URI[sha256sum] = "ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6"
-
-PYPI_PACKAGE = "SQLAlchemy"
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-asyncio \
-    python3-compression \
-    python3-json \
-    python3-logging \
-    python3-netclient \
-    python3-numbers \
-    python3-pickle \
-    python3-profile \
-    python3-threading \
-    python3-typing-extensions \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb
new file mode 100644
index 0000000..92db504
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \
+application developers the full power and flexibility of SQL"
+HOMEPAGE = "http://www.sqlalchemy.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b707d50badb798e1d897f2c8f649382d"
+
+SRC_URI[sha256sum] = "05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258"
+
+PYPI_PACKAGE = "SQLAlchemy"
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-asyncio \
+    python3-compression \
+    python3-json \
+    python3-logging \
+    python3-netclient \
+    python3-numbers \
+    python3-pickle \
+    python3-profile \
+    python3-threading \
+    python3-typing-extensions \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.4.bb
deleted file mode 100644
index bc6a4c3..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.4.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "An enhanced version of the tty module"
-SECTION = "devel/python"
-LICENSE = "Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d90e2d280a4836c607520383d1639be1"
-
-SRC_URI[sha256sum] = "2cca4cf5f83035ca12627c4bbeff2891ad4711666247a790fd8200d73f38c3f0"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-io \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.5.bb
new file mode 100644
index 0000000..3408b29
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.5.bb
@@ -0,0 +1,12 @@
+SUMMARY = "An enhanced version of the tty module"
+SECTION = "devel/python"
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d90e2d280a4836c607520383d1639be1"
+
+SRC_URI[sha256sum] = "846fda941dbb8a7c9f246e99bf5ee731910fc4a4cc54b7e36457c133c9f6b78b"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-io \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.1.bb
deleted file mode 100644
index bbb77e7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.1.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-# SPDX-License-Identifier: MIT
-# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
-
-SUMMARY = "Automate and standardize testing in Python. It is part of a larger vision of easing the packaging, testing and release process of Python software (alongside pytest and devpi)."
-HOMEPAGE = "http://tox.readthedocs.org/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7"
-
-SRC_URI[sha256sum] = "8a8cc94b7269f8e43dfc636eff2da4b33a199a4e575b5b086cc51aae24ac4262"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi python_hatchling
-
-DEPENDS += "\
-    ${PYTHON_PN}-hatch-vcs-native \
-"
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-cachetools \
-    ${PYTHON_PN}-chardet \
-    ${PYTHON_PN}-colorama \
-    ${PYTHON_PN}-filelock \
-    ${PYTHON_PN}-packaging \
-    ${PYTHON_PN}-platformdirs \
-    ${PYTHON_PN}-pluggy \
-    ${PYTHON_PN}-pyproject-api \
-    ${PYTHON_PN}-tomli \
-    ${PYTHON_PN}-virtualenv \
-"
-
-# Install all built-in python3 modules, as the software tested with tox might
-# depend on it. Tox will attempt to install all required dependencies
-# in a virtualenv using pip, but this obviously does not include the built-in modules.
-RDEPENDS:${PN} += "${PYTHON_PN}-modules"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.3.bb
new file mode 100644
index 0000000..be42c4b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tox_4.11.3.bb
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "Automate and standardize testing in Python. It is part of a larger vision of easing the packaging, testing and release process of Python software (alongside pytest and devpi)."
+HOMEPAGE = "http://tox.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7"
+
+SRC_URI[sha256sum] = "5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi python_hatchling
+
+DEPENDS += "\
+    ${PYTHON_PN}-hatch-vcs-native \
+"
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-cachetools \
+    ${PYTHON_PN}-chardet \
+    ${PYTHON_PN}-colorama \
+    ${PYTHON_PN}-filelock \
+    ${PYTHON_PN}-packaging \
+    ${PYTHON_PN}-platformdirs \
+    ${PYTHON_PN}-pluggy \
+    ${PYTHON_PN}-pyproject-api \
+    ${PYTHON_PN}-tomli \
+    ${PYTHON_PN}-virtualenv \
+"
+
+# Install all built-in python3 modules, as the software tested with tox might
+# depend on it. Tox will attempt to install all required dependencies
+# in a virtualenv using pip, but this obviously does not include the built-in modules.
+RDEPENDS:${PN} += "${PYTHON_PN}-modules"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb
new file mode 100644
index 0000000..7df1d66
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Traitlets Python config system"
+HOMEPAGE = "http://ipython.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13bed0ee6f46a6f6dbf1f9f9572f250a"
+
+SRC_URI[sha256sum] = "db9c4aa58139c3ba850101913915c042bdba86f7c8a0dda1c6f7f92c5da8e542"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-ipython-genutils \
+    ${PYTHON_PN}-decorator \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.9.0.bb
deleted file mode 100644
index fc25271..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.9.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Traitlets Python config system"
-HOMEPAGE = "http://ipython.org"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING.md;md5=f17a3ba4cd59794dd6e005c8e150aef0"
-
-SRC_URI[sha256sum] = "f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"
-
-inherit pypi python_hatchling
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-ipython-genutils \
-    ${PYTHON_PN}-decorator \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.3.bb
deleted file mode 100644
index 73935d0..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.3.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Run-time type checker for Python"
-HOMEPAGE = "https://pypi.org/project/typeguard/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53"
-
-SRC_URI[sha256sum] = "7d4264cd631ac1157c5bb5ec992281b4f1e2ba7a35db91bc15f442235e244803"
-
-inherit pypi python_setuptools_build_meta ptest
-
-SRC_URI += " \
-        file://run-ptest \
-"
-
-RDEPENDS:${PN} += " \
-    python3-compression \
-    python3-unittest \
-"
-
-RDEPENDS:${PN}-ptest += " \
-        ${PYTHON_PN}-pytest \
-        ${PYTHON_PN}-typing-extensions \
-        ${PYTHON_PN}-unixadmin \
-"
-
-do_install_ptest() {
-        install -d ${D}${PTEST_PATH}/tests
-        cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
-
-DEPENDS += "\
-    python3-distutils-extra-native \
-    python3-setuptools-scm-native \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.5.bb
new file mode 100644
index 0000000..53a02dc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_4.1.5.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Run-time type checker for Python"
+HOMEPAGE = "https://pypi.org/project/typeguard/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53"
+
+SRC_URI[sha256sum] = "ea0a113bbc111bcffc90789ebb215625c963411f7096a7e9062d4e4630c155fd"
+
+inherit pypi python_setuptools_build_meta ptest
+
+SRC_URI += " \
+        file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+    python3-compression \
+    python3-unittest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+        ${PYTHON_PN}-pytest \
+        ${PYTHON_PN}-typing-extensions \
+        ${PYTHON_PN}-unixadmin \
+"
+
+do_install_ptest() {
+        install -d ${D}${PTEST_PATH}/tests
+        cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+DEPENDS += "\
+    python3-distutils-extra-native \
+    python3-setuptools-scm-native \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.1.0.1.bb
deleted file mode 100644
index 9d8022b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SUMMARY = "Typing stubs for setuptools"
-HOMEPAGE = "https://github.com/python/typeshed"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=ef4dc1e740f5c928f1608a4a9c7b578e"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "271ed8da44885cd9a701c86e48cc6d3cc988052260e72b3ce26c26b3028f86ed"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb
new file mode 100644
index 0000000..ed0b1b2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Typing stubs for setuptools"
+HOMEPAGE = "https://github.com/python/typeshed"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=ef4dc1e740f5c928f1608a4a9c7b578e"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb
index a59fd93..9673c5d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb
@@ -10,5 +10,4 @@
 RDEPENDS:${PN} += " \
     python3-datetime \
     python3-logging \
-    python3-pytz-deprecation-shim \
 "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.4.bb
deleted file mode 100644
index 889c73b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.4.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-# SPDX-License-Identifier: MIT
-# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
-
-SUMMARY = "A tool for creating isolated virtual python environments."
-HOMEPAGE = "https://github.com/pypa/virtualenv"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=0ce089158cf60a8ab6abb452b6405538"
-
-SRC_URI[sha256sum] = "772b05bfda7ed3b8ecd16021ca9716273ad9f4467c801f27e83ac73430246dca"
-
-BBCLASSEXTEND = "native nativesdk"
-inherit pypi python_hatchling
-
-DEPENDS += "\
-    ${PYTHON_PN}-hatch-vcs-native \
-"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-distlib \
-    ${PYTHON_PN}-filelock \
-    ${PYTHON_PN}-platformdirs \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb
new file mode 100644
index 0000000..d05c7f4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: MIT
+# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
+
+SUMMARY = "A tool for creating isolated virtual python environments."
+HOMEPAGE = "https://github.com/pypa/virtualenv"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0ce089158cf60a8ab6abb452b6405538"
+
+SRC_URI[sha256sum] = "e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit pypi python_hatchling
+
+DEPENDS += "\
+    ${PYTHON_PN}-hatch-vcs-native \
+"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-distlib \
+    ${PYTHON_PN}-filelock \
+    ${PYTHON_PN}-platformdirs \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb
new file mode 100644
index 0000000..cba7ffe
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A Python library for interacting with Ethereum."
+HOMEPAGE = "https://github.com/ethereum/web3.py"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=373fede350846fdffd23648fba504635"
+
+SRC_URI[sha256sum] = "ea89f8a6ee74b74c3ff21954eafe00ec914365adb904c6c374f559bc46d4a61c"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-aiohttp \
+    python3-distutils \
+    python3-eth-account \
+    python3-idna \
+    python3-jsonschema \
+    python3-google-api-core \
+    python3-lru-dict \
+    python3-requests \
+    python3-setuptools \
+    python3-websockets \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.9.0.bb
deleted file mode 100644
index 9214669..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.9.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "A Python library for interacting with Ethereum."
-HOMEPAGE = "https://github.com/ethereum/web3.py"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=373fede350846fdffd23648fba504635"
-
-SRC_URI[sha256sum] = "cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    python3-aiohttp \
-    python3-distutils \
-    python3-eth-account \
-    python3-idna \
-    python3-jsonschema \
-    python3-google-api-core \
-    python3-lru-dict \
-    python3-requests \
-    python3-setuptools \
-    python3-websockets \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-webargs_8.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-webargs_8.3.0.bb
new file mode 100644
index 0000000..d8ce4ab
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-webargs_8.3.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Declarative parsing and validation of HTTP request objects, with built-in support for popular web frameworks."
+HOMEPAGE = "https://github.com/marshmallow-code/webargs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c3ff8567ef1f2a8cf223f30ac5a6f094"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "cab207941b0686c4d086c823632ddcd4343151644341a32fcf50b8eaa71e31c7"
+
+RDEPENDS:${PN} += "\
+    python3-marshmallow \
+    python3-packaging \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.5.3.bb
deleted file mode 100644
index f7650f9..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.5.3.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "websocket client for python"
-DESCRIPTION = "\
-websocket-client module is WebSocket client for python. \
-This provide the low level APIs for WebSocket. All APIs \
-are the synchronous functions."
-HOMEPAGE = "https://github.com/websocket-client/websocket-client"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b969e9612325987c823fc0737063ebc8"
-
-SRC_URI[sha256sum] = "b96f3bce3e54e3486ebe6504bc22bd4c140392bd2eb71764db29be8f2639aa65"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-logging \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb
new file mode 100644
index 0000000..8104d37
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb
@@ -0,0 +1,17 @@
+SUMMARY = "websocket client for python"
+DESCRIPTION = "\
+websocket-client module is WebSocket client for python. \
+This provide the low level APIs for WebSocket. All APIs \
+are the synchronous functions."
+HOMEPAGE = "https://github.com/websocket-client/websocket-client"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6eae3bb7247ccb2c3a087ea8de759c01"
+
+SRC_URI[sha256sum] = "3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-logging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.2.bb
deleted file mode 100644
index 805a3b7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.2.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Python 2 and 3 compatibility library"
-HOMEPAGE = "https://xlsxwriter.readthedocs.io"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=12d9fac1f0049be71ab5aa4a78da02b0"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE = "XlsxWriter"
-
-RDEPENDS:${PN} += " \
-	python3-crypt \
-	python3-datetime \
-	python3-compression \
-	python3-numbers \
-	python3-io \
-"
-
-SRC_URI[sha256sum] = "78751099a770273f1c98b8d6643351f68f98ae8e6acf9d09d37dc6798f8cd3de"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb
new file mode 100644
index 0000000..6952d53
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python 2 and 3 compatibility library"
+HOMEPAGE = "https://xlsxwriter.readthedocs.io"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=12d9fac1f0049be71ab5aa4a78da02b0"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "XlsxWriter"
+
+RDEPENDS:${PN} += " \
+	python3-crypt \
+	python3-datetime \
+	python3-compression \
+	python3-numbers \
+	python3-io \
+"
+
+SRC_URI[sha256sum] = "696c16458d50712a3a5f902676c045ddb4c1bd1b54595f501e582d549abdbdb9"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.13.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.13.0.bb
deleted file mode 100644
index a1f3957..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.13.0.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Makes working with XML feel like you are working with JSON"
-HOMEPAGE = "https://github.com/martinblech/xmltodict"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=01441d50dc74476db58a41ac10cb9fa2"
-
-SRC_URI[sha256sum] = "341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"
-
-PYPI_PACKAGE = "xmltodict"
-
-inherit pypi setuptools3 ptest
-
-SRC_URI += " \
-	file://run-ptest \
-"
-
-RDEPENDS:${PN} += " \
-	${PYTHON_PN}-core \
-	${PYTHON_PN}-xml \
-	${PYTHON_PN}-io \
-"
-
-RDEPENDS:${PN}-ptest += " \
-	${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
-	install -d ${D}${PTEST_PATH}/tests
-	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.2.0.bb
deleted file mode 100644
index c4d7430..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.2.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "xxhash is a Python binding for the xxHash library by Yann Collet."
-SECTION = "devel/python"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3a9dab7f159514231249aa3e108ab26b"
-
-SRC_URI[sha256sum] = "1afd47af8955c5db730f630ad53ae798cf7fae0acb64cebb3cf94d35c47dd088"
-
-SRC_URI += " \
-    file://run-ptest \
-"
-
-inherit pypi setuptools3 ptest
-
-RDEPENDS:${PN}-ptest += " \
-    ${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
-    install -d ${D}${PTEST_PATH}/tests
-    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb
new file mode 100644
index 0000000..e3aec97
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "xxhash is a Python binding for the xxHash library by Yann Collet."
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3a9dab7f159514231249aa3e108ab26b"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+SRC_URI[sha256sum] = "c3f9e322b1ebeebd44e3d9d2d9b124e0c550c1ef41bd552afdcdd719516ee41a"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb
new file mode 100644
index 0000000..6ff4fff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Pure Python Multicast DNS Service Discovery Library (Bonjour/Avahi compatible)"
+HOMEPAGE = "https://github.com/jstasiak/python-zeroconf"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=6517bdc8f2416f27ab725d4702f7aac3"
+
+SRC_URI[sha256sum] = "f2457ed290c70dbca686b411f2351c3ff9f367afaae668d75cf378e9a439b8aa"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-ifaddr \
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-async-timeout \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.97.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.97.0.bb
deleted file mode 100644
index 9662c3f..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.97.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Pure Python Multicast DNS Service Discovery Library (Bonjour/Avahi compatible)"
-HOMEPAGE = "https://github.com/jstasiak/python-zeroconf"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=6517bdc8f2416f27ab725d4702f7aac3"
-
-SRC_URI[sha256sum] = "9a06cd21182250100df6c4f4e9de2a47a0ea927c7d5a0446035bb3dfcc17a647"
-
-inherit pypi setuptools3
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-ifaddr \
-    ${PYTHON_PN}-asyncio \
-    ${PYTHON_PN}-async-timeout \
-"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.2.bb b/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.2.bb
deleted file mode 100644
index 2c31a33..0000000
--- a/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.2.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Rich is a Python library for rich text and beautiful formatting in the terminal"
-DESCRIPTION = "The Rich API makes it easy to add color and style to terminal output. \
-Rich can also render pretty tables, progress bars, markdown, syntax highlighted source code, \
-tracebacks, and more."
-HOMEPAGE="https://github.com/Textualize/rich"
-SECTION = "devel/python"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303"
-
-SRC_URI[sha256sum] = "fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"
-
-inherit pypi python_poetry_core
-
-RDEPENDS:${PN} = "${PYTHON_PN}-pygments"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb b/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb
new file mode 100644
index 0000000..2c385fc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Rich is a Python library for rich text and beautiful formatting in the terminal"
+DESCRIPTION = "The Rich API makes it easy to add color and style to terminal output. \
+Rich can also render pretty tables, progress bars, markdown, syntax highlighted source code, \
+tracebacks, and more."
+HOMEPAGE="https://github.com/Textualize/rich"
+SECTION = "devel/python"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303"
+
+SRC_URI[sha256sum] = "87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} = "${PYTHON_PN}-pygments"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/0011-modules-mappers-config9.m4-Add-server-directory-to-i.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/0011-modules-mappers-config9.m4-Add-server-directory-to-i.patch
index 996eabf..9accbf1 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/0011-modules-mappers-config9.m4-Add-server-directory-to-i.patch
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/0011-modules-mappers-config9.m4-Add-server-directory-to-i.patch
@@ -4,7 +4,7 @@
 Subject: [PATCH] * modules/mappers/config9.m4: Add 'server' directory to
  include path if mod_rewrite is enabled.
 
-Upstream-Status: Accepted [https://svn.apache.org/viewvc?view=revision&revision=1909241]
+Upstream-Status: Backport [https://svn.apache.org/viewvc?view=revision&revision=1909241]
 
 ---
  modules/mappers/config9.m4 | 5 +++++
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb b/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb
index 17f096f..2623024 100644
--- a/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb
@@ -60,6 +60,8 @@
     ${PN}-playground \
     ${PN}-docker \
     ${PN}-dashboard \
+    ${PN}-packagekit \
+    ${PN}-apps \
     ${PN}-bridge \
     ${PN}-ws \
     ${PN}-desktop \
@@ -112,6 +114,9 @@
 FILES:${PN}-dashboard = "${datadir}/cockpit/dashboard"
 ALLOW_EMPTY:${PN}-dashboard = "1"
 
+FILES:${PN}-packagekit = "${datadir}/cockpit/packagekit"
+FILES:${PN}-apps = "${datadir}/cockpit/apps"
+
 FILES:${PN}-bridge = " \
     ${bindir}/cockpit-bridge \
     ${libexec}/cockpit-askpass \
diff --git a/meta-raspberrypi/conf/layer.conf b/meta-raspberrypi/conf/layer.conf
index 85adf24..e9bbbd9 100644
--- a/meta-raspberrypi/conf/layer.conf
+++ b/meta-raspberrypi/conf/layer.conf
@@ -9,7 +9,7 @@
 BBFILE_PATTERN_raspberrypi := "^${LAYERDIR}/"
 BBFILE_PRIORITY_raspberrypi = "9"
 
-LAYERSERIES_COMPAT_raspberrypi = "mickledore"
+LAYERSERIES_COMPAT_raspberrypi = "nanbield"
 LAYERDEPENDS_raspberrypi = "core"
 
 # Additional license directories.
diff --git a/meta-raspberrypi/conf/machine/include/rpi-base.inc b/meta-raspberrypi/conf/machine/include/rpi-base.inc
index 895fcfe..64f60ab 100644
--- a/meta-raspberrypi/conf/machine/include/rpi-base.inc
+++ b/meta-raspberrypi/conf/machine/include/rpi-base.inc
@@ -149,6 +149,7 @@
                  ${RPI_EXTRA_IMAGE_BOOT_FILES} \
                  "
 do_image_wic[depends] += " \
+    virtual/kernel:do_deploy \
     rpi-bootfiles:do_deploy \
     ${@bb.utils.contains('RPI_USE_U_BOOT', '1', 'u-boot:do_deploy', '',d)} \
     "
diff --git a/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc b/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc
index a740440..311da21 100644
--- a/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc
+++ b/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc
@@ -1,9 +1,9 @@
-RPIFW_DATE ?= "20220830"
+RPIFW_DATE ?= "20230509~buster"
 
 RPIFW_SRC_URI ?= "https://archive.raspberrypi.com/debian/pool/main/r/raspberrypi-firmware/raspberrypi-firmware_1.${RPIFW_DATE}.orig.tar.xz"
 RPIFW_S ?= "${WORKDIR}/raspberrypi-firmware-1.${RPIFW_DATE}"
 
 SRC_URI = "${RPIFW_SRC_URI}"
-SRC_URI[sha256sum] = "2b27e4b3c4d2664a0a1d0dd8602bd80ea41dd006eb0ad9c67d7b659c9c8bb4e5"
+SRC_URI[sha256sum] = "1d9eb83111826b708f461101766fd2000d45f1c171ad573936d000f623ca8098"
 
 PV = "${RPIFW_DATE}"
diff --git a/meta-raspberrypi/recipes-graphics/userland/userland_git.bb b/meta-raspberrypi/recipes-graphics/userland/userland_git.bb
index 9d37f47..198ad77 100644
--- a/meta-raspberrypi/recipes-graphics/userland/userland_git.bb
+++ b/meta-raspberrypi/recipes-graphics/userland/userland_git.bb
@@ -13,11 +13,11 @@
 
 SRCBRANCH = "master"
 SRCFORK = "raspberrypi"
-SRCREV = "54fd97ae4066a10b6b02089bc769ceed328737e0"
+SRCREV = "cc1ca18fb0689b01cc2ca2aa4b400dcee624a213"
 
 # Use the date of the above commit as the package version. Update this when
 # SRCREV is changed.
-PV = "20220323"
+PV = "20230419"
 
 SRC_URI = "\
     git://github.com/${SRCFORK}/userland.git;protocol=https;branch=${SRCBRANCH} \
diff --git a/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro/31ad68831357d2019624004f1f0846475671088f.patch b/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro/31ad68831357d2019624004f1f0846475671088f.patch
deleted file mode 100644
index 4de5229..0000000
--- a/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro/31ad68831357d2019624004f1f0846475671088f.patch
+++ /dev/null
@@ -1,898 +0,0 @@
-From 31ad68831357d2019624004f1f0846475671088f Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.com>
-Date: Thu, 5 May 2022 13:17:21 +0100
-Subject: [PATCH] Braktooth fix for CYW43455
-
-This updated Bluetooth firmware contains Braktooth fixes for
-CYW43455, addressing the following vulnerabilities:
-
-  CVE-2021-34145
-  CVE-2021-34146
-  CVE-2021-34147
-  CVE-2021-34148
-
-Original firmware name: BCM4345C0_003.001.025.0187.0370.hcd
-
-Signed-off-by: Phil Elwell <phil@raspberrypi.com>
-Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
-Upstream-Status: Backport
----
- broadcom/BCM4345C0.hcd | Bin 57622 -> 63894 bytes
- 1 file changed, 0 insertions(+), 0 deletions(-)
-
-diff --git a/broadcom/BCM4345C0.hcd b/broadcom/BCM4345C0.hcd
-index 82c3647398b67474110fffb6f05986be7c1e3bc8..d4d7e47ad8115bf34cba5df237afaf4bf598e74b 100644
-GIT binary patch
-delta 30611
-zcmZU*30zZG_Beju%gPc7h#D2}1rdV+23NE$0r3%V0j+J-+8V5FgT)%R7S{xd2(pM?
-zRJw{*TWf1eR9X;F+S-ntX*)q>M!SsZECsclc~tFv+5hJzb~@kRA3n*u@7#0GJ$F0z
-z+;h&&p-&`-?n)X~&RskhA&De8d+x%?lO|7@!cCf%K6#;W8@HrrlV$bO8#iv{3X8c(
-z<J0sRnbVMjQHYZ{q%-IxjO@v=9Eun!VK?r7WozUD@0a1PYtbVJp$a^T`IG{#03Z-R
-zXb}E)2=K}qT2vdzKmpvv1~FD2(V|2svIEyjf`D<&S~O%Ll){foKaBtyzW{()10+&p
-zmlW`R{-_q=uN1rRMtMH1qx_f_mC-+ZSstX2|E3m6yzq|?D}sQS<G*1%qx@6}MZN)m
-z6kBEE@b_UH-X6A-(m8fQiykgmxRA%v@L<Jj-_j!CUI)Tg!qXI)!&&scumj5@c4jQN
-zh)`Ul3aOc>i0;)4Ixmcc@)O_IqArADRKbkM$fszA4j?8KJ{OU#$!SMuWlS(LI%mBU
-z?G^YAgsu(2gCZZJ?Q}zVbdFVFOJw{a#|4Cb8WBVuE>*MW1HlBvFS9|&2vZb`S_A^L
-zmy8TTMs{W>&=W#c8$yl{PTY5C3baZX3=nw&{x(vt>h477yRj-HXQVbA)~MoWrJtPC
-z0waHI$8%I8+3V?er7GdsUC_KsGlO);Sk}wX4#5Z9JU=T4N&acP6zvyA05?gqgOIUn
-zeq>Oq;D*Mm3_*0IL5L3^F8~B8++hf!rWk`6v{PO);2%_pwBPr>qeXfN<m0G8i{)`p
-zdFfpI%%BAM1xPmK;Jt&gtwtyjxdf1xoYJBoscGl@wAK&L10PF+kj%_Ia<onmp~b1o
-zgOKUm8xr)Y@ER0e8G_8vpOT<g1UpbZ6oNdoc@9EXgcY=uDOhTz+JMlP!Ubqy17(Ye
-znq}>Lh=P8C1~r91voFn{kP_(A<`85~<2OoV6gYrfUmYxFXgVfEl|m(uJ{iKvQg2~U
-zo3Ik9{}Le3o)PbAX${$h+i8XY3SSGM&b>4qA%^3C3xuqQBIRf*CFrp56AZ?^5YoK<
-z7wAOjgko!K!8-ZlQ-Mb>f*R-_l*%m`B}Xp^Yk*K@c@W3gFiL{n5T-)cA!!hj_Y+}J
-zvk(K6V?&Vq=3F^?PM8UhIH}4?3C;KBQ_y~>EHQ+%pmDAoZ59qg13#~zgrGrxhXzG0
-zycEnh0vYn%!5S8Mv*f5mhy^Zmp~3|#FVLy=A@u2&A)LZ0DV^w7fOmZeXYrax=sGc5
-z0hAd6Eio*oAS;Y%b_nwDrRU_RSjYyx7K9*6J0EA!DIp&qOGA)Hgm}7qCqrc`0Rl79
-z*bwCFQST-xIv_j>oW9o>ggmCMXVKe&4p7%XdrrLvqQV-?S!StVkzMcs?(>I&kmbkg
-zX#XpLnYP10$cn;p7M&C#p`9h6svno0lOw|j+nL~i(5m&X1vx;k2TQCxo+Lr93qL{=
-zH-}0*F>?pyX*JX%4dGayT)9n(s)V6XQEiBS<*{JtRTUG%&@4d?^)-e{o0>M!?kI=S
-z%^^rpiBX9j6;1;VG-%^#E&AiT!NRLkt7Yg#p%bW{452=C`JfDy2{WPRa^4T(tPu{$
-zkhM(60nm;Qf}p40tE9yk;P_0a*faO6GE^!Q!HhZ|f;=0Ur$CPj-vH@LA&7b993^^8
-zhyyxJ9|h?Y_qR$>gAh*V;rSqBZS04?K~h7I=Nek1Xtz~}1EeoQgi54PtRmQ9*QC&(
-z8Sg(33G05kBt`p#Yk=AmD*ZgSSc(n_EO4Rg2-dJ(XOyBEVHwQp??U7(uLW`90OxuL
-zXT!1-C0Z`jLVs=U43@HPl%7){lduw)?+$@BX)2WHVc`fsR&)iCHeUvaQ5Xar-yb5q
-zWoEEBa==+|A&B#W86XuxHguf;I4~I&bq61Y&w}|cF7TdUKhUCoJ}F0Q1trWuk&?19
-zQKd6KqFqC`p6emptqZn<qbb5JsBgjN!P47~2O&EFax4Vdeq0iU48nT=L9!suj>r$>
-z=xM<Voumvwb}FwT^k?BRKwi5X#MxE#X9_t9e18{&42rTg)gW|L=%(`E3mg-xv*y88
-z@=k&(G^-zc_r<9Y`#+EYc>mwO$KwC*y9e@_|3RSd6k}hJ4BeTgLVtZ+7R;5+2$gHi
-zP@x`3zigJ__SpF0uWD7O3qGq7Rp{#Ipg=uWszuf@_&>2j!<jS{8ns%ArjNr>LuL#e
-zzfgrT;PV-L`WC5B07(B-j#mxYy6ERh6$(QP;|o4n`9KGQ9_eJztn&=|3es;w`eP6n
-z!{PbAe__i1Z7o7C{Y`?VzlPmIW=sS$rmjMZ{tTbr{^<Lt<0|wbeEtd_n7ldLw1_}*
-z%n21PN?16O(*Lc<(<fAje*OTTpM&}HMl6S^SqC5cso#4N$V6_};@qLLaLv$KIlNwj
-z*P+8^#Uvq9u$i=}^lxx0E*UnPeX$k4H*5w)d~Jso|7+MRoT3SqTeDM(&uM01QKM&%
-zp2OpYub@b&yR`VF;j{43k#YDR!z~na4?s&s%)*C8m?)w+VjP8bTD4d^GKK%gIq2QF
-zN)(@?L@&c9Yn~ECwW&}YuS7?tE73>rInfG3Jwu7cz-J!FgJ)+d(Jg@eFiVN1fu#7N
-z6(1fMtiHmgg|3OmsyGf$j;p0A;DRzx0lVXptPgFZ-Jn3$;1i*Lz*7m3S(`%Lvtfe@
-zNnmK7T^oAWmeBWD^f){b8j6b7tI!}MM;XtD=<L}{pK^2rp5gF(A_$kGZ-ekb=rp{`
-zfnFArlOm-R9ejoY<Y?M1`a~!mwh9U2QSKHMqH}lHbHQPbE!UznK)3^R!hplUkS&24
-zM#ED<iwEBap?`g>LUB;+Pg7W+FGn}wDFKYrmJnYHq5Npbe--dYQN3U;G?3Q+COl<;
-zNPvI@5Ej2k2_sanLxpC;lL7v+;o0$k&#|B`NPv;yFR0L5fKLj(4?>T_dl=Ab57Lt(
-zPp~5?O9)MY&-bfnd(_`Sdm0gn3c`1dOr}$r+fB#mvVx}j|0ms2`8&LH&+lnN)$eI#
-z_3vrN|D>Dt{th?Q{GQg;{+<?oPp7ukQFzL%1zuU)Za6k9@J7bM^S8eRUZoOV=|DkJ
-z{U8UDk&vWId4X5=j|yxatFvn8Dr8_e-eal;-($jIupEkT)Gt}!<>@+x6A5aLsv6uJ
-zr9%@@;mlacOa@LZK!bLF6~I8m!^eh7Xqt{iNR~k&^aniFQbN#OKS6iC#+XnoYeH4<
-zX=3raW4k2hUeaQ<ZV0yNKGN<0)ZhMcfK|puxs~05l0ZS$UyhfhaEcx6Oe+%Fu{CA5
-zwbRwr?=9Qcf|8K1%w13VyXeyb-ygdn=Liy(db;|BJxJK%rB9AWJ6Rpm!|@Hd^<+Qn
-zegIvCgdI>K&QHrd;s?kP;G&fg9&)2DMpzH@7~wY113GBcZ6#uaC6sCzlOmk*Kp{Y8
-zg)_b<MClz%E;N-MVQBdYUewjqKM=(To!BsLm^JqTE3AbAtng=FfxseW;TDp3!7z<O
-ztnhgd;@r&fFOZ2HtdK>yK_8PN7aGNHkVN>K{}j1?A!`Sd!t|UXX%|nCM=vr>(8g72
-zULxFt+yfW7m1uxP&P}JtT-eqm!k|D`zxWbup+q=*QEC-3MKuuZ>bDrA!s~6ya|HsD
-zNQECnWoHRl)+rTUZU^q^fdI;6$%F$JLeI}0JmW4(`9|?1+DhDhq*FSWb6Q?5M2Sep
-zbTW>uWYa~;Gc6+*bZxeC3SP%&0LEaK&YsD4TX!IZtuvRL?V#V6I`roh!s{-5r<ugG
-zN1o$&g)lo1**Q$h@kQk02Yf1oCod|5Qvpkt5-OtKbs{GJzMvF3T(mN?#qdjpdJDmA
-zrU$7V=aqt*4%QK+Fx3O?Stbp(r%Y)T-U*IYnDD*``DJ0k%^(elwt?*QNQ{gbrUhvU
-zPL%hiaHwQ;xL~J)@A!m7T>OMYT@3YInDCbi@|JMnbZ}~Q^#@jk3)j2Cg@ttLl!ZDV
-zTxhv~S|eZ@qAoQ&KX<FU=0^ytJ)4QW9nkhf2*qC7fC%A_UOFi1)<_{2h6nQIMhfco
-z?)xT=!Y!>*{xx#OJ8a=W@j8=v78=BXPJ=h4CXF5Hh|Z5OFG*lc9RHaZ8T}g3xek)U
-z{)6I;=q!O@cEj@^!T7V(tdxE#oo{)w@)k6T4<Sa!IwZR3j+dOAS$X#3?XGrYMr)n+
-z1~Lt6(*|3imVT%uQYUlFTr{hoSJX2$MWiG2l=ZUQX8_^M^<;-wPfm*~oqBUI-+h-=
-z?;{_%Q4<m*2$q@S?>GL{H@%c;s>=TUhO@6xoQsP2edH~`uqmVtT^`dEX0FPXTxGcZ
-zWQSYfY#{eU&Yn-Ke-vfBcF{0rJxLZ3m*V`bXtg_|ijq@YMWYSB3`tz09d6W<*WFTQ
-zK52n6&_qW+kgg};VjcP1AK^4Bq`mb7+S4M3-2i}feyNkzXLQ#QPk`a-$kad`dEE!y
-zqUOxuLL!KiHC`CTOe2SqDl?ESi9_eoIW!KQ3Xq`gJj7itvgD@Sf;GaU0gcqQeIJ?b
-zW_ZqQK=tI!fRyjw0ZZ#yiB8tjnJu}Y<Lk&xmz0;KGB-N2(}M3UF8o89esE3z>CzpC
-zU`UV-m@HMm(8i~0m|{FDU7Pl_NQ<&A9S_qYtB!o%R;2tb{bC!PZNNmXQY+;SlAX9F
-zeQelIen-0=X0Z`>q-Rhy!k`3-Kc#DM!~|}1qpO@BsM5o@H3SyJNW{A2I?44LBC-?+
-zjPj7NluW>jCQK+Q3Fu8s;&h&a+L8MYXW9l(l+-~>?j!#a^`>F=FGQ(<al&^YZ~+|1
-zfP<epfSUp-549@8RA`&Afv;|Hhz?H0C)%mR4Qm19efvnW7yoU-2xc~RO&Bv`yx6>*
-zeV65n`FheFIJW)d_UCx%JN4vz0B7nGn8)#B`U%rORtJEr1IRW*em>6v#vy;2onq$)
-z@%Q=JrtY~m#UMwVQ~r(-T6bB*UHa8lw+}Vw%}hh9{r8II1b!!z<Nuw=Y(H(P+`%MI
-zb$)*fYHSJzQO<mIi)HTju`f3l=PCCQsVL_eU5eww0o(el8;C38)6Pn@(x!TH*(YtF
-zb6=v9UX{K4jfhZLHhv>xQRHD?mQvbqvbdgn9Kd3RJ{3rtB0$e^CXJE~Xq3$`gGPwg
-zMWn7LZ^4vMeoMRldk@Fgk{Y~p;+#n}E~yhGMuSAHBQJ?+ArKYTgVF~(P+|(N2iR7S
-z!jX<C!TjSM9h6&wKcASvK}9++<DFcqfg#vO=J^}!IrfG2lWUE^_gQ$@q^G45NW(>J
-zo0P;lz4)z3+;k`;K%wKJLS0sKTntlp!*>MY_*P=|AkNaIfDg!~Tq>PZ{7}9D_NZLq
-z^5DRve73O@&!3$7bP6nGm|6&FZK5~25IAID=M@wMJtbtM2vxMHR7f~0O_lagv<A`3
-zv~~Qu^gJ(39YG=Li9B<^Z2Mk*I=_s6i~QoDu!uWy6uvEdAdFcO_ZI2*;O{1LEb(Li
-z<U;FmSCX@kd<oTXJ&|^KYJ885-%FRiZ4ewXT*IAAsw4=~yUcbv&I-rhjHpy?|IXM-
-zuDJJ-a2LbD3_YSZ8)R&+j$cErcoBEMPu*HTt_P~fQSS@nhFDEv#X{03D%-0GD{8b~
-z8xIn{tBR<u0?LH|t3}*%WD5RfN}BZ;xfghW{Kd71{N%b|lv=v_)dnQUFTgrk#aAh|
-z>iGj?rdx`3IocKipT;N^x+yx#Z;CBvZi?R>D-Z%<F%vdjx!JD}YQi?;)*P-m_Wswk
-zHCO#Uug9$`{a_)ZlRK)&aG&w4p5H=l2GX7MneCGzjYB$MjYA5)ilqBAb_#X`!ksg<
-zy3$ticeknJ08x1Yu-9%OMqegi8U1SKB;N4LTNBr7UolP~UZ3&-_MhC>#T;~i+;@jL
-zp?g+Uk)55oQbwoerH(D+MBuWR)9_2*7NYP;`AK}iz0DifYio?qo&{>P3QZv2`ql*N
-zZw!R$i}gtd;;5Pcl%g+8qOxt3;g=gw?=GnKQWtU#3pQg%K*GI1zJd+l1=1?w#nWQb
-ze({|q9lpIVU553s0RAYLd4z7~t0>yfZ3oDRfEuQDHF*jjm^OzV*{-Wq*fDK5vk?zW
-z8*J@p{}zhp{Gw)**-?&0@di3+M_N5h?G)%zMwjM5TovJA;H$_(-a^tF;P^%4XQ~yf
-zI!r#h_yVaFH4jRtVdI(WoaLP6Om!wZDFbf=8M2B~U}CYln>~8|G+75sPYp8t*FJp_
-zbalN4jxi3Tts-l@NUH<Lliok}(ar~Mo1;~zGJCyt4D^NC_eq~V*gwya^o!?U6ga^E
-z%Q6S)VREkb%ypg<d1SbUEHj<W`zVJK$#DG7%$;fHFTm178yqhze5%CoE08sVRX&GZ
-z54BAo?|Er4q#Nr1l4_KK>!<4!fA&+%<+yA5aArLI>-140G_FSHCkogZ<g9}e7!>bh
-zWl6n_<Wc~uXXtc|<V@fkUB~*tDmV>t_mJs0kOl5Q9XU$w2cC7l=*(6`;G@%rjN0U1
-z<}8y%_5zlLVig3RIVc8Z;8Bu~8)sxO&*Hz#m=+EMMId;LgkkkVLuPRNJH!mE72F%N
-znr?j-!+Pxm($i6J&jy5`Lm*%4|92miN1&O50x(d3n)Z{n0Dk77^n&>=uEZdd^k%_c
-z)=Dmlv=0pm;G+bAVi1Ck4T{!KTIHgnoehGwf`ofe(|aU6P+ibA09<v)!cO|#Lz*G^
-z!5LEGhGBCf-OAwG6IeY{YrW)0O;zM;7c*uq%!Vzb+rNdp;Xipc(`=AxdM!p~44oC~
-zo_Z4Rc|I=;_Te`7=i#X7G^y}#=@C~xAK*~;nbR<`sA&tC>Zdfy{qfE<c^rqvC@sJC
-zQTm5naugYyKI`0im^{<moE`Y98Up8XI+Lr&Q|{A!a;M>!`7s-`%Z%vN2_)9@3aBVU
-z?3rdHRrhA|c`#rZ<dz$y!8Vep<-<5eND~npD8z#OBybU)`>28==l7F;`=w}ygDdG)
-zY=!mmq&kt84lG0a$$(#m208lone2@u$FJarB#7Tc?S>s9lW!yjzpgYuVgppft@i5q
-z_sFw&;jEPWRu|F&vxP%dFo(~P`T$*lj85ek7VNQj|1U7(tH?+f()}E4<ACc{A6=J<
-zo>8!-7@eetwoy-(<L+5w<A3td;}H@JE?InVEeJ}OfzUXhu?tIQ&l?4mX@;rLxU1*H
-z<mjsG<m+7Z(VD94#2!=i5Aek1+4|u#U?Rg*x@UtKoP*R|985H|;Wd(q?X#DsNj(hz
-zx)_Eu?WaXX4fLEq@3bgUKNlxI#esI-?55cjqK@ej@w7R~j21sRN6TJv;j%dzw#$!S
-zoilUBL+*KKip>a1Zd^3SzeM+?lNuEo@RtL(72-Tb&KLX|*ebolD?S3{+Bk2jBMTM6
-z&R&9}4I?LQ@*9{@y#<2J)Z)26P(0TF>e9C&P0Kvd%-f<q+Q3Bh(vs}xaXixQA!&G(
-z;jtX3#xh)mtZ~x&$2SMg?8#=YXiL6O{MrMlo&eqM%H}RAxOaSm-pqmKVu;hj>TM+3
-zy_tM~d>Kg6Hj*vaZHQ+UVolb%A|RJJLWRCX0Z{KTc~xxQx1XH#>54V&x*!3aDKwzc
-zo`d2PWJuTz-;_Kh8tXOhG9;K^z$6{C6?u<&7lPrWYr28F)k#+{w;TVMH8E*tK*sMO
-zO#w!y?BV#$<VU}uWIx&JqoT4+q>$I$cxJYS4lV-kpwt=Ag*gJ`s{q3*c}v%tIOmxF
-z`8<F(WzV**_7#w$E~<O%C%b*=#tC_-G|XIh`(sO(qmk_ONP*}c*uOWz(r+Y{9-VPN
-ziSukB<2)#-)IP?D%r;p>Z_+|tslmR5Z1u1@sUy{bK;_*+THP=yL0gFEO$g>E7*SOL
-z9ooyl)e2WUypAj&D_p6Tk-_|t!Td$85uqoZKX($_T#apWXE0CTj=9rlgBqwod4NGt
-z&Kp1*$(UXn$2xWVZj$B2(K(sSTAZJg5%G$P?hF>gdt@K3%$YFwM~|sA7S@af&YM7G
-z8JMB*$2l78%t=gM`e1%j*-J$xo!wPra689`2h$4eYsB7xb@OI2Q}NUD#?ylX2X=4V
-zFi(^44dS%#5fyBMFj=y~v|W7$nW7hg;66vLd+=BDG;E8A`{tRgBfVS+74Y1eEP2#5
-zBm*k_KxOhZj&BC-gRa!~NT=U)mZm7tcm2suMmG2wtX%aM@~B?AyK!qMb~|tk>q1cf
-zcQqG^YB&Z`3T6J#PDt};YpO`L2o($XYknN_0(S8uwb5=l8s#W5BVmeo-EJ~pB%cLj
-zD8>;K<SnD1W$C#?wKM#u%ropoW;ihAN}SV6^-%F;pUDjE%thK}l7~xjUy7}VExkg#
-z1Y%(}Y^l(uQci`vxx;asQ6s%bzJ+s&u{NsBT_7Zcr8ptq0M>f^rBQ?L7-ujeaB|)j
-zI;={t-?z+f6&2jbs#oC5`~H0TWNySH$2sx&yg2p?Kfa!KfTB78RX#9CE_XA(et3rI
-zfwLsa%s~T#5OU+{{1=$a1M{a-#HP{UTL@-r9%M7Z+OqyKdUC_d=C@EBQxY}*A~z$P
-z79-IJqeIkhoMxAtL=Dn+@z@20Z0ugVbwMgqg5O$@kpKmBW1xUulha_ZojEN^(LbtQ
-z%0|~U{Ap2%?=RTI<ltgz!^gW9YAJmI(BB5>8yXu9c1~6p?oYRT+oyEm&lU!GXiHY1
-z4@H?et?Hd@=IZ`z_C`!nnlsX=srXRDjf*CaYbHGbl~bC=I%M?YjMXCN5N#%mN3uIQ
-z2|3v$jxX&4&+T6P%OXAVJRV&TtlS0;npmSHH+nmpBE7MH2TBopqTxNtsMq7C3brwW
-z@ZSoiP&SP^aNC#@=dvcH*#I^?r73uj&MhTxp2rglC&pq>n$sP33+^sbPm6`KZ!0<B
-z!li{P)26`0y^c1Kn?4z+tw2hh0==%afrL6DGFk&XUl$QPD@kVnGmBHF9Ck0WUoyt(
-zk-1wY@69wfKV>dyAY*;+kv_MxiYjnlBTBQ51jM6N)hH~!mOPDDFP@jaz^$|!l93Z7
-zLp|4_o_dnzSGU)bHGXs!jcF9eq6}W5OK?Pj-C_*xT|7GalGt2Cm!`$Ai45zkC);q?
-zlBW%S_Z#fRa2VV~e)5*_1-yh#%;s@m@h|;XAIvAEEPYB3+aztMg!85i7Nk!7+1+k+
-zS@yUdX;UTHi{D=|jETXYFBvubO&HQm<Z;+&$HGQ!Dk(cN*dgKekV5QVGLqSaM?4(A
-zBH1nHo44*K>24W3j}PdidV3{V>W50r<5j2(%!cDoC5Z|kZZCOGyeSH{th|#0sY>PC
-z%b<<FN1k`RN8WQais?vgH$qRk{q&4bN#gMShsUa8#6zN}W)iF85m!y#_TtMAr?L%R
-z{OiNIaZrUm6+9v=5aPb?J1C0W2zv^z0qN8mfVck^TZ@fL=S$C#w*&a_(uv9iKCYyi
-zeC5GCONXj%bgs`+T7Z-Yr0~y6H4$+NCWY<E1Xgz8VUJ9RIt!{^u_LIAXKf;L@FS0m
-zwLTWG*z3p@PfK=qPaRp|%d}GoSx3b7`FV>)4&4qZ?|?t5Ls^P+nGUMRObJp=^LO8c
-z`nuD=Diy6vN$){I6wIn*C#}-pQ`@E7d^j~e1Ue5TI-hK5Pbp<mM)X*98pkx)7`png
-z=aHd|6vsTel}_-gbQRK>(VYskXG6xnlu*u+s{)&50GfeMJ(|ScD#wmT_fpit2`ZEj
-z-6(Qe!-%po+&WZkh-)yEWygLCVq@!Lv%@yInzNana*~d_AB(rvk$*!+exs&yOvY7`
-zpD#9wWiU>xj&sa*HgB&bH+;R~HFYg{!q);ek*F)J;@9x@XV9A<h3p<-AZspQpjx^$
-zYV_cr^n3=dv=GOa6Q3&qM0*YDzMBOzOw)5tY*3#Q>j7Q#G5o6BUjvr1Y}J)$IM$Ve
-z<tm6O2RYMQPDTb8XE}M_&w;kGAh<<Y4E1DoCpAnA;tNO?=*HYSYMzh@&-oe`>h?CA
-zH6+;1=*k%|&QU#VI__9DYa;OF1imsra8{E)1ax~D-Jl!vjW)WP6kKFrzpEw&SPK+V
-zP9DbNmM>=_amDhv927p80sc!^ybLvrz=!J2QXcI<+EP$_`<9OfopA7q$8(Rk{?nJD
-zZ6dF_(w)ghTdAhKQ8X}e&|Vr{+0h)xlA$hbe&Kc?X_*KT3#{z%PRL@^_6jkJxz}gq
-z+<n@0xOGLktiaa+VxxaW?#Ke~CGj}ACRV7m_B>@R*f!}qZ5@yEA0IgzsAW!4q1*mO
-zF@iyN46vKnMAoKo()9F|!|j<lS*3Y#Sr+H^6dvg~KFm>0UJcMaz8cP9Z$4fG>s+={
-zn|9O3@#o1OVF<wdD*#zEnK}t8;1y<R8SQnn?%O=JI?Vh?9DaCZ@(7pbWOl?2Is~60
-zqa8*SM)m-V?9U#ISB|p|xGsqm7CNqLL^`fn3a+<XZa<^w9RxG22CT9*pal#?a;FmB
-zUwZH^hZ<|p86(mnbNO11S{yF}BMrGadxNNhsY#oD&V5Zhsc#e$qpykYq2(IG0K{pC
-zC)JnW?V8vEIisWT%qLQ<vpm<t<1k-8b}RUE;v2|jZ_6HZT@NJw>5;(JUj{u{M<)2}
-zXXxzD@PX514_yHg-FVRElbE*bm>bR87m+rP-o7V~&iJrW<J`7v#SO~FX^#f<tN@uE
-zFw#?6!xR;25+$g4Gq=tmDx>q_!n)z1f(1~9g(u=QZ-|%eY%);cV1cSz#V^q$Q2oC2
-z;W1ApjlNB-%s_NB%)<aE=|}r$mosB*un0eKA1$sWxwz!Xl)>-9rXX>0a7I|<f=ZW7
-z1*vxQNe%9PQqOF`15Zw8p2Fi-X&ED4xGH|!pIq8?c6yTMrm4`^>K4zy03DGNVsr5&
-zQOa=Z-X<eq;9r8-*0?Hz8IC_+HJzzAU>dpF1$@+z8*o^Qa8N;T&6TBW1}@gRWIFcB
-zPez-VQwVhXfiBfcrGWgHk4`YwL3PlDeRX68m^*)aANOM&`4hO7qz<~w)P|SHB)ro!
-zW=M)JNh=%Z2OCt9FIFqNUuii&M&XZ4c|$Jx#ynjiZa0BDP1!|lPA!?x)ImiWoK}=G
-zxs3c8xNT0^!SQ9}`2ZZRUOX<=Tc{+W?V?M%j2r{mMo*wDm<B7z-2gsOq#Gu49SFLE
-z>PV)$A#WI6;ic1o@b^WUp$QudTy;T(_$HDkPLG$tQFtHuz=LB}>)4OIc;@OgRv+k`
-zwWQS7oIR`uN*ZQRt931TO$>F;L{X+2bhVaD@ao%Z$vwXYwhfD+mK^8^370yOeepLj
-zBL_o=F<Q-ChF0nqbNnF^2FH|nV1`7xkv$=-YVuRNX{{O-SGM|SSsjUe4h()FlFzj}
-zw^KXiT_2wGR4NR&>8X*4z>@MI70Qe22A`30`%Up&Lo*a^hGVo^LA#_9zy4I(5S^%9
-z*8>u|hP)eKkkY}e+YM6h=2Op&2LcWtP?5^P$|xsqc=RAHBOD+IBK3|&@pY6rHx))O
-z2b5{NWz90h8DJTcnfTh8;BmZZCiDlQw)*fMDoDET8W;rjr7}2?;>@RYBcAqMf+1o+
-zeJKOt=fo@OYw%t}oPNCR>9wQ(><iEVG0jq;-5}3eVW&7DCNNa!dUIub6%WS|#WTj3
-zgMOtwM^H-<XmibHs>r(@T=dLTwpqk4Ka*eu3cA^#59Nj1!%8Ea<+W=@ubBI3?HSMA
-zU*z*gmV#=2HLnyobF^ifZQ`S9OD;m|!BblTA9d>?5Iv0x7>fy}&;c;Os5xgvbA>uM
-z#cj1e)K+DK$qc5`Mv%DkQ3Kc{n>SVGNjT@`@KT0L1X+%!J{xNdr!21mnVAfhp&c1~
-zDfy>ZAwCAZnonK}+!Xum%EaZonLkUa{4ly;9KOE4`>t(RqnM9?e*yTXx*Qyn9XG|x
-zM_Et}B)Vk|scvV_Qy@?Z!Nyk#eB={_zoETaM7Bn;05zPI>#`iIZjJ+g@vNG?=fmGV
-zn>zfoE7MLfcl+g_tSv^F_H2+JwWJ7hX6?jQ-ycCu8xN3t@(f@k19f1aZH@{RA`PgI
-z1xRU^>k@j-i3T|I9~TXHlX-M>m5ADzWLn4x@*^MQ$J^$Vk&HLqPS;*OS>dS=6K&K{
-zACe8J_>MVcaaLz&_0K0`+SIKYx~gpk6&kuAHBo9BmdEiI;57HaFE`Z9MIZd~7&4h?
-zzsnZnlh52#^4F4~;P+M=c9TQxVk86|l;Wq06Nk1`Yf%*pp83^e7(l8KyhQ%s#;+I0
-z$=cj+kr;fTcnWpF8M9RAZ1#{F((#dwK%yG>JWZbVOypC*>J<rAYm4Dc@RE&OJ7y4Z
-zf%`AHQC!ZvMZWgoMQh^{zxB(Y_u?6_%U@ptMd;!5MIW*=$+~cA@4e!}wQHwR9Za3A
-zLRI8%K5C3!!57?CYb(TzXzrfXP;d|bu(ptW7nbaE*`xQ9e+5`xeh2KecRptxqZWZX
-zS!$a&eX)&>z;z&l_dln>Ezjws`^iTE{M~aam^wVIB!wR0o99BdsYHXVC3>b1x0J*)
-z^YGUt^QY`5Za5H+bTpU#P-+8}fQe>)$%uv$<{VHX!RR+6aKhAFD!XG-Gx0x|ekcVL
-zHD0tX38ep~bt%LD>DQSH?nM@%`;S}plkffhq!_1~H<JY1x^7h7W&c+oKD7eNFs3gS
-zo;2(1@03at**j&?`^kBKzgc6yRT{?ZC+Fw^K|c>_EY{c!zobF-`(X6cS<DvQ1`Z54
-zIR5!^W)E(DK8?0U1Wf$Z^O}ei^Q1lUMCx(djLGvSXkIrDd9SV4;EwgdBWG2v3f;OY
-zzyb>t*m#sw*0P^h%h_HzhZ^u+OD22Ji!WI=&+4Qs6dFO*dZlfEjbiVFF=1dPkbo1g
-zZ9o>Kgl~D2%n|044n!mLio_{{R05=qkz;<mWy2yygD-6enHlrIpLIlN{ca%|%_N;N
-zkK$wEYYl^)2f(w8bsNoWs|O$0$WMR@oq#%eW!?_SZALPBDYf==pJ~bd`RYVo%NzOW
-zPR*6M;MUCK?c{<7D>hAJk9+V#o2G&Q-?%AwoIRNjG8BS6WV&a-J%ohF$U%eDC>Gp7
-zLv;A_O~Ed(%vT}9<aKdBpJ@_VbzSy9uIj;;R@E2bmI?Ua<{(by0va44?$dxe@nHZp
-z)bPr=YaJKkCp$As@tQ3;?041p)Rwggz%zoF!bpe8iCzi69f6d$VQ}Y4dxjdqZb#sW
-zFC3nJ%B8m(rdZ<wXIe`4WdHN(cYT@sXMJh6!~!UM849a-x0bo1<_g?4_jw}-E=4>4
-zvDr|H*%uoh%5`z=O1E54%w?QIos2W@wsWgt@(Xdlf+q~hH!K2s@h7i|Eciw)UL7Jb
-z5vT4TCNH7DUFOC;FSgJru&e;4Kv}5<TV9NbVYmhZlPz;3mM+XQ#etz+#Ft8gfpuIV
-zpcQV_;PqQ)vK=0Ldg~(EO5fH*N~E9Wj@qWdv$q9_wk(GCf5W?K`%JADWJqcl-2m#z
-zAhCkj{I8QS-b3UI?>ppW-w8M>uH8P0NyK}%PolI+mq6LB?HWy4wzLPW^OGZ<IeAK3
-z$c@oJ?q9_Bw$D({_fCMtk|juBu{4klH=ey?5iM<a7)saf(BOA><WM8czz&V|3Gb8z
-zW_v7$!5x}Ua@~`R+I7qr##FQ}%XCg$re?~@iOQw6V{+ApoU`mK*GQ^BvHlN;=X^5C
-zr871_sDVMD?oD0*(F#fl)lZa5AvO~Xk_Lscmr0a@|1uv031q{b%$ca(wv;4!Guwgm
-zKSZwmG4hXqvOS+9;e$K#m@<5G=X@&A96%+kA#9))DI3^p)#9WxJAWtu6AmVaTsUvn
-z4E9?Q@7^_)$-|wyX3+vokAPeHOg@<}UY?J*Vm@wV_{t`J^=&B|z7%V$N!B8N2JC&2
-zuVC^Db$BD7$?gOrt}f7QKM!KFTc+-{gRxfUFVKEq#6;nGKQDw|{$Kp3dno2ozFRt|
-zw+tMl%fNGI2A&4MaZ8^+i;IHKTjFw3>ap0DlSe%daIEC!1Eg;O2^cm#szS8PU%^jO
-zTEsN96?KV9)b<k8`7$Pd5nl%WsyfWP65gW3?{6v9;fbI?!dbp1FN#xct_I<)7W`3<
-zIJhdCY)LOBk3#g!H(n{woFitoGh=k1uwMzjPZQhl4BO)L10bh=Ydf%@drXA}gTpDC
-zm%N*?GIpibFnp;YE?g&G)xdVT1-ILt9d>}c6DYJ#=MA8lyc*C!$_%MmJgsa3?REi3
-zC|^E6mIr?0u-w~X*9SSoyUUW<d$1(R5)z`_TsxSvOAQEvB}`}5n{-?C8_*cb6Z^;?
-zy!cjGI<p>Y%Hy+vX4^98nFJ1vtxQH%2$M0HI8;%`A^lb@+6C_iz!AiOQHDB$UJk5D
-zSQj@Yt>>yNF#|+g9Z}*J%ST0o`JFqv6|$b!L9;(vJ~!-$5vV}KLLvUSe3%s~vB6~)
-zy01s`OUR}!ZSa6FgsUZ2JE=Qe%7Z|OSVK;G3+=;T(|(E=+*FMaR<VglyO_)Yr_Mf-
-z<O)mPvk>WaI*QHC;_&U=cf0kU+(m3dwgME_6DSP)5sjePcPpN8s4~=v()(4Gqom(w
-zrI{nf76|dmI9)WL9tXv1Sa^Y;32Op7NTh?&MLA@khRHz!j|4+c3j|i>ljGiSr`e34
-z8pQ4gmFZ3O7Z9H^QWxuh_83<{r-d>Z4&1q8z0P7J9eJ%nJYi{c(g-b%Pa_lE@NTl!
-zI%#HjFBH&*=+Pp7^;U?-n|C?kyJ0(gpRkn%>n#bAiu`}DyMx%!B}dp`30GgS`5(p7
-zfl@{I_D}y$M;wRqkn%x?MAD}fLctOo5l-4Cnc%Qp<D*>NfRHZQSG|A&4N^Z2AtT6i
-zmeq}h{?LIMnhfe_67<VR=$GLRg)YyL8sv`y{))|pyWJC)#Hli9OI`p7yl3Ra(YLoe
-zDmZtaKtn*`q(dmTj*ie)lIv|yA9qDD!ZG)MiY^BqIxRHROUE=UIHn)pMU2s46Bu@R
-z(1s(dT0^FF{MM&+u41z~QI$bkBJn-kM~CXK9?BBThl!yop*`23J*tc~B()QQkQumU
-zWgJ6AKLj|zLf%IrL<Y?_wupXIa2r{`pRZ%SG3FtsG0&L6CCZ%iJqO-%@-&I`lxzX>
-z5Q3OK20qk0G?Z^{iR3|ryi=)&=G7;UlOIH?X42F>(GWMUM>>$hOoa1{j<+5scK|fA
-zXCmz26ycxnHU-|YU<Dl~-@{vaFi!({D_oR}5>k)2l<!R9$AM4mIJLYruLMWEYa9e=
-zM1xE?PL{ZeA^jlRwHDIS0gh2a&Z6L(@*SF<1LRD_Jf(b^Mm}&{3$^tyV2F|@s`Fm&
-zQzk~`y#hfpQqUnb2SSaMLl@PPUH@~oztcw-@4xzVl^iO}=TPasWF$g5($68mkGTqc
-zL@-Xz`~;jS0(fZ!&%B9Wtr(?Y1~_mwf8>=o<yz&*{p2~H@}!w)efUPjRO@c2qpLsD
-zU?y!H)e1$gnYL5^qzYZ}Al)c1GSIAhUEm6<MWa8yYhw-C-DFH4(OIQX0rEw_q7(cb
-zP@RT2%;Xy|?$8oDy3EAxDQ(aEe@ZIB^7R3-DcD|$SJ=me&^tQSt!DDF=Ly(eX|@Ei
-z)j;NhPW=Avse|hw=n&}+K~}+SU{3`0u(10X>s^S`swYeQ=>=-L;(qOmj8ietsi1f^
-zdDu05e1LTLb#^rzUzI28NQb!0-d`&l4F^Cr3*tC-lZ$>c@winjLKkZ6hxYxRv)&)1
-zLe+@wRiN8KQ-AdR+y^?I|90Qt2VCOb$|X2`&xn}OE;;Y4vB?#^rs5R7gS_LzEA}K0
-zN$?aEUoN(bi?}lLQEI!YG6CcDd(zpTMSNjTrZr>@j|M5V>tX}>OjPjZVl9*}@|lYh
-zA@a9_tn*Z4OB~t}dcY|OWYWc))j-a*1<j+VyQceYnS8OsRE%_sz_vbtyylW2w&yUZ
-zcURe0(Su)M5jaEde6Bc5s@$1ppP)PFJwueKxJ6uG!dt3_vNO-)x~j~inc8=<rB`OA
-zGdHI2$T@QiZAO^SR6GvW3$3(+JbxYwRpW+_bV*U4V}cQ`7Toz<ewgUoP>W_YG%U56
-zPyEpP8|R<6LxGlu$mgAZ75}NOVk3GH$2jq;)l=1bAE1ROH=f5oRF9y2?WA-()k&<~
-zg|&P2G5bZe{X7JkB{){yt}>zC7u0y|-ifg@yb33@SqqKexV4<#P9FB+mc2m|C!Ycm
-zf81-f?gdvBSdw$WqMZA0*h9T=BROPMRzkpC9T^En%?1#^Xl%jlLXD}^AV`tP!j*R4
-z{gh!-<W~&Ab~B?<;z6>agGn^-2T7X8U@xjNRDFE+3l`Y5tWlwIaK@SLe#sQsiU7>8
-zl5rBp*7;Qm>v%_+bK+Kgymj>1J4>S29z!WJ7C8%*iKRake{z?VT)N9j-^`Zu$RIKU
-z{E1F9AsQroR8OHo)sywBXkoI$9G~3%6s)9-L#f-=lL2C^hGYk}IIlw-_{QE=ag7CW
-z&)$tdtM97xz!6h)ca%X}nx~NTaQ6&W1G;ZB=uH%PM(?A>$G~gP*&hXkq`}U>S~c!7
-z#2NQI4DYON7;H78=$4xKv<fYTIifsEP4@=!bzq^Brd}lj0i)BnZz4|%X?Z2LnT&GJ
-zapnT9fepXLmGXJeZ%Anw6U1*M>#U;QsRt4#1F23dW`ZSN<KRjS3Yo)H1?!B_LEfG~
-ze{uKSOK1>m{_jAjAJWmhFBlcf<#&iT5EY~_!WH2RJn#fHk$D|xbXfcdP=)3ahsRXK
-zz^eU%4GkL|qB?hyktxj*tSnr4_!7a@8!&7=Fs&P^R1jp%K$k)nadKgs7;-q6w$bn`
-z(?%WNM1}|BGwDP@$v4HNw#mHo&Lu{3r%V>^kbwcChHUXDc-epwQWj5Ujyz{g+&|B#
-zQt!aw@Q-~|Fn>RlLoKf59QqCt-=)B3EQeBSGSK&s{__M5eYrg}6VX7JES9%bgX!5X
-zN5deB`5R;-{Q(7R8hXz#t@-TQtsCvGMT$FrkTK)*W@yi4Xb&!{i5p}i|GZdMoEIl|
-zRD+2Xzgxpej}zR5|6HRP;Uh2k3j{?N19spPbD1b>fDYKhZH>`lW$ncHry(FIvvh>>
-zPx+>;F=qA-QX?=Z0P%)rfp}qUY@`p2XDp}=KJsY*TWXV~J~F|NU#XoMv%8Pm9>E&~
-z8+#O7i9XUAz_)4>MvV~zx^En;6LEg>jHojkwj$lN9&RfTU1kQNqw2;1jT=6^ux<%{
-ztBw+!7r>6X1ZoQ9iopdkAZKLY74?ypKtT7EL+NBWvCmmrv{j;`-cldA6TmU`nd}oj
-zyr4c2Z>i5#`N&njpIV&yfdKBRPX($o0{G|pBuK0a;34~TIA@=cMliOlRpFX_xiie<
-znLv0`)>g*OTTa5-8&AUhku7j5B6B?H^11qUw8EH35m&h3oH!bsEH<wUl-~Ej4~GXg
-z7^#FRg}Yk#@rERJn+KOQB(Q5e_-I3Vq!-N4hrkEiq&LpRe-EJ=N&t1-{=^Z3J^x<x
-z5(Fpy-7w|(f_vLGp70<BjXq31@Zo3nCrS^K*L=8ke}cRpV0(S|qaf@>AO3!S+#^t>
-za-9m@e|i}|<(Yk?+x_$g7|bJdehz`yd0;lVmdtRQ?VWk1T`^<BN~^NNt{d#-B-?KT
-z)AAF3W4qL;;1tgFv|O11V2k}Y_rOGKJCI=A0Pbe(HVT~OFA6>%@|(74?517Pfp7)_
-zrr~%n-^=i(UBHI}_$ViO{|`H9focBcDp)lPO;7SW|C^rRZ*+}NQ|NR*w~f(-gKSYc
-zw7V!I-5=T$_K}(AwL1*_pmLG`e(LBTk&%9!gp(2$5u^84*l1S;?t*V7*uw2jyGLs=
-z?gKk9UWZ4FKjOI^v?E5rNjr~}o(JBVo~I!Nj7^z%AJim^A(VCCJbo9Ka10Aa8xS~$
-zA(C{gojxD-eSSs)l8UD1`0(sT4!Zs!pL0WhDG)Qk#l7YYaCF~b>9Vwjx;dZB74f#l
-z<h3u-y}mS`OcPBIuf-rYN%l7fQ+eds0JlA#%oa`XJzjK^A$~ATb8ZsvKX>0YC*o?s
-zuYL=c18$TJ;3B%O<K0B<Kj*oBFA3=6ksOHi+ehZZ^$Ck%14(Vi(Fc?0xlLyQOI*1Y
-znf7W?EgT5Va951p9h(eklBaHEIHiRcf6XgfT_DWN$SQ(>(_n)OU_(1hzVb3~ev@&B
-z$>m@w3{sy4Q%Xo(0Nq~-&qMH}I0xWKG3wz-^CR~{+^*X2gR!1`ei3&cOr6lXXi37E
-zZ21jTbrigC`z$e>aYOo#J^8?>0E{+*-&>j{0mV_sdV@T99>*TiKXL(ztNirD35o=y
-zAGv60?OceG?(9eam9t~fRP%?dq<6HSlrTwmHZLH&8>LDd{W}a0jM%?<eqUy*ePJwI
-za5(7lqRnJ)pda?M_i^)~u^Oqc*B=@xbr*2Z1~(Gv(s%=3KNQb?>H^!zM5Y3dJDh@7
-z9G*F8KHLC{;mjMJ`Bxgfn_z>Bph7OcL&jJ02ZD=94%YTTiPuD_4Gt9Ccw%<rPYx%~
-zn@|3Jfvb8OBKR4uZDR~qx+$oM<&GzRX-BPL`j1;a*~+#vi4KTqwBIkBAiY|nc|76l
-zeba>4tM>b7l=NzJP9C1zG-lLImzf_=?z*yC5KJu@xY*YbtLruu?Z!<YE;cl!vbWmt
-zk){#WpWCPZsBZ1q8q0_2m)m2t)$v6Zv{gEwWF&&ah3qjfKh<5)+F#)05T=)FWBJ7v
-zc57BVz0TJA-~9i7o(s%dEF6wQ<s&&ypZ=V5d*g<j?bkL)w$HaS<3~E!@guENA5d?G
-ztEOBb407QHeWxW?-`U<rr`?M$P7F>%15C-lw9!baMgh9@iD1LHGz{z(oo#*k&P%X>
-z@q$6LXJto=Gwdx8<Vh!Yq;@>9wAUHy$U$EtDfZVIPZV9c#Y(FIa=?c;y#;J$*49{X
-zn11b1+arSwrPHv6oV>6D;FRD?q}!u}yclXAXwX&DNUK|=DA5f5i*>HjJSqt#S8B;d
-zH{y_!HWu1*9on;_YqPP;{D~-6cf)sh@Dc_kNO$5I8Z(Kcj&VFA<2<BZ#LX{j9x4-Q
-zPpd-}vq&p}tQUWWX;tvPKKTAXV2z=a)`GwK5$t|>(wK5MY;jd7F#Rot@nm>=5Q_%)
-zHNy>EluVHg0X+Ye$<`yF1O=mTf6dCG`Y4UWRc6Z_G=L5iSrDQ9UV8hA^hH9D6Pv87
-z%6LHan>Kw&SdOV~q5Yf!)65|{<NU+~UUlW@wfqlp@x}&n$t80J5;?HhogzPpF=J?q
-z(+6-FBdkT=WubjeyP}-D?9$PzjApp$n+Mh^b^ChK?xWou<qU&Ss`IMydSUr1O%RWV
-zs%%n#ReLMQBIs-?HCt3#^d)#VM?S@%eegU9wye!+Eoy-@_=H-c`G&ahV7-%qF;0`e
-zPJ47?v{^b3Wd)yVwCR!<p^nYlFS@xSWJ53{MQs>I{(O-Rfs~I-3}^?z(#!<wLA0Yf
-zaqq@N^T%QYw;H~qxWwwC;$ZIBw)`!0z9{)|<SdkfyS6ZCp*{K+RY5T-Gpbu*0xOta
-z6YP8xbu(FU5n<b_BZt-!9y~h*LX2XX!=jwz(3$JVY!9}-YJ6fD+>oOKIga=PC{5aP
-zC%>4NH5CxMPXT90R?Aflb|woy$mxBe%MinMLcDE)T1BW8Oe|I7$d3U<OK=M`6p_;%
-zT-9`5(E>sdns?(Oe)P3>*zQuyy#5tiwG}&FUzYrcR{_fRF|yCqCYm7b!-0xG-9HXb
-z8uVWS=fQfC>&1)S7$L1Cw|%(ejSRMM8$R;J66rx;3g3U@$&vHOBfe9j2`vNT0v{Ly
-z;fpJ^GpM$w*^Zw-GA{XXmlMtdEci2b^-Oj;>(}z~fyqoAiS~SU1~oY=X<L@SarMZ8
-z+=E2tGdd56e+A8GDa3kEWJM79ukH{swMJ^hO#5LtS3wod?JCqQm-IU8)%SK;!@(Xm
-zkKFX)#m$AlA6%6>(afce14e0I9?#eE2>No3CljnYBK0|ecGDuxvNVWU&E0Xe#O=WY
-z&BJvkcc{=D&RI!ox81W?oRzX553Agt2N_O-c$Rr&qZdy+TFyT1#UCCW&02QiZ;w9D
-z#(MGmV-v08$ah|prs{D5(a9d^T4a`KjpSO;+-WgLv`>(l4(bet7G&;%Eh1}AHSi*@
-z*p9|z!VwHE!NP6a8gj?&0FjoXu9h>s!^RA8Ci02eS4o3Q?Nor-9+Y~I0;wIcRJG&y
-zz+gE4MBW&Y8tzC*#ol9)GslrvI@vL#4=lvs-ODt0pLv)RfH6hdqXmmpF?7?dzPDkU
-zqE{q?5>z@2<P)Q<CD?;=-sFa?>zn}=f{;Enj}+3?imZ6+n_sb)t=M>cqx!TfY+>^T
-zGh94Vz<6D7;XfXav(lbjy9gy&wyW(05TU(!ldv6bNreZ%>^iWm3^wmdF`~IrjA~v@
-ztp^Qo<Nw^Iqi{}s2!hLy6e0~|>&bfWhHVU}e#*HJF+|n}Y`3L~xg^JHHYjc*<sq>j
-zRu2;a5pa%5@pj80@fJE6Oy6m-R*L<GO7T`<IYfh^+e!ue^uui#GTdgA<>U(=#Fa7=
-z?83HyE(WG}Rrcf_njYjpi8n=Q*<N_3Vd|^Sszs$*k}}GX2%_*#ACvf>J_Z!kqi`;x
-z&ksG*@-lO%{Fh&$@5!F-Gs4CIJt<h1m8sB>p1H*D$t9!c?e2n?$nMTs^0~K`T=vkm
-zQ)gbKIH)D}msmt2*^-RiI}BiuswKy~NcSHodkrG8hW5N}_d}Q%$OBF)oB_*Zc-qJt
-z!nP1+lAc=fI#4_kq&S!S0cvylo3n>od(PPpiF$NMysbt$VOzMPh`c3+!J4|G7PieL
-zT~OdoLw{c``MV$bu7Pppk}v(jHp*x@c@6}b`k9dRuS&<!6~>jTP*yy(susYNm>9TO
-zt29w@R!xqBw2U$uh!IZJLwi(tk&xb(;;)9wK;hu4((4qCusr6D4KWZ2sW!-r%3S)C
-z7+K*T9qKNeabmW#hTQPuO(!PKhno7KCi9Eb(i`n^f+=0v%YfDRF|ryi|H$&B13HvV
-zhKVevdx6@2Er!R);`7e69NfP~Nn`k9i^81LeDQ`K3nzBWuOlx6oW*0PaBO)AoUHe3
-z>Syl$S^v!4dcCuVZgxi4>}ui8F9JKA0etDtoSo?0YLt~C?z20evFx2}mbt^m{=N7L
-zi$8iRId(Bg_fpT0yvJGG%}TCWNxz5(-YOhjN6nd~6>u%k$E~X;5fDhTlpKXkC6~<d
-za%Sk=0Dj_aO>7;x4`-7l<c=?NN3@VUDdL8=%juENup1P!n3FT0JGS`nV<-1gpt2Hx
-zKb%Y)kxNeaCpbrQ^mIiDzTqF_tji8}uyb+JJ9_CN@|7PiduJIf<Dg|)-qB2*(_zV_
-zdszv2>cReYJ!t+dA)h>Wck~&-R(=`Osb<)@s9IH9fn}$*Q8G<?fQ<E29PqQui;tX&
-zvsw(fq^X1Ux*Be{7Lyxrwb^2Lij421&s>smK6KS#CHW&<OtKgTX_u3{t`?Ecpl>YC
-zXf^PY0YAXKdW*qAhFu6@7n5f?Ln%z&z7T1IGgZ|m2ywaOC|G$d20xhszgJK?h8v8G
-z{R~QdE;KWNLsOLsFMKy17zAI~^Y6wbs2mPZ*~j*B5EvnGY0gSps8tENY}J0y1n~#&
-z&Sr<Y@PFP-r|r{KL;K?2n~6>DWot|xX$up?OoqtiPdl|cM{$cts}G-lZzA<63V^KW
-z37UVvti!^^^<$#ZPN~<EN)gLXCrE#Eb=&cT)5}!ZZ3t0IAk|c_<Hplk)jE;0uZaUP
-zZF`~4j?*K;ufxTM8IC;!Eb2E;Ycl7#Brwb2BBLnbxXoc)^JZ$X>ef3q>CCm{y4bww
-z?V{$j(fN#dKe(vpfU$5o1kKj^@YMGc2JImiF6iiGh^zu)YsahK*U{$LYM`pU?<Y|s
-zaLfBc@mKFpX8#~!$p@*@rDT&APx>G^3eb$TDr7@OQx!?`;i3-`llG9M5NS6VLXw_v
-zybM0s{*HblDn_zLd*SM=ucf0BBr$&f1FndM(Vr7b)Gc?iMulC`gPJo9E{JSYXF_1~
-z2Z0!!{wfRmQzcpLJ1%ZSQtqo;2<}f81LW_%=IxcF+h^wYz?C879O*<&S;|Mmwx~)n
-z->0L?Rb2<%>smO#Zt(V-P7Jikqyr|D1)JCTpcfv(0!?kkZZM;k!Jao7E}PN*YjMkU
-z@mJxJH^jZK6*rMWH_{#>3NJp`k|<qIAcm@=W#;2R|2oj$tY%XbJ%$A8x2+IM;fBT@
-z@)?BBZ$?ru2Hg}>kFC1>1>CroM#MUnlAT_fBb;R*aEk?VgGA?r)2H_c$8Ugurri+k
-zv<z<U;U)HQNlVFJJaAhaE(OdNr2{k3Tv8|M+tKKPdo3G1+KtAs<fI=r+cgu?;n-0j
-zZf?2I_lg)x<!p03sBk(v7-1<nm+QU0J>(E<*C&CsRUYiLbJi;Iqo)Bz!RTL9Fv@Kc
-z;ie$mlcXI_Z#KLJ@n^pc3C)=t91@zd&mW^pgCU{mY%d)W7?9S`fPCtu19H?$2jmYv
-zIv9__V8GQ5XC+DX>P=I{U2%qAHYD0Tzu?L<QPIGuc^_D5BGJo&xsq(~;3H=y;_GJ;
-zW*#K3!r<z(^>BxiUeZ>>ZHGy);ME4rk5yzWxL1bsgz`TS5%=#t#7V`?Q7qh&_%VPd
-zo}EYy5&8!3EWz424r_?oGbjHP`ay@2l^O7(4lbk86uQvfAXdRWxC;2D+#m7X%d?A1
-z)YWm7<P{HGZz%qurji`=2>A?zdR3vA(uQpH6&<vG1Vpw*eA6gC3feNb9%1Ys1x1&N
-znp|T2Qy1MAs^A1(A%flK0eGOx4|0^o1vZM0ph3JE+-vK>Q`jgzg_tp#c8G@o%TJV}
-z5bSdXJH=@`tK;Zd5!xd{dzh2ea89Bbma`9mhxuW&1k4Z8fi*}Dx~$;;!gzE$W6CmH
-zwStYwGBt`@)y(SV?HMp2%RJr2Pv;wIP(!0w!a-3rjb$u?nf0)=LY!L2l`aCquC`PP
-z0_&fyM6hAgZRdNBCdh}bopCZ+8n#@8=uZm-z%;1_n`<r^@7KfRd$f?QoLn$ffhUx!
-zSOjSFb*GQvvdLZ15BjNh6-t)!HgTS5DftHtQ|{icLPra3idDzpbLKDz3sA(umYsbC
-z#D$^bji9(l>aC>V2kmF$U_6HUj@F071pIUY`~Xq-wW57=B*J}o;A}b@S&p^mhDs~R
-z3qJhNIc_RcQFVZZ-9@=|_AqC2{m1BsN<+e5`e;?k_C0h@eNGL{%Tez?oBk{veZgIf
-z_n#YHv<GhZun_%y)>mX~fcv)_>0K5O0SjHUECMBuGKqBIJuAQ^0hb#cG_VgT*lW$(
-z*OM9WOEKOf(1CEn5>|&?2ehfc`h%MWNO^Omd_In79Yr^ULJScea1mw}Qh@oJ0q-OW
-z#EYO0*OO!yp5Gd`RBuGd1^4*j4N!B#*)*uHv?D#(IpceQcj&50h+MxZHrw``3H3`v
-zZ_z#~GBdsZx4#BMe^Gd<7k9KKuur=2x2<uRu~c=|G=juPp+S6JhH+%U>|so@vrEZs
-z*U`R{u%~nI137dt#laJmXQ0#P8EpS(%-E%**d>QKJ_|9x@$2HYpk`2JXH!%?bUD5O
-zA^bDd^YEMxhsBot2nU2*8^52A;%6;T!jCod`taHhx!E;T?QsGJ10E_wn>R5%6>zOw
-zJR=onN7aC!GFj+82EXTN>90FJFk8w<CG={!!G^e}lJUnMj*Q{*2CYO~4LJ{StqeS0
-zcj5aVCg%TL>^`H@Q^O~>M>hq8Y0#1LH-9bhxmCtnrHn<D7gqCeQ7tKPMFc~@_dtZ#
-zB65)a#6a%D<m5&AlT=@xJgCAwAH|QiwE7qN=j+T3qKj(~2h{&xQ`a8Q#Fg&PgaiVD
-zMnpxVI*EV*jRdPLTH7Y5X+lx)v94Rac66aPXn@$qZCbSnE>?W>);ih+t6j9~ie1|h
-zl`d#OP;0f;c2dA<rR~_&6}5X8AMKg&%Ke?_KK_`Tnar6p=Y78OeZTKFJN;!1J$aJS
-z#-}(9uzYS+wp&snBim@6B0gR}(r^b(-_cQ|y~86ZU+5gkLnR+NS#x)~Gk|NXQr%)%
-zJ^$Mu(WYiUOSXnQK^OE8|DY73v;4*H@c(+W`h(q_`)#HG)S&i;0sX>hp(c(d&e>E8
-zhway-9rPh!>bB4qy0_3^Uzsg4Y)Mw%9#3||iAL<J&x_vytTBvPn5mux=yNk&*DWq@
-z2+x(-zXvE26<4k-#ogcPI2mWU9kfxY@o#`Y%V4fGWENf0w+~R~Z2$TkP2hF<YsQH5
-z)a&$##`|G^lO1AkMc)>>N+EIrCJXjVP9LK`*g(63Jha&x=tteU2Z;Z!r#8^~<FQ6t
-z5L)oA4Q|Yh;^?EpW<3YD2legksEet=*Jg96W_Zoi=rr(YT;<f}B*TEe3}Y`*s&-v*
-zS(rRTDzUG)O}OfUD+Mn(v_kYlvP&zl0ev_qu0EPHc{boSYBE;hokb3SwFB@Wq4|)m
-zH_*slqwR5erB}%1_!`SxXW4Y4ZLVO4DMAoGKl+e2${1`N@B(WAWe!PIqw=|Q4Z7z$
-z`Q^&rar|FCGvej@_mwedefC@RIi+ZdmSEl-cSDR!KwI=XhQL3A9Cqn*v1YG@#$1{6
-zI?ZoVAY`gBgm;0?(#J)hx^@ws&D-{JWtWb4tlAjK+Z@IIR!J-hC$rn^CU2WhkA;*q
-z^)@bw)zms0*Y+07N$_j|YJ6)gH?|q`+IH~%B|wVZKv(t)a1G#$(SdiAhjm$DPK;`_
-z<aT8*rt|rLkP+j{(h<CAPFF;XaCcB7iw(XEuksV=JbXlvA<Q^iw<|z484FrbpsiKV
-zo-4nQ%EN-3bS16JLxj6gk*DuQ@qE`BoDWJXSMFA`cW3oCA7iuQXu0|op0r`3a1|Ct
-zX5W@@&Nd5em|#xg{HKjs<SN2RTW}AnG$tHxn1g8%Op_+yM5}YA2G-^>?|^ux4*Tov
-zN+t4RMz|dv`y|%RjEm(;ult;$wxq&U%}y7Bi|ly^%YSr5Mb3b)|1+cE3?j1wWt3;p
-zPDaneZW9<w|5X+*?jxR?+=jUwg<5X+A0lsaLb+1yu2jG>9u?U}#+-%`J_)<|ZIHan
-z6>jcAnfYO`=NMut+poU8TfJ`;@9}kk15w!>eZSgOJmR8J@w=*A+3QA!!qFE_w;9-F
-z9)?x#lAf8!{w@#@5a=(X!Fup6!hD#Hv#@OJB2V78WG_L6fW)sxFKliIdr0x`#E}hj
-zbze0GPY|Rhz*p0}9;2U8m6W65CfU{UqzC5@heJwOqen_ZWGp%1IGJ|uo$HwnR^ibY
-zc?>kS8vw8fX<RshhPz({EURzAbUxN@d6h@MJ3vU)8+0r*RP(7D5SpbJt+D7`?-J`T
-zJ*%`9&Io@NogI8Kdgx_1fhjQ<fm!f+xl)NSRfRFN0aDIVV)QajA)USpE!2quaoky4
-zR+kWCC(?VJRF_@7&U(`c$ar6D$|4C{(nvFUPz#PG9LI5df};@!>uo1+<Ow{P=*SAo
-ze@tVgMjy@WG0h@rrqRqdX$a=3-Mv6R7$MsM2_|JOAo7F-)vm)p;K=yh-CwROc4NjW
-z+d%sPrrfS923bV4Yb!iv^BW4V7;lC*8gnsXxWs>i5L*auAFTy+2O4Js6nZF6?Jg|2
-z#_v(5|9;$q###uHkwyLjdJ4&GFZ@?JU!fuwk_ijK@VOw%%^Ktexv(Cli<)E%p<XCi
-znBNN9s}Dc}sf>e>1JZS^FWPQ>HQH`j0<e}|B}V}eG!0V-6Q_%5A~eq8=ua%e_k@)X
-zyW_}`J|;%&q38SdFj1=XlVRePPk8lux~E^P{Ujr84>k13upzpMEU-|GFize>hd+3(
-z0?%djZEG|R`XhGsU4L*hf&$CC*om1NQ^duMe`Nbg?H_O*!gWT|H1!_3GbFBPnh3q{
-zi$SrvDbWg_vIYn|JjXLv_8S%Pe(m&5AD)x&94D7ezv1hw*h~|HTI0n_T-pV;fWRM-
-zg8_4s=L?T2Lku=0t7if`AdWabO1+;_AnK3LfJPD9+k2l!l9ZQ<{!(NFT!?fn?VSR(
-zrcY&RL;97~aim@~uDwQ;-VW9poqO5jVyGM+?Tq52(~9h_i5l8|LAgp!D_7l66VD+M
-zmonOMw&*Mr$3Cc5XLPC5DSm@Z1(|6N{l335f@?pm@T+RV;ph}**S7AVKQy`PM!=@X
-zFd7F1wNUQcLo0jZ#lg)(z0r<XcY-6vnbQTZil7cBJ{J0`1MZ*P9JnqBkuYg4gdWX<
-zV;<9|LCy9wLgZiA6GtXu6vV!&Cn*Sh`1?p9Pbv^D!BK!iQhXo`<hf>q?#Ar8j67l>
-z+YC;P?ZjP8&NNL%mNYh3b<4^{SCF@gu(7xU2sGfG;P|K^rEr?F_$}~k=F#>fp9@&<
-z%L|ODtXC0#Xr5+*iF|o13ShWL;$wu5?tH*@dd9tQ42K8LZjQt6(|jb>Y1UiCCtG+e
-zmmVJ|X6l5JmSNs$w6q&&%0ME|;OGo~GO%vCbEIb^C?f`qc|+mM5uP^`Vz%H{Mb5*D
-zd0vU)oxp#L>K=%Ny2~1x&AcRQJy_xbVUDk|Rh}Mu@0?c}9`i)Y+%2mr>ef2d*9ynS
-zJ1vTycO-9SxaKZo@otBg)30(v;2x52n802KpII&nc$#*Q!L%zHzFmpV4=AL0{7qGC
-z-c3zx3(hUcQ#@rkH#+7kM+RY`wj>IP&Lp5qeJ=&{iE^uQ1T&b=dJ-Yg$NcO4`HH@o
-z<>3TUa3oLlY|6Rafw*4&qCQ~PnM1T9r12kd8*O`GnVfTPW<r}{&O+zayrYS28|+Un
-zIUA)7)cE)M&pMh{zl9-P515M6k67H-dU6j1s(%kt%=69R#0o>kl2$!|wOu10XYLp(
-zCUmyx>%(^!h5$Tkth2Z4bzZ!A4m|gnCjc>UdL1@<Cm-NEIe=M{>&ynMMm)C_)vsfF
-zeQPKg=3%Q-ZJXu6URbf~te%K;7-`Z6N<-xkI5XgVEeXYzWT8+lKpHZSbG~pOM4kfO
-z2){}nqHQ4}r@GktyzGUWF>Bf(q%ugubO^?Fo=ZW2e18Pzum6N=_r~{g)U6lrTz|g`
-zIlbgBD+aHTKc~1Lb;a~UJ-6>vt%i#0;x~x#_kLAMoP3F0w_e2cwSEjc`4Z0LeoiL(
-z7BG;ovZ`#;o!b<<#T&t=G{hH=T(dKWv=W}A<NFgRwyti5lNi<&<`kYNP!&3`!_fpd
-zgHI{o2P40)gai*PcS!WbkWis(jPa0+sDP@tMTz8dJV|~F&QzG4n_b;#%%!uy8Og94
-z_I<!^K>doDW-gk9B>3N?-c`ufn*c@q1j8~beU8WA=Q4md%7D9%ykz4Tn_Awr@$yDa
-zPTsV5)9Wr<;c3_Fg_CWsyFMIQ<lhapOsfZ#YEZ*P3v{Li0wzILOtt){9Myw+Ev~Wx
-z*dYuoH^ea0xvt<uK~7<;ZC#<tn+`%mJ_Kl!<`#CB6>g|9=yg^gO(2IAgZHswp)jT!
-z{nOPpi)Wy%78VnZM}c&ILXX4lwam7>hyfEA52S`@;m-!Fag?QkFL=&9NOJp2{D2m@
-zH9h2ZVF9yFwf4e@4Gltwj`H?LA;aqMMPh&0bk*AcRAquxiDjudN(W#bhCd-ZrUHUK
-zD7;rR(H3``<9J);Q*0VAWB1noyZdXq#YsHAsQK;0z*M6l`Va6xEOR~Qu_W;Y#278}
-zm?tYX>&d(2`Y;8kG0n>pt^>=zOva)>7g3<i^qW4PO>pjY&O}o(wiOi0CSVGT#&(@i
-zs}2aL<T?I`v>4e?MC2cx|BMxhShYE7i7Dbj(0C4%OB?=Oa8wD>ex`T13&vR7-`8is
-zqU`OmZl>=wHeO?0QcE;at0M#L&l*M77=dH3!QtfO1j9z>E}DUXdLLh|wml2G)BtHS
-zE$fT2owm>LbK?g{tooP|=Iv_{{Pt@oPxXEnIcE(v=qAr_M#xRG5)9=|&t$Nnc}SNk
-zlF?gv)uHeOsl|?#Su{d)IBd6@LH7X4yK4*w5=&z6p1FM=IwEb4`#DoIu4dycZsgD1
-zc);#(>dY#6zkQ?AV~+N0jN;nZAYJA$c(~N54I}&!=^Q2p5K_^b{Up_lv@=2W#CrSA
-zJW$>1CSmaBJ1~a~K{PE4Y8(dE@8N`ChloEyx>m5vbHmT2r!mlnvj%|Ybh8uzQjM{g
-zY?}H&9`+xT4SVS3_4^af->yHHgs^Rt3x0q<gPm0Ry}7b$o^#&DtvPY6oPMBJUJZ9&
-zHveAkQ_G$Q=bC=t%3!2ZLtE>%Jda6p>)%+0HMUZFX`aQYo5cEAeES&N&f<B=1^gkf
-zV33}{{LaF}hD2K=@_)QnA2xuxEpLLpZh5Zx$ULXui1+BSwn6h6Ya3wOTa5CUy$9mR
-zVoyv18K;rBajJ`dE#8Tp+K+|z5iKu4gVbeRkhfsAXOh_i$|HDRjI}v7DlUMu?r=Tv
-zWKqLrx)r8A#bxw&!B(7+#QIiw@6SSQcq|NP7a$sHCB<b;4i+@H06Yn7rZ0DA7jC_}
-z8R`S?l;T59Yf?UZKrIm`Z#C=ux0(mtzKn;!9$~4#zp4`t{^c%nVD2H|&f5&`4pu=O
-z(tTN1131vQJQPSld3cWi(NldJz#H1v$Id)B1KkJDyLF9Ya&;3wy0bn@6&?@X9l_DL
-z9{jQ6!5?n~Z()|2;q-a1Di1va`#+Cimma|40RcKy`qhI~*C+tWdDrJ=%G?5y;k>M8
-zO%;o#ioVLUu?2YL$liA42!Ba``#PKA5_)+*G2jmWt-cepVGs>NQV5$99&#i<&=4oj
-zN_Md6Iyv`@yM|5L&F@2W{jeot(tfa9>6qvUgDac7_R}+=I9xM5AVVP!0e9I>C|{x-
-zT8|}Ji|Jf>Rg67h5GS7qqcbc1jD*&nm{9;tSZF8KyaA91JJC35Nd?<O2%h-rl>Kmc
-zONIk2yM7NgV7Fxxo!mr-Z3s^;jSfR|=WM8Ds#VR~%+2{1x~<;_^~QW?-oACK4~%*=
-z+qRavdc^T3dG>jv{DX01Eq$^_%s-i;UQ4I;ik_2GlPUp0)l`*2I?&G0Y(0V{9P*!P
-zT~5SBvGrv3L#Y5bhOr-Sa$}c6$BuLoKZt|s;3;~yN7SE6LrQ-JT;Wujy^>~!EXR14
-zFJeS{J*Meee=fXSowoBz?AEn(Z=cjK@1NJzYw6Cutqsfz)@h4)do30F7Bxg1a3a48
-zdd22b;V&@AAH<0_POXkzOMeBa&?Dv1tX}cuPbZF83-e>0GLNrQ@*#!1#&$0?AI6cF
-zdc<R&PDOs;>lyqsW7t}{J`_<|lXFulNS-nCW@{tXVc#gxayr}u?vKy}6{mS5e-yM9
-z|3LC@_lQSM=NMn3m%1V5<i7!VZ@kSYJ8jWbYXQJ89^Ty<MI!zjbuyx64c*=&rhYb&
-zZD_J<k<za}^QjNg<bLtT&t@<rFY(8Tsb|WP{*d!<Kz(Zl%)sloH(nj%h^~kR(c2o@
-z)-Qf`W`YAT&-fwPICF({&P_suFkSeappq@4s&hIovb9iWTR~s!i-1zTAbC4HV!`7G
-z>Z~X!(xj21?&BAq%A=i4;-hCL==RV|Ab+Z8Yxm1@V7%!P*PIQPb?YJI@YGqK`1I%I
-z>6wt)7~Iv2G<AqHntXX3R9VdPchO;dvjP`CT+gJT{!E%2(jH!c4b3BbCOsFLkQ;-o
-zO(vt;`^)EMa0%b)7jJ!T6qC+{vCI4seD&kp(44<wJ%zOnn^AIHXCDk<zlvIWs^~M_
-zrEoYYr5E}J!pN@`;v8DQxrrf0SOo(mwyjR$_dQij<3nQoxeW2fIeQ$k)OjS1^xId_
-zED$b!@v2z=h5bqVTU!^0?a2Pn=k~L?9odkAoo+xNT0!lkYdi(aln+Bm6=16L9ij8~
-z=3LIxh%N7NyPMuUE@q#9WLORTD7YW0-{Z_p*Hc4la8(!-H=iFrx`zHQE}jnhbIG9t
-z=*EYFL<g|)WxUq&G3xQF^S)7?3mS0es7DP0|JE|Chm)Cvf(_oYHFR==_~MrttYcXI
-zg6QvlX-sj`JN>JWx&82+(O^pcG8B1hhMM=)(DgyaesPd~-6!7sa*~+(Rk*#h^?0!O
-ztCIK{TH1HpV{{IeADJ`NGcWn;L*l)!cy$e3*e51RDfl$R7ZT#Go}LP8%J$|df<yLT
-zW>_*9u2yTY4Frf^w;Ha@2o*4!cc=vzEwL4h6o_`c_`H-Wo|M9GtZcv=2L$Ze8hW(%
-zPneLz#R0RpEfBsb9L3FV1N<ZV>CB@i_>)Y%m>z-sl@2Ak(GbQ6KoHtQT}mk>J*D&@
-zn)*ekh#9`)Qj=)@I@!C4ehUJ|G|Kl`{A#_HKSD<Z^TUQ%9(thJ4i4bp`-+K8^ek{4
-zOqJoJ{mjxP&4fyWsiz{s&#8jb8GHn>!%$lGEu?HjK7?WXr2Uj~k)+T;y(*}YYaw~U
-z-oKR_6K5+Scw=U8+L&h`QLqZ%8=7oSr(MBG_DK$s+I)i>%IVW#{`%<7DlW@z#oqNW
-zS0<#>AA{wJZ>|oDNEtWh-mvG#!A_e-_xEJjHEtY2HY9<ud9dq84rxaPz;2iZ5`WRs
-znly70T?%-XyKWO)joIJ3dUbh~{(<4b3}*sN7qZSSp(YHMY@5P-v3Wof8C;4@_ts-#
-zWoxoZS0;Yk%B!nsN{{$$>nJhQI!awdr6y6|mNps*)qetG7uvlUkX9xnL_%2&)y3p$
-zdaYZ0woOQ?!sg`hJYIOr-kDtmh8#hdV!w*BqL3)J88WM2vd_%>3cGHz1NH@|8Rsy)
-zo39ZfJvYH#1#r&zSwwGo$cV`$CnRRHC+Ri<T6aI2L|=vPREP`O4SW>{Py}boAr@~a
-zR>);5Ibje?AuZ1hwsS@LE^&8z()=pg2PAsSA+znub<7l;Kn_mlNjX<Q63X=C6I>?~
-zfe2h7*_9mDY}lLdC8tC-qktnP0ge`}!!cWc?YAvfKh*vKr9m;`!X)(v^m0&q>_Ud<
-zx)AQRy5s1!M=nf6y}ch4Z(hiWvLJnYnnaxX%}8|vjqetJ^NsQ8Z`k^A5pn(9OY%@_
-z=EaU`fpte_2;4?L1;RW6VN36vd)1bGpuk|rn@Ii_I-m!BLae#mT3&WnQ%g|%^qVKd
-zn2XtCKE?_)&0e!?n%#(FJR7Ig&2ePBK_fioFxox_1%tTs;=&nY0r2Ae6T{<x=|i*Z
-zf}UH&J#W!-FZ@gg^<_FtOcrT`v;*x;!a<(sKSeUBAPHU<M+y)=d_oLeOe%UD(`094
-zxVD@vapbpS<H(l9JQ2q6WXd9Z+iF1^IfcDWER1;e?P+8m&<lPT;15E3x&^-6<6w;R
-zZU@EUdOa~ac=DU^cowR6`3*hsVJ@%nLE1y|`a|OCOG(}x00_D8a$VhT07PcvoT1Rx
-z(>IT^VN3Kw`2Pmw%P9vjwA_d>JWc-#6w1qcjbIA=0vj~MrU~^Nzl3%Kj{pKp^l5Yp
-z^UgD$h$DBxQtoIQ83Vak_}DSj=Cjr1a<_evdv5!PCi8ho+aV@=JBoW>eE3_vH}i_S
-zh!<*$#$D+`XkIb)ihBjFSB$yRh0wfm^pyxxYv66ixit*6f9^%ANACv{ynF7dRP1f;
-z(TDoFoQPL6;0kAg1s0r?v8H2z2-%L*DvHPz_ex$s&J^UVc4e>Zb|G<>B1f2p2j;#)
-z(!B}NFi)i0>K@{rj}-6p|0ItvJtYn5h&S<4RENgokm5{_N;(q>B*<m*Fw+QWxM^)*
-zqMTw%ks>>iO+zJvX}C1T^g<v}PBTrAGEF6ck+QW|FZhZ-m0J*!k{0<4a-&_*D7Td0
-zy0k$)gR*H?*2#7+vRARvFP}lEb$uY)k-rMp0r?C<ZSg+&ObNo$J+i$N|CjETyAaRp
-zLV=o3;=^Nd7owSqcgV*~MN)D{is=a{wquy-e<XEBjOk_6#Q1;*<;jqeOk)G%<UG?O
-zxRYwil+sMzzyf)esn{#cHoY1sk?Vf0^ID|nj(vCLgX6FSOeI`b#>C>{wBiYm)ct(Y
-z`-rsfXWy!0Q)Ws7(;t^I(uKexd8uqIMKMbk$}I??nIv;%dol7^JWD=<P+Q`V?Z|&c
-z$xOLr1q!~>DqC0LiItDbEeMHgitKH1;e>6TDo(|b$+8ufK3A4(N269aO|lgg<||2;
-z?WnMd6{+$W)I$Jo!gxiDT4%Bhrz6>l)O{<4$!@&0wm4q4I&tkBD7PRaMKQ9q2-iiC
-zatlJTLM3-0p1DL2pavyyihK;7)q1cnF#T>iEd^MGeH@0_%zr8q|F2^hyu7aTirVjz
-znM{z6@hhf$H%TR}6QB8RlnO-BuYNaCJp5gTsT7!u3C^@GAKVLT!V5tSLOhdr8v7_r
-zG&KTAQOjn28JOwCi0?h(y6-J4O&Rya6W@<dW}k_IpH0d}dKqM6+#1W8GBCOlaH>Mn
-zf9Lx};@lsM?17rk@W3lSRExaKu1~qo;My*ysIIOPOJv>v((Rt%@OT$EOQfcquORv?
-t`iz40zENMnK?1zoBi70(NtpnQ@<0_-^)OY08V4b-JPb|aX7OiP|Njl#CCUH*
-
-delta 24701
-zcmZ6z30zc1@;Kh_F&D?kps1)EZxC=m&;c(rXa>Z`04iwIXyP##Oa_lQUJ*|QMF9mw
-z8x_qV8cooc$S5SBpd>L_cQ?rnQNB@gIA)W8F}wRvlYVnB^RJ#U-~Imn`hk93U0q$>
-zU0q#WUCoilen&p>t6e-Tco0H<e(H?rv&N4bKVbqlZqk_Xv-DfJxdj_c%U7&lzlF;$
-z;>L|eevDik&moOY>&Hl!j^a?@5I=Uo!4q48<|Bm4X1cxzcvFpV4D)G_$Ai!S0DMgW
-zj{#8SNk$$39DfS{pRk_>MMIVC09bwk00;d(4H}$+JQO3L0RRTcr-4i%8h`-ss6ma#
-zNUsNldO|%i$X`AQ2nGIw@o(}%yjhkLR7(Fr!LCzK@TKh2AU_xU2SCo-0C+?G>HlI3
-zJPm+Vicf<iq0%%dVBDpEcK>v|&3{+Wb9u97@c=w^27qS&P#h6(Ay9a71yL?mzN5z9
-z1SH9g!&vlzP>2HqcO-vz6`{01B~mfLft|}4bXoYQ9ifyUKu>vBjl2axK`+sQRwytB
-z;kLkxuv@Lr^AK-gNak7z+9&+aWrUuD;z2>rC!uCmNt<&(eIPq@<8di^O^Alt?N9)a
-zF#VfSv{^7f(?R%XP?W5^1EKZ9aeGj>VyW=<HH6|Kuq{Zd%!fLzI3<!Xl7>+@LK&{v
-zCw$XJX@AnFM(7V8x#;2|391x62V{kx7g<cg1<J^h0YK@eXS_|un$}9ucA*-YtV#1i
-z;(i+~K?j9%(38xmUdX7zUl`OP?1RDD?t^HGy^v~v903Th@y4@W)OfwOfR0GJ50da*
-zlN`+#xHg11U;=tM8oQMNL0XythWDL?2?-rAM|K`qsL#Nw21Lqc1And4@qqyuCAWc6
-z;v8>1K%RR}jV3j_DK|WfYvyy_g4EP<8CoM$0LL>IdLfg!xBSrSLLv;`b{}NQ#%B@g
-z5{^J4rx$y1o>A!#`a-x0jMe%WOKX3ILVkl@)%ze*ORi6$pw+-dgAX*V?ydsqg~iZ(
-z{xUD2XX{T%&|YCLG~ejM(On;n5W~?v(|^$C^sv2t=%{cTn*YLwlW`jQGyFX@nh34A
-z5cK#d>h#r7GPFrRz`JQniMNH!+9*HtmJkhX-uBg=@f%@LgWv|F-+U0hAxnl<2^whO
-zi4T(H%At@Qz`Mf-(br9vp$$S3Kpt)LQqI2ag-ifQ%62a#$CWNas|7@Pmncgp^SO(!
-zO3^l9Ch#cwkY-j$Sad<S3J`_FTWwb1d<k^uN9Yg;{X8g8`3h$17SUy}3OF6^gXCRb
-zB|}BR7-%!b2gz@Lkwxc(i2zCTLFP0@(50AJ0&_9m2bwE*K_dY&#RqxLwSh|NaEi0f
-z%f-CR%M5B3TtG<Y!<nzDVbQx@9K8>+z*NSfCLs`T_EmXnJ%75ILWaNu-m3OO7Uu6_
-zQ6u!H<lK2R65LRd@2kB?(kw%|;pU6J`2xwmRpVU%rw@2*zHmCm54|beh5=aUtMOvm
-zcFJWl3}_?ZK#iI@FY4m56n`{Tcml*tKGY@k8|cWG0J7Z&DOtK&uR!yJ`!KC3N4(XR
-zC00@;aSjHw%!g#SaafAXf(cqUU+={!5ROntF+hGg=7lUjzgJ52!}|BtQ29SVuEtmS
-zr6(m)R4n9yY#s4I3WKuc=tbcMG|*7u1Fcy6tO6|%@~Kdq^3r>`w?%?#glW)E<7qGC
-zmCz6Wgw**U#@Z$c+9L!2=|&%&A_>$g6K+ARCLd(wZ`Wxp1#}sm@zPnv&5@wP!bGT5
-zd&VdKt2KHF+Ar|Hb*r!1nm4>i(4i?Gs8K%P>fZ6zesy8I0zEHu0_t}@$XZFW94!-S
-zfp^WjUK~?cnF7rfZUW>JA7tGPfMf|S;On}tf%R$7n*&106hLZj^j6zo1W=iv1*9(k
-z2`2KxbKa!kg13C*PfKNJrSJzZbIV6$Q`$$A$aWC5)Fv;^Ycn?mpmD+nFt+D?kj<yP
-zkoN(?T4uUlVlO=1T#8To`J;TDa2$r_J0HC*K^J6bh43r1@RJX+RdExcFNNQLr=Ko*
-zTi90d4}`uFz5u>sE_or_>-Qt{weS-xlfp}QUZ|#|2)2&DMkswE{PedxT#4BK0||lr
-z|NXc5|Cb*DdFKBh&^)bipg@WOCn?c4FG{_ov6Fpty0uEw2j9nxQtS+k7<PqIqVM6S
-zM6E=RqrLlLbFmtoh{4H&hXkk-l_+Yt1TBika|TZtk~>q0=D^R-@FSnCL>?f0yA+=s
-zyd`?rP9^e33={87S=s+#3GM#D4}D*QjYFmkS_EQI4L`#U|8KYO>qDnfn<H~8?EXWm
-z@v5-2VUP{lrbaQy;BAApL;r0%f!o5SvG-13d)O2_Wmp=mcWav(Umg*U-x^kk{fB!&
-zZ){iN%;Cwb{|UT#_zU>94_dfGjsF!Mfwdz{_}vj{gP?BWPBlu}r9kcQZ#w+LbB2dv
-zzi=I`IU_s)zZR~UoqGa0I$ePxG8O0;{G`uN&=vdys&0lwSj{WYiOCA|5&S3{VDP6X
-zP%Qkse^QBFNmHOX0J}d`fhNJyO>R))z!9-HAYwfJ&ya9j5W&$Nw3n!{IiebeM#hv(
-zUrh%_j>^3$LJuKT00hv=%xW}ajc?qxtWqLB81S`)zI^=4G#`pyf)t@4XkC#KEIS#R
-zZ1j<Hdh5y1pjVYB0N^XUa2d*jJeZNF1@bbWSCS1CCD7uV1`3d&v72d%(BNX)0FSOf
-z1u0UYs1-_-1SQKL?+^Ipkop1Xqmar0{+>5K0L?nDMBz~X?-N*{D?|4n^#hEVuBw@(
-zYSgllwl6~;1Aimot0Z_WNF03RLI-L4??EaB{AEDL58&A*N*|%DO-eKkQu}L4lmY3b
-zr+h|jp?Dx<KxaC@M|<-F(8pdnKCzqt@cE0Cs18#4Z|8_OI=-#D!326q{dd+}h6~hR
-zGJ1TF`-)LvgZeAxHvP>ul+yy%Sm8~ymEJ`3C7t^q_k~|;#ePUXoI2AbZ3cSGOjpo(
-zNdNpd)1_#DEad|}8=scI=V|z)>wcz7vt>69j@JZAiva}nzkn6?PW+dC4ZGCX6F(U5
-zPxz?B__QJ=n+eqzGp#A@h7pAt(p!*5LQMn)XzI&(!T^-|lA)-LNI?U3^n$@9tZZXi
-zknpZu)7H_;=uZA_UcQvPaG8EDC9hpZ!Z~|KudDPx6D&cY*Iq+<J7{Wx-*X%ty-L>!
-zB>V&)LOBwo_^Z(oB|%VhzMmre+z;>*z*q|-{N0W^7{LP-8DXmrA1(V;ff(UOnk!|5
-zDNd*ZxU7)TzeJQgG-UzbH-K+i{hAYXboBNGGr~+45ZYNSGAiAp<d9S3M}P}ijPOkd
-zD>xjcjtQ)=tUpg+5i@HOiN30v#35E#;Dy*Wa{Ox~<q9iwQU1`!<iyoF@h<WcUd1O8
-zBTCk~&yhn{I~AypMYav+$aEMaKjAHRN3XaW8d>HijJoD0-0-NNZbz?4ClQib70r19
-z@{<VbL`C~*vanqu#J2(8)PRL5=~CgVc3;X+J|VxbL&DdIjc5yTxRFL-Wt!EzRLF(z
-z5~iK8ZXp}4QQox8G9k&WZ8ws*wxDK?mkYg)p!T6^jxQkHPurIZiYszq9*mn@X!HJ_
-z<ido#CKpzC`)4%45UDnicUuilziKbbh0ESqkqb8HmryDf5<RqjzQ<J3p%6BCCqW_n
-z%}EOtg40ErfeumI$xmHN_B;LbjFIDO$yFDil%Jo#A;$U%iMaL&QD5_oi@%W2Dr@o=
-z9*Y#Cqt~;{Ux>WoFJLcGiX)`^3x8ZeEdhdDL>($fgGAMgjsT%i+(<qJNfgQhgbP&4
-zP=KIv&;h4NmHjF@iqiwY^632Cz)`rVMZ&*9uDgcLIxOC1QZM1NV`9bt!<<x!hFC*#
-z1{&u^vIdU-ObiNngG{j>CTHD;#XBMC0>kWq^e{PtpNvT_p(`cnfh#>?CTCP!`gohY
-z4H?l&o28cI+w-2x7;Lm~#?s0;ZD_l{Ms5w#NUfo>L-V>tEn}7|t-e&+&2pasgfrHV
-z!(t8j90tHusx=nzosWT~USNq;9U%X3pn4?uAy&g!@89{UXL2!9zqlgfyF2%Kz%J2q
-zC}wXm(!_Ack&U<;1*WW|2Ov2->I;*Yw;dp79SqMIb?5*YBue<+?I3`!_-UkF?HPV|
-zG<-G5b4Yk;B6FubBgvcR9QdYIo7n6@nlaWR;xk}&C3G>|UiiALXQM-SzY01dDyRxf
-zHp!Ie4j!AVPU;pZwe@xlPm8O`thNHhpWi*L04oK)vJ`3wcbNPO??@iyzu04K(}HNU
-z;`fu2qn<TBKjU`SV#~>G=`&_q(WpBjSc|*>Hq{r!awWq3$=pbZV;A37p*0>LNSwnT
-zAZ2!$#_u*@n(_ojaYSECPGDWi*vRiZS_2b3ndg8bljAQJTl-M3#OkX#-;S$O!bUG{
-z2X^u#{8oJ}U)f|8t(=mNwt%E&`8NTx2cTJ<LJ6a$>c`fU;mim4VM^@q*Tsfy?0YO<
-z1dVIOQ`;K1t>PtT50C^ACya|^{*JT9jh%FWFo3p-&*9m#HALn~vQV@fK&+udrtk;5
-zz|GcoPB+U3Si^0yvwEPGYR4DGEiYN=MzvZaQ`=(sv!NPt!Si2g&F=rw`oK;5C9^Vd
-z6K&r=K+Km9SmyU0_E<wvw&DQUD9U(76K{nUt<d6!ede|4cMw;~CtZ@LCG|BV)h(%|
-za^<Iy+>{=>3&UNSfosRl4wAdm6_VP<q5~vZ#J`T$CXTelL`nL>6b&Fw`^4KK0;wD#
-zA`OtP4*)acTRP6OTpV9ToS2{R>^P@gVnZM*R3aXWD!~)%--X5uvZCmCUJI}XP&vpt
-z!CM~c(m=gWaO;F*u5o1;Ou+%t;;yx1T4q@qSL(faXvh$#MDJt&i7O;pf?DzVi7{+`
-zKdzt1O+GEkRi*n+i~g!k_#KEizJ>h9i8!dF2~r|ZR~*$0rYySlmHZIC7L<4vDRSYy
-zi8-vK15cfl7<o+OEL7r<+AO+4@_|D}!*mJqysp(`zldulg^dMz0?-32RSM7iUb<}`
-zKbc?1zeAS0C@k=y3<Ycr=<{dhhQC7=y6{(%IQA6}7AEDF{M8;~%O`1eM#FUlS!9V3
-zT^fEL>9!BEF^PWO?*_ZkLT6KM{Xq{6wJKpFD^^*))3=Ze=RUI4&Tt@=C$vVLl<n5=
-zg(RaNaliMdTJnirtRNx%uaRtfB`Fj0iNvmGt0e2iF!fjZ!{k**B~eZnE6Es<RU>W{
-z=&vtQlM>%1h2m?3cg!Y>9ar@dlW%vIU4=!ljIWSy(ej7Ld4~k;w6@N|iIc-hfGP6;
-zCED-5E^GhM{ii<os%rmDcfZT&&=g;o#b{*K3R2mxzodmNGfy02)AF0h#eNA2vr78H
-zk({p}Z}o>+XsJ#Nu%)Rr#Vus6)3Evw+2QoSHnoYg_NM|?t6OCo$Lk*LOIfQvt{+QQ
-zyA@vSk{0re^R}3Y4v`g3e;bU&vI_FAc1<y((ee`OYh<u^L(Hsw)U%0f?w9c6_`D};
-z)~{9X2NJpNLT|$o(brH}KV=E}qYw7(x<IJ(>Nu*kmgydKK)XAk()g>$Hq_gT-#mUC
-z4DM7rf+W`dEeMHD5^!s?9u>11S(lc7pDcI3Pe!}<LCMe_7O+Nnaf87W5|+_gOWF>R
-zeI6BvawWNm%ceYA;%{Ug>QuENob2RGH&P>;90s9<st1)yiGFl&t2r=AxWaS5110l1
-z8GV^Ho%u+`C^CYrb>bb=XhCW%R5}K8z-W@Jh^rtUy6ErsTyw|_k>h8RC3O2<R!=6h
-zzD8VP*wY#%W{1Q!-8R)W$(Cq~vr!%gczOPhIKkVmd)|J1-~T>&r=Rxgn;tDpj@t<q
-zwH2u=$SoIAYXI_<>u)`Dx>jbaRmZ}xnfpHhOxols^47Ix5&Cl*`jd$`L5EJm^l3qK
-z?>X_u&xA6S_<x?+k(6)^mL*zeeQnlDt95_Gv1@_uSQ6gfEb_4PjIuV1nJN?ybQ-`d
-zi_K{o`LiC1`3%00HjH^4|1~XYc!j;r_K6&}02yoL1O`ReSZPf6VKQFC>{LzcVG=D;
-za@-SSI1MTA0XzIDvO;{tw%G=xjRS#n-qbMWpV&Axg1L<MPEBXN!8fK(T6BtRaRk~v
-zmil*dPs}D-n~wZKx+`f1DM8nqCAZy_pHEo2*_m`})niF|d!82=x(($A-T&^P3J9!M
-zFd6#tQ2imI5%I!lV@j^rxz#$UUw1m}R4rtz9XgA2@}O>RHIhr7LXUcNsSjg^ozCe+
-zC&!nOtxi;bp1kF$%xmqN7W`@#<tz14x&EFQek$)t<2D2`0bGi}WsX-gzH`8QIgn<t
-zH}|C@)mWmFEa<KizeOI6zf~96`LGktjXEaaA){Kv*OBoaR9``+Ihfe#AR?QH*0YHW
-z@HAdZHR>c`-6lN~OP7GEtA<oNU(NOhD@Nn|JOI_dPo6lrF@axy-p8TNi|@mHqxwzc
-z9XF-%$Q@xT%;q>0t1$gh(nA}NJ7g%xD^=e+sFc0y;Jjj5L2f$U?~&PbkDeL0PQ6f%
-zULQ->M`x%Kl{t@tT{GB{YD5xMcLtvglbcKyIZ+bqGtp|^pJRk15!Hh!o_C0>1?xjR
-zK&>Jfe~>KoNYHjGx4KilB@LF*QdKlB>05{nk^+wu4Y2keFj(qHvs=y&7Vie{ft@53
-zhN8)>DfW<14^@j_yR`gy@(q4g7oQXBpi8isxIJ|E8I969)H_tw?ngbqYsFwCNPGp^
-zZ%3McdAnHPc+f*vtGp`;78;}R>!Jj-<gfUmZWO!Ng}>DeXa0@<(9MWSxY;bmg;Zq3
-z-R3G!?yty*?lM%~hZN}M4*`LFAzeG{oQH}Gh$aYjCQ@~9AcHF18{`fAcKV{EjZTJt
-zQ}jn+ZSTVY=zY;owJKb8jspW&<)rX3QNwi5H5xV)=*4HmF$ZyehB|z_L(v2$FRo0?
-zWZ=Z3{WAJd57kf2B*}xTGtx@lbId>!%z9Xy2_YQ68-{Kd%s`nqgOTxhe|WY?9`f>!
-zz_JC>HXyB^G0~ci@?qou&eP=lz0b@`ogwCT0b$v%dez`t^i;Kn{L`&tqPp`0vw`9i
-zP1o@?B-c*A0h<Br5FHcTP09MRBNKR}E+=o|In$rV7p8|LLQ9QdUUgnNeRkfH)9bWG
-z4s07;xE7Xr9eL<V<vrvJPmH>b{EUB_9>H|rfXp>fRP-4uCV}>b0|&`Sx27npO#?N7
-zoM{-0$&t*+m@=1fr!La?8YXXn*&^#Q?nE$cbgkEtAsuvOx9-NbGgD&z<&nZ%D?~=4
-z=;HW|WPwMw`XG7GPZgyGR_;ckbmB2H!tksaVRC38bvU%JV#c(kU-##c5C=6l4wB#d
-z$LPmqqhfz!{;waK{H=Aw;gkRYVy_@S0+BlMhf||JNUEHh$Z;o%DYnGwk<ly-?2ehG
-zDb`swkq1szBe5o$kXi~0F4l<|K2-BJdxRcU<dMJG6HOz$h$FmtU;~X%qO11d-t1L8
-zl^@5ZR^avg6y{6(K0hf6^)V>eb_W_kQl{I?u{I6Ahge)t^9Iz!ep#u^U7VJc92fx0
-zmk!H$;=#pPV@EG=8Hz(e?oDuHlkocO12i$#ftp}zD5!OhCIB=RPbH)lJdgP6tmwGw
-zPlXwQo~5djigE?n-Nx|&-fy}34We$x!}V#*JNSA1=&4h6NMv4AB>aApTkSta_r$E@
-z3Sq>kL@xyQ=v~CA&yyV<N(qjT>W&_rR1TXh6=b~&U(<)NoE_iM8%y@PV84BWOk82Q
-zEch0Zj=#n6C&5yof_a`KdJLE77pDfoT%-~}BRp|7Mmp#gY%8k2%7VM;_Qn;`O7Xs}
-zMo_^v18V|iu2WRme1!Vk-qq?YqaCau7e%_!<Id~^<`?`hd&I(0P=-;~0wWS8h_@{U
-zV<(v)O3^@TYv1tT;M)d(yPOLxy+$NwyY--k&bfi7Uf}7Raf+qD2*;@`KilMDE#Cn4
-zy}<|_&qC@3(uSAj>`rovbdg>MJuwaTTqQr$8VWkjLzcQwM74<WODn0K0D?_XFeL+W
-z!z7&~7fv?0RiiY{JR#CQ-qtLJnVZGo4b5VBlWjk$eRo%j=!a~(pi(h-gYoydQ<!}?
-zZ04q@rrZ`$&W)%zp5b@%gIt<2cLv6V)BRQlK4W}-W;i?9ga0=3P?W51fK29K{`l}B
-z(*?&<l$we92EeTspen$%jJM5tjcLS>W=)Rrm4`hoXM~ldy`}V+2bflhnKQcyGkM<C
-zRX-B)!}9Xk^A&hiULx}yuFp%x*1Rz4IW@#6aZla`rWwDOKY}sg&H3u6ckR*$-#pdA
-z2FnV=++$4N_9!UBnpmLqQGOGCb&i*|K=XU&jF+4w=_0;5XNc;EBP0gd*cgs4hEq8-
-z`O_RN^8+3{SB<C6_10+xr#+rOcPq0KTjx%QVvW($S%bo;1Fx3C;5{g36_Y_%pf&R-
-zz>Ik=CDhL?L1V0s^B&JuO$vqMYzrCez$>3yoOA}Zo7-pu$#YA=lx5UrzMKTx8MO{l
-zr5$<GM7j+08X)!fxkOg(#OisWQAhjFljohb3Tljf1*XhxR87{}PgYbS|A;Emjpxmq
-zF{a(2u;}8D4aL=vH{GhX8gk2xE}_^uaTH4C{WOvENU4ffq9CrC9L9f{H!@_ry`g}v
-zGLvotDQ~YKzhdXS6}q_|ouvrQcpJ##{!%`V_p=2Q|J(x;tdNeG(8bnEYRlmmX@<20
-z1aAXDjq0<<ovPA|gf2<_UgE$F^M^9KaO?c2VT0gsxq<xMNqJy2hSjAP2U-2Na?*)~
-z`6FPz3|bKJ!V!mzZ`g8>yycKWdb&>|(OUMB>+Vu;pe3Naq{M@`edJs5o+y~pvm5)M
-z(S`&iN>nJO-vAT$Jo&+Xo`gH<#4$)^(er!BN)J6K>?Kur_kvNXUE&c@R58(&5s0fK
-zL;LaN1&J)`$Gr<Q2?`b{aNqYF7DaBjC7ut1shS}kru{OGR-*q_yNjnhpDSr0Lq%Nq
-ze9G+her|Oond(}fZCh25tT3$8ug^yN6b8C%_mS+5wb=^OTJY*9Og^v9nprYFh>tHW
-z;bfG3Z6f%{<xD)=l?v?s8~ZOD8$8m9G(}dg4W7P%T)<fiN0t1=W3p6}3|CV|Kvy;S
-zTYsvBD#U7HyqudoN9542KARoz4_r|cBTcH6nkW;zRNr)WKK2Vy#E<DhLNJJ0oQ<~C
-z)UUEgIAB2p7INVX`3zVylxQybxh=k!i67ooq6xE3f?cDd7yoPF5N0EmEZP#KF`|cM
-zsC-@W&kCqu%2I-N&;$GfrOqS})i)N!u-&EjlSTWYB17s#POTeWdXZa$Ds|zty3&l$
-zZ@o*sVho_JdSP10KkW?}OxG@$@@BCD)mwCta90p?8ou)c2~#GPs%FDZTtk+^T-;Sr
-z`ILgtENQJ1OJR;#4QHKZYuHvrvfbU{EmalyvcC!3B*9;|h+jeOSr@~@7qU2ozVzvU
-zfvU&^*JqGYY>wYmLe@AULAUQmUWZ-&SS3ma@eJ!~7Hd__Vh!LM-3*`ghsRW!q5L`o
-z4uHGCbLFid0~OP~i|qF>wp}C=_9zdT>D{SJx*GC9JM~oz;PZ$DjA3pK^;pa%E_dB5
-z&A!@8x=8ay%`QeGl|korle75!7pJBqgBILJCW)GTjAp<cnxoyVq!x1+T-{x}#=yQ;
-zNt!^l(Slv%Qyji{5wjh?ws<<X#Hp|_)Jp<C)J~T0Xgg9D)5<oe{0+Xdcr@6C(j_ly
-zf*t?qiC5Q?K*tzcoZeg<)>bF#7#SQO>g*XI94Mf@c6CnvHhf@-SM4<>!(6?)WQ_D$
-z{}oU$cb8<1xaPVpo<_ICGL_nrt*9cc4w|Q3`4Fcq9f6lF4U2=8O({w=%#xa!UYs4C
-zZnABQ=aGiv{jIx6ph!3IO0oqXURnUFpDa}m$a8c26*2_|7aXbrPFm(|J#`$kK4V$j
-z@FG`ZM&KPflAj{I1?C3k=Mc=#5*OaHEMaT`uux`#DJ8eO(~~aex;tf-i}LOP++O1B
-zr&GoWLy*j-fc#_p!?K}KwOJZVt*8M(qO8X_Z;6fCIx#u~SV!Zb*-!&t@;*RMgD53C
-z<$SaF7BX8}GX~t&0{%RgAMC}Y(Cun+qTg~+3Up7xVck_uh0{+n+S)9}Fs&H_?=)<i
-zO*Ag8r97Joqkpk}dTWOK4sA2S6$ZwUhfMS6E%mSsH*DnASVcuhc6cZJR@&+`KnmEo
-z0qmr<HEi3Gtyt`*VZW{y;l9IGFEX?SERO+p%oK#OX>L5UAZFwXaB85`F^GzXY;&FL
-zp~A?-nqi@&I8PQ;k&p1wg80!RK<WG0X#J~p6szG)9kpU$2pb>v^~@afC{UG~8&V97
-z*G_=3xLBZNe#ZYSn9SV75zEy~D}Hu)M8Y!;^%@H-wI*j@A07L__J*SCqJ-hryi4}?
-zL*0cF=@EN3$j#p6$>1<(T|T+wi5=KmBjz@VUvVRfUzolxLvkC|hbjaHun4w^YLX3y
-z+(0W`*O`uVMFTK=*Di%_|E4#KnfX3zw3_^-pNbP}rB>#w9<MW-n*??g_`UxGC;U=P
-zo`Jl?N*9evx0}4(hD|TU3_jK$qn7sdf-|bFKU6LKeXr>dIe^c;l$|)%9lN4T+-86)
-zB}Iq6Ox$WN6L%Y!VulN8D-%y41$SC(pmWkYNr@v1XDD}(m&IR=@!L7Rl>C5Ag@Xs~
-zA_GBP(bFUguE9OzB@rJj)XdmqKjghisV0q%+U%j+bx|L3U7X3tK#X)up5XB>69W&P
-zrh86PsuD%6({Yt~W#ZdN7Ckva3MbqHB+7*)D>Q6!KOVE9uw;$>wxx>n_BUh<?V^Jf
-zWcLl$DN(8!aI=b>aB1n?R54uoSCK+b7;G9QT@_*5eHx^iT)g(DE_v-r-V=R@in{@Q
-z*UsViBV-F4Rc3%o5@|+s`LHU<;>(7WDp-3Ns*|PFB=lQw2>M8V+h*HFeU>k|aqP>9
-z(^~sAp!2L^uZjwCuZpf(E<|my!kr9-1clhP-4mN@8-P{=LV`-}-4%3Gl&F;afe*Z#
-zG`L<=uj%rt^bsKC3M;o}4=B8@msgE0OXNVLc98)tEojO>E8Q@(R<8-7fRMU3QR?(W
-znC?t4pYbcNER;t(I3APp`14n0L^UAlv!@3aEz|i}#~|=Em1cN%FDul=2}aHE?*8kr
-zK`>zUltLTL;@7HMkl#=8J$SWorQ}(+hr{=cUgcDu26gO4{XnTlVaXI!5(GA0!^H|R
-z!iAqJn#ii`cz;nOZYuI(8z4{*-zW;7bXc!yL2AZiP}k`XfiN7>tJEKtm6oZz$1HQz
-z{i=!#@PmPi=tp;*n2Tz`_t>zZ0*_d!er7AEch@pd?{VO~*`CZ7lX><s@p%}LToMG9
-zQLjZ2y@)sRmxu^wl?-%GynV3qv3Y2nn1gq&95w{xK{HK>UV=?8AKY`r&`b{5jNe%q
-z%NDxvmn#!zM>tYJALfwX-7>Jd=Acwd2Iz<?(gp40o6~H;Hi^1S%u&tO&(5wD<G}XK
-z)}vSykwaqLe*-gYG+^hD|AE?Z&<LKr%4@F+)0B9{s*xe0h}xJqijfccJ_i)Tu~qRS
-z*0~}qbbHGoe{+_J(Pq%1C+Ly08vG#NuZo{z@rtZUmrD+}s#?PILuMvMOAJG^IsO_P
-zuP!{gqiQI)@aTEEEL)#dB7=brrEF#nnc$?#y^8Gh(B;2}$S%K8tVUuGetvcI5PgLj
-zRlt3*@%1>kZlqiEZZgS<53CNCYMk$oUASrW1kI(4!FMF1gRGut6)^Zd>2{{@@!)WR
-zrp!7pp%GmHZ^N~fa!u@jSHN;badqM%<{dK4jdg3nqjSNhP$xz(;9<W#7i!W&V^2S_
-zFmajy>WIy7;GJtGMpcm6Zt5O>fzSI@1>>6>!aXU`<voFB^ywfsH`nB|BVcvCn(@pb
-zGGAnQ*+X!zKKz_{o}TL;rmM{2<T++>$~v?7OsQE+OE-(t4xX_9NmaI7)eU4+89?UL
-zs~X86GD^f>z4`*vkK@<IN2#V`d&W9!Pg5VwP~0s^kaR`n3@i??K$Y9H%DT1Ms7_CC
-z4#P_xW}<=6*mX1zeBX?<)}Ap(0S>tq+_^S)!XdH}4!R?(4aN71%?x_TgfMVnuYvMC
-zo->AqV(CM(iix;yxL*uq^o-gt9jNO}F|aMHFvSm>=g}DRo&*)3-(NHxB(ps3n1MDG
-zZzMJNT~kzcs^?2ko@#+*7{gy@H5xURv&E8V_F-wrL6YF<HHKLp6#Fv=NsI?PKo;Gj
-zB!EZ4c|l_`nl$S;*xR5*V<xm1ylxjm@S$}{3EAON+d*)9f+wG0em}ZS@=%AG;K&P@
-z+8Ijp!VF25ESg@l{e&N^I}^3OXNewdNo|AQMzdVny_k-?Q9%bv1a$oV`lhG{Hw9Rr
-zo;)*;VoIA1@+ukIE#puv;B@kUvwcG<EA7W0ZrG?!^svWU``BRip+Dmf?g2lz2yE?>
-z1}o_4tRf4Lb2koW2YT=;8)q{W_`{7eqJ$Gd%XhQTNG9f-F^V4;QKcJXJ0w0s2Qyy}
-z6^3szvav2)wu#4Go5F?yI4m2Scl=~q*w@qH{xX%fkTEW7-;~0Jx^U8K6JZ-Kd~E`5
-zc+IPzY=DegUu(i^H+%DqIgl^k+=QnUd-JAT$S)|)WH(meH;Pwc<reSKPMxX5F<XwZ
-z!yUL|OBnucix(Nq0^}!K>X?sk<<=2V+E3m9n`LjtwVQ)QCh*)t#AHY2IZCOA;0DF~
-zbZb-8J<(ViXj6yf7Vj$=q{}tMhgBAb=oEBAtep)whqgtt8aw`QTU8Wed~gYE)4~aW
-zwZb-QWo;}Rco}MSF3bbeg6(PSXcs=QeKuwGKii|D9$D9f|Lfv+J=8izv2dToC-MVl
-z%WY7D%ZD1;9Ziww;V!=j<0i`-OOi2DjLt_7_re<6<=yS`mDs&ws=5wzMxs9l`l5#H
-z6w8R<ev=$_9U+tZ&k}$4892i&-WkOl!rOO_n{)&;3U$Xb;Fizu$(br0QfRUXBC1O>
-zBwc8Yo1Abyo2@YWE*}n(6|MM}ol{g-Tw_7r(*-|}_gXUAiM1uOqp~Ybnr&uP$6#>v
-znX<xLiom?P=kYp#i|0Zg-Ym&1IS&kKwy05Pc{0*Ra;UMIgO~{vJCA(nnlRI73FR={
-zcjl0f9OLxrHB2mHC|HwjXciZ$n9^Njhh1gCWV##Krdn98j)-7P{|6~7Iply{qpyV!
-z0v%|RIEb0hDg3&?aap00E4rCz3EWKPf?nZ98FjFyLJxJ%f#qkQw%R;W=SpqcMV_;B
-zZ41eBqM|K_)Zub-Hq(c@%(+qiwf=ooNKwn)suagv+;KlooeCSa%<DXw2fccxbPAhm
-z$D2zhGHv*S(y3967jwuJ@kTD<iumxw0gLPT<-bbUfO*iWl~xGY6;smXPKI4D=r|?;
-zcDTMqK$_hF-r0IjgXJ>l*-ojd+X7zLdUu}sf*zC2_7Ads_>bsyw-<j!7sZ^%cS;7p
-zK`&2S2)7zWV6DI&=1rH_XM58{_C=)EX|gOLpMz`9i&H}Ko+9NwMar_H`r-nnzO|r3
-zRDi=78aoCI*Utxr32#3J{8d~r@`_`al!)IyP^bc;!BB)#`u^--PO-5Pl#NPo2hX>1
-z6=vz&ZVbUDH6#aaN-?=0rnWI)zt_N>GR?m$w&KLybAm8v<Ujj@Yj=kQKzoJ-aGL}k
-z^!IkZG8B_xV!mZEuY)>)q6WT<a696{@nvJ96vqyczk2@U<B_Y$qV@6tBs9+h%bUyM
-z*g{xfWs#Ak4z4W{oB=xM$Y6)Ys5NM|XxE`w(~<*ZQa}E-Yz%V`2keQ!WA=n4Kz#w~
-z?}TWVL!`{Zfv-gi&HIamk!!+Zle%t7qmw~TRg+>|v?nTXi`%xNQ!ed#6RdN*XS%;q
-zZ!pmKf=+yI&(M){PY>bel7Dunz2^O3u8K?tcRn=Ix)7pc;SB=rtQb;q+(GwjRpV*$
-zzC#y2qf644$)tb=(D0|pX@I14r9dPAEq@bo6CjrkJe(#+AUDQa76xU5ygR=Fz6LlI
-zXUFjgyaI4Mjs&=@4uPRNO#+=o@a=<3oh#v6(#J8XLMW1Zvx>7S_!fbkBA$|b*#Q^2
-z9M=Snmr{mv^vI(9v)`omPUb}rl>wRK5FjAo!PNp0GihLp|9P+xdT8H&?Fn*o5FO7U
-z&0hSEO0DDo3AN*ZeLMua%-I(e1%&i3z&P}Aa67im?Prsz6^#eUSdXI7NPc$XihUDH
-z_L2;^=1$ca$@Y#)xxCv*j=;Gp3QkoN)_M)$kE_tgj~|;^oq8`sRYcn=<VwKW4Ol^7
-zcArI|n!#2h+++G`=&l*brvBo#)Q<nR<`<wzE+8{_y(wNk@DJRnUIdpjZKvd_s>KL*
-z-Ah2nP%J;dQUQF!RlH>X#GnIY4&2-vfug)$@jLrpF8PQaE^ogG9!C&{A>x=kl|}x0
-z)n>*f?`xM+JhROImNvpeK6h&@DzM5Gjn$;Y0gm@7=}54L*>t$2-b;3iMsm%iY!W(9
-zT`zR=za`_qS?FWeNX~iw)#D)_x_|8%^prikziKY^LN_c{;_s?P4D12VrER}iChs;B
-z#e)}PjR*Tz#|`+=RZw)J$Rf_>N{uHiIJ0^TYjNO>)u}WX!?=WAEmD_T2tS5owAGSI
-zhnzPSsiA(X$5<52C&O2Ae_4i~RXtn_I9hwE7r&MiU-mkAQ0M;6$EC74Rznfe%m$y~
-zSYm)1ezxl<nd_>sEYpL5C_f5Lpwvs$Xi+`U1sjT*#F+*>x@HKA+VS+7)X~6-cBvAj
-zsn2FezD^s%+?l{5TUspb#+PnGQ39+C%H$Q2(vDBmBn-Ugkf0vxSUm*mKKxvEl>Fwz
-zKi2T^Tit)MycgnuXpJLe-_>u#pHvlWU^n6zy3>l#5Y9O;Q8oK1wvY0{c3gX4IJO*!
-zVK+JPHwU!C<~vlD%MeWyX<hbfg#mTHMs1wVWl(!qZAz%SUv7ggtD!3#x02IZ$WS+4
-zRy!P<YmIq;SYc42ec+r2Z&((1#j^el+QtQs>%4n^pT9JeH&<4J(?f=aLV(;|ICTC5
-zLw}kix`(QbmsW0BZ?VsoKm3c7NzfW`I}RUEN^F-)i?YLI)=DzIAOC{6sb|Q6R^yg1
-zOAu#R2fZjQSm&g+MHY=va)U2FPmudF;CP5PmWt9^z$oXo45ar@`32C6w7QguFOy&G
-zsl~%>f6p;&8E9l5A{7ENHr_at)33YPQx99ul;YZqAHL>*p2oq#vC0jxe)zq*IEfqf
-zKipk6k%r5MEmxvFJ>0fHUMHB@li=KTlXM4;I2;*fad<R$!8W3xN1&N?Tae~f7q<n!
-za5w>ItPpX<;koo8(*`u~-NSLvLYLjGNw)TbO*O*Ca)0#r_!-n=D}HH<pC$z~nv9Wx
-z>)uV$fclqK1z?F#S^%ZgrSB%29eCD}RQ7=fmmi6y)Ei#{>SvE+$lPQZP{-ntL}>kU
-zJJuYHfe*VK=O5KjL{lLk79Z8)zZ~V$i^y_EKz;fa#=@H#GyJ*|iOe1Zx7v!-MA9bO
-zd$zZrK7R?~^4B$sBf-J39S&Lt;5v=rfl}%Upp;dw$4Ba8*w@^+y*`qC*^R%eA2X<*
-znC(YIjjCR&pAMMlWxyPAOpjL_iyj{A{`c(N5DoLAZo;d1PqwZ<<3tP^Sx?>*@yTOw
-z6d?5?{>!mQCDgkC^?IRbuZSOdi#CWj<aqe(-&ZW;C%k-swD+%|a&dyn++c|11Xkm!
-z$i#l5r9IoQbKofd;))Fa+d9i`GR<xV57{ESzD;72b8_2SuRQ4hHp`B89Z#XkqV^Rf
-zs>t}^_Wd2%@^7tZ%pI$GD;v*P{o<Lf2F=$u50EweQeM54)|zZD@TQaOhOJ>1!%j(G
-z00Yr{us3FT7~ZgRH%YYL-$60Q*&8Y#+=ijwW9_#8{T^+vvkzBM=ma~rHIdN-SS1j;
-ztlmjM2~Pt=A>y$^y`4ga+a-M=ULr&7c-iYQvB2;`cvdi*WP1Jp&AH6;7(9^PA=qZK
-zIMpWo0Wz*1pL~6I%<Jx7y$9%EuphI@#tuf!m=)2#!|q_x`Cv62_?OpLzXT+?BG}4U
-zxP4+Yd_5@=M_Fi^Cw_j>&z1~(c|CbX{AC>&o$I8&=HSg7s}AKY53RxMZ7m3jsiPho
-z?6!5i#SLCOQ-`U=H#a%tSto9JBd%nF3p9Cg4jJb(7-=Mu6K;4Lyk9xwB?q@HhfHxA
-z;P)t}lbnQbT*NuaS+V(d^Rt0B^Zsy~xJ(G2SO?tp0=M86{awR5$s1y`^Y<q)KrV;q
-z;Ew$O$%0^NlWrZ+v=8Krz!yR`a75H6;^*ERQbL3IMKI&5z>GJd6jT8}<Kg>OwyK4J
-ztE5}{o7tty^MthI^a6;P@(u}Hm!P9yu`$s!YTzij?)~zIuWQ~f1$<rhAhiV2Ly%IO
-z8b~R|K1gY~&q;DMh{i8A!Sjp*<de(z$(xDHMXY{n@W2mp>fo+MlH>=rfsp<dd7%U6
-zy`^3JI?SfOof=?5dOdv4xom1VHVef(+#U($ME&fE#t&J)?vaARkBND>aVCv>O!Tw%
-zZr2G4)Vnd4T06z?L?gAOW>zSeMThM!w2AC>^lnG;{rJ{fqqKg)Ww&p>RNlLdZL>g>
-z<S4F1EJPncNK7bS0emf3cll@7WrX=6PC1dn6yOyn;;By2t%mhob0RHhCb`u{2m9rp
-zlOEvjPeihX{kZ=`T=-1#LmOA|F2tQOT<iLQT=53)E}J!)eBF+pZHOEQL=<b3DD<Y~
-zcN8VL8Il=?jSaD3-@1(aX!0LddJ_UMlEP)r8t}FMYQ*Oo64{^I@!f{uB@fys|3YVO
-z^X3%qOx}iB^-LNGF;B>opTi*$4rteh(gWJ=nFFYjke)0`w!pRqCmCqc-@7(~)T7CV
-z?K|`}aP@hZT(ED~pDDQhfR$_k2!!%-S`$5Gg~CD%g%Cx$AJM3J6?l4|{de1TD4=wA
-zLm0CH3J2PZMpUbTH~|TIP>iCD;2gW;GG<eC<o7jP<v>&_vJC_x+dB&JtW(2Es>lxx
-z21%?5JOi>`=!8phDD?&nn0*Z+H47!rJ88qJ7T~=eo&b59Ws%wsie^160+?C}`5E5)
-zQ<V^FuB;+W4!vatFcBgsf@NK`;vLm6OHgcxjg7@WoQjOxO<obXig=JQlWsIw2A6BJ
-zPbiL7-Rr>Wx5t+>z`~?4g1SG_({->IfDHq@1fnq<iVT^R#!Y}N0E09}l-L-K^aO#!
-zfQ{2sBtNCfwQGGkDz>tz31X|_VRnbOY~gP5FSxr=j9kgz4_E4INkG5U=85Lu<adsw
-zxCX}33-Sv@ao6eJq=j{i!%v45fU~eAgs%-BO|Cj6Xpl7^XN~&g`Vga}FBoNqhZwGl
-zfht+{LD9iAkUQX?rqeZ=OuC{10u>-Hz`Vu;*Ulg=QtB**Xc4BnfP4&=x=Oc+{BRj}
-zoem!YH^B}mT$B!!PqLa6<E$EEHTlGi{m$r@eCL$%bihWFT@X_z>3Wz`#7pb*L7&UP
-z*k#pR#UNXpa9>7axo5f;TF!{S8lX`D8ikv=iqT}HQ{Ln?<8%ci`5IR-nU~X33UImP
-z3T`}emTg^!pL^#^*1R4^zq>H*jz<oj%~NDhf2(MKn>i~gcpM0W591EdU<kphA%FMa
-zhIfZcs>!Q%eD&RAR=)xFy*pQO1en5EjY~)H<c@ewG@ymx)!;p`daJltJ%xJLR2y+;
-zV?x|Lm(Ak!^=Ni>jknoqR`RmG@eD*TxIepy>TP>zU;f95RcB{r9U<pMz3qtj4cG;@
-z`{g`EmV1$3e2Pqum~S{!El1&g1)8|MQHeTbe%-bj)svki0pJzq>9x(<XY+x-LJ^a*
-z94Ledb~=`)bJRSl&m+C=RM1Bv_4UE--Xu;n)r#p2o#9nvCj=r+0vaB2t-tot{hE`%
-zm*_mHOcylNun8|cH$?T%{?ENUC#|HnEPr@#*|}ZpJr7pAH<E=wwWRl6W$Qio&G%AD
-zMiYaGl9XLGpxf$}tVBksT2B^&^PDaQKlKt43=fEs9sq6aW+f8R%PWB$S=lxeo67Hp
-zct4Ycrfc0+&?}j$N*U8VG<L8pnvYh$PD1-t5VxEPI)L}ck;*DfR9R2=4T6^{L3f5H
-z23X@0@$B<K(W6OZD;rCC;FJ%J*HmNY#plRPc)=v;Qo}iUB^{~l=fl{c9(?3HH@NTG
-z6gay0&HyvWt#;r{+>HNz{!6yA7$1Lsy(+oie^$dfBgFd4VSY0Darg(}xvG{tQtAoL
-zhFA#$mGXT=aaq+8q)#X3As`~SD<In+z8^dGkuRucsA3De2GlFEQ3dnRj2H+~Q0e^i
-ziY&T<@RFu!67U2#@rkCCT;pcWm_xSp+lr7x(#?Pq|9SF7zr-fZmh@>*1}Sy1oaQy(
-za6V72T(zzAI?Q5X`BSr@q5Q3&hi&wQgTjf!E!%Tzh|Os$iZwvAn(F1p|IohtxJGL$
-zp!!7*`h|ufAUIp5lM?64mr`t7^wMI)efID(mVKDPG7s6%AB(<bfo|9~*q8oki3^<z
-zMkV#^$hvGrovh!j5;C_RM_kMguYr3|ZcPoGra68-33PG19$Y(|QBNkiaP7sg5jA9)
-zQ^P+;=F<VO0X^S~jeK&$h1)Og!tRSQoO@|}U=<AmXxy$u_w0E0rF}TGIT}PL*g4iV
-zl7lr}N=Yi518mh90aljU#HJm<TYj@vl1J}D%9<C>M>bHm@rrL%prg%V1Kc*e1*eq_
-z<m@$57WGi9Azymq5>&d|UXR5Zk_i0LNwLxmK6NL!p<_981NOTH&~J3#E8dNhTeg;@
-z=-G;ZOxB#NXNyBJ8Iu5;>F31~eh-Ae!K)Go6iA9v8-kK%e0{H1D#!v<VWAPxnWM*!
-zpX~J@pb~f>qSF%=LWE5^6+Brf0v8bdE`+-xnr4yLulm9omyq%BIM1XTpnic|YHJet
-z<c{7vlaA#Xbr?Le%e_hq*OAi8KJ=Bu+UonNBOzCU^k9!xe1Z_ChtLU%=^>L^O&!J1
-zEqyP85?65uwsdU%Fal(6DI6F+45x<h4Pa1dwSqM>s+)t$kTv~bmn2QT@D5?wL2|bP
-zfBWGy*4&Rrd^85<f0RazmRd7RK-EVXVSn>Tniv>IVObovk0iCJcSLb{B+7w*`6y+$
-zyo)RDeEccI8nD(H64bA^P_i{daN)_Vk%9T{PO3c@mIAF8!5?-Wo;T8yFf}~R<IYyK
-z>>C$nDGbN|ZXI5d;gO*!@C4)qXX_OY`5r>7$64Q5&T_VmBfOW^6;y_}T}pJJ-w&2h
-z1vvxZ58Ot7u3=+uQRm}Mt!;zGNEdU%hIb1ZR)*v-#)IJBes(0i63r)n*y*FA`vtc}
-ziAufvHh4e{%QeO_F%k9$=w12%2(Z1Pq0x@%dF0m)T+^n(9c?jD&x4l<S<h@Vbu{dM
-z0#^ONnN0L9-TnQ*OfN8l?QP@fZTQ&BiIVx`dl4_Y9H%fNy`hpEwd1<W(W5J12R<y0
-zhpWyd)?;v_?xpd0O}pXjrbk6cx}dufT)$0M%E=ukzI&OIl#@6Yc3&Q%D<{KT12x*4
-zEU3qF@`e4hxE@KkFCQRyL{$WknU02S<s`vjgt5p6qiBQ;)u$`wi><-sq{Xf=;1{oO
-zv&xA>>@}R}Yn4j+3@Dwnc`kds`V#Q!10Tg@O4O?Fgh?y~l{*q5$?3=r_sBF6H{ppF
-zL^|DaZ6KFHp}bAjiTL9y(Gn9`>cBl$(uQnQvGMXQT_knzmWjoP>8c=OMXYNdGIl=c
-z0cYDrBwS)N3#}}DM4;OPufMH+8W-5^t`i);4xE5{;QDkSdE1S5wkO2QhhSNFA%<#5
-zi%Zg%hNcq&(F16t?$M%wPW5`dh75G#FWSRO>cPe=6E`+p?Kv)n!mwJpsL(BhtN-&o
-z6%ZSRG>u*5a1c4uL&MKEqH};Z9xdQ)m!1P3@r^6<z2iO;#vRyF>{X(Cu@;8^qGNVm
-zl*25-g8+Cw(JZcq<7YXMfl0So)$}ku%KvLxGX7S{pG9`ZKur?N4n;dJ(%FHzY4OcX
-zlAX>?pq<W5GCaOaS1f>eLAJrRa&kn}8YYT6!*!3=MO&PY`rwTAh;a^t;2;Lc#9cw?
-zm|)yXzV!%(I&m{<g}!di2PRP76F#I9oyHG3Mic<&R^U8cFvC1TC-cX9m0qcZi4U=|
-z@x!dr_)%R)h!jLbqpl(G{q*gZ3PLO2^cv=2zf_Wg5aKczqBdyxFtEA*-GexZxG|XJ
-zYDm5dFTI*FpRUu>uwE1QC!_Jdaq##Z{v^uYWcq4#8H$teW^smL9$`H0ynCYSZTPu#
-z6h;~jg#HUJ0f+VFN^~3~UU$Xm9rBp&a`Lkszt|ZbUQWh4PS*H_71kv@VG6iaa6khi
-zsc~T3IVRk^yA{A@OT!K%Q@{h0sYs@gfFr7$)H(3?om@!;7#13fzpbI>V|0J7F7khR
-zj?zPmp+bqqBSl*UdC|_TQd#Q2;y8F|%qw&{28f?$=RJurDPUlyK`3_muV$5I1(msU
-za;Bf2A<9V?JY}l|x7-Gj1n-khkyUQmC8QZ(r9D9qa{dtr5z-{ftn{)RVyJI5Y%`IC
-zB9&@S4}CBIQXtbngGJ!p{n_&w_~cyRlY1Ax|8bN$8Nw;1A~|^F81P-QK(@dJTx%*}
-z>*UswOgH}5$Kms;^(YQzdsr<rU3+OCG+2CPzjp{n!%)Ec9uQa7eoqYDResSodV$>q
-z2dI`<VE=zdbr6gyh3DAul20Pp?H;`2lW_eyJ&LDS*)E2$`b223WgcA(0`Q^moa~uL
-z&bVn%&{V_#S9kjBpGp@Suk51oaTh{d(^LgG;?tp_Cw`$$M>Btr59SxmRDh)y;>7w-
-zx#3kL$$RnDuz~4<XCMagqC}h)Tt%YoxboBR2^ny8r?52ajkL9hzo1fiu(k6sgF2ap
-zy$#!dmDYXW5zZd47;*c_AMR9$E!<D;xbe+Tqe~*)ofkD)x?H$&%><Y~aL1&R;jU^j
-zS&Y{|C}vFY+5Y=KE~p}n?om(ojsp8^($x>zJ!>BM$r~D33n8Am@G|&KWkV~5XIsR%
-zs><-a@D2~6e~a$#-%H}$VGwmt2RH-45t{rp_1M2R0>Zfx@79S6;Gkj#Cd%L|iq4{W
-zzY=$S5{omhhfNNjz<D<oY8gD!N^P?W7|SvdyiBm&P-sD`sRiDr=4y<!qMfT1`&7p*
-zrEMSJb=L=FotydI>=@%j<M`>(8I1LfVq{xfJj}9a@yQHyCx|}-H@M(_=>D$QDt-Y0
-zPJ^xHZF|W@PrR`U@_Wft4=|&zg3amrb#C!t5Ff3Dw$g~6CA^3%!7;G$ZL9_O9uP2Z
-zxMr3VW^V{jpFo3q%O4r@hy%RrJFSOFu$ybEA}c)A<e{UKAM3r#kn|;@x5zFR&iZU7
-z^#H4?mFO_U0Kx4A497CK6WLETdhnUgQc5&1b7kUE0KcSSZ1AN54?=&V1s-j=Xk1Do
-zIO%3P&Oo?Ps%1}x6f}1>tR*1}rsT3O6|U&vsI=8lMPBMhwonM^p>@W?!BcK6C%?Hl
-z@WPdolOEO6AUh$ef}CsD@OJRw31iDmU>pLAw}Hi4u?}vJrCoL6n_g{O2I*n45PXu7
-zzB)7wyzj|)&*$or^ghHi6y7h?WGf8*5w_I|Ljw%(8F#}9I+2Bla<E5dGB!>(!TmCI
-zz2uQ$b_p6~<&5Fk5IP0%YT#yq6H*1-Uu*bj<feU44#PF-<`_$-Yxp^aY?9|3l&vr}
-zW+=Nn92%)G<ZcM#*9s+UP?)X+q%xHQo*Qc5h@r9H4BP<L#}*FV0!#0wQNEi5D|}NU
-zwh@fkPvQHw%4GBtq~ohNl#-pSR~UTp-t^(m_x7Y&C@v|A-rfxY6D!xrj6xbJ!Hjk6
-zJY*X)uVHmF*o8Luo!ehlBED#Xp)0L`gHID^&==wLSHtRBh?~!ETR{%NL@bAA$h4D%
-z5ZzxUzG(27P%FsvR@&u#a9sKUF6RDQuNWeHp+Ck0O0)o84=%K<AnSol#{ZJp0eW!(
-z8Z(dMSCE)zMaoVBumfDAHxpS$Gj!6Wfm2ZyLJBwlu<?Oi@@z#;_SQLz{o%fwwNYP2
-zn(9^ZRfj1HE5FbsogxEWR5zX?yIrT?ERYKC4B4*O!s{YB1kX|PZ;8J#Isur{*1|&B
-z`UNN1OP=q?Z+(#vcZ%G0+Q8##LN)_UC6Fp@r{I9$BRCBR_BipsztAXNxCShqFty;=
-zFJq|LEK*|GU!KNKeEH6UkPrJRO>zpN&G5pnQo#8D5B+Pt3WK|Kt`!tK$G~4*V1x%1
-z11*Z_y=KN%I{ksUw_-o}%7g#$RoEyXT5$;eutZnhlfNO|t1r&FFE<+GpevC|W$}=7
-z@Tu|SbU&8=BT~``x63&GADJbl7QmK*Z>{KTQCjW@<LhkVtx7hb+staZ^PV7;u^@2`
-zgnLf3$r<ZsqRr4C5AE(2e?p&$KN-ONkcVglP(B84cXV|2UyJ?<ehD)i+cN}~9d2Pk
-zhn*tF`)z(q_h%wk(BMsD3aDB;MP7&XFfSauuhPCCblxB_l$lSFdCtLlrkM7CjhA#u
-z3iF;QLOMk>Fep37G&DQFm?7xc0E67yls}x1&zgQSF@;vq41Y9(V>%%<bzq%!_@b05
-z@R@-y#6W6};861l4pl(97=8-jC$%MECa@k>M~|ZDP_$9XfAUzGAx%iO#^taN(;5E?
-zbg&52$pv_rD$&Gs9fqZBg14FYV`~`O=E2`u(_-$2Fv|mhtLP_aV1VJmqc=lJA-3-X
-z!@%!nI2kAfkg?1zj$ZWHpd}`LVArb<pRIuR44i>dlx3rbohStS0#fT#*ai{2%L{`t
-zQ^yzEI24f`?p>aymhf5O+3*K7io<hmm>P@m;JXRq&yqJBD)4g98)ycs@v~s?C?QWR
-z4f^cz9ysgXfY%cK*@|LaIK1lUc(Mg=xa+&-It<cw_^uxRbT<=%;!ir>AkRCn_S?|B
-zv*d{w4gqQs&O_dYdvY3u%fR0U;|Fo*P85frC#ECtSC!!JS(G<X(@uJXMk9*k-=dkH
-zO`^b>ziX15jhvLq@1$X^Ro`-wog~nWKl(NXK4czz@7pQr<7Bc!dTcFR2q-e8waubl
-z1w+p6%J91l^iz)lbK|~C9WsiHc6eQR2bfWXV0MRD^yC_Z0(=(-ls0?tMff;QBo6%D
-zcVXj7$g85YZ7#2d@P;p`4ng%0^4L%UA<wmKDPFMOkrJ{@T-fG!)(FgT9?X58faiR_
-zb<j?thQk}wxdC;Gt+PnK8-MeC%D@s*<7g4*axG%M%E*_HbT^LvVG1-}?#6~65+X{-
-z9EV?hW5%!6!tl%)zuxSCxG^*Rn?|+ApbHH@=<$Dk;DUCNy)LBr50G8%#v|@!j4c5p
-z@_o=O)uMlXBCoL->9(`*I5=;P?Ig&px%6hQ9QnN`|J1K>2Qj$uo_i_y>OFHHU~#W2
-z(Fdeg#2L0sTx~PcTiRZLoyZv11u>7{wb{i~ZylNKU*QiAD0h+uJ05j^3|@RcT(TOD
-zO?dnLNXcx{+=kz}KW6AD;)Ed3<M1S4a~>R7sE%uT0~r7Az8;VM(M;7;@tcr;??-J~
-zGEu^#(EzK~=IK!ZZWQ{e2Og9~-iP1!dXmZC?a8FquDG<4XVnwoee_Ysn4ADu|H-fo
-z;K+Y!CCTI?JD&Sb@8zlPEugyfpZWzVi2*gqIIxZlNIOZ5#>2|ovRe&*O_GMKp=&CA
-z2rQ!GMCm?G;`-N-P2xIoN*s_K1j|ARyCQ_7L<bnwlhe*XD)|<3)+u;dg`<8-pdk;6
-z6H2WADO={&uP6Nu{MJufX_u@gpz*Mu^{MN~2FKt2zY?xLD2nTjzl9U2;mm0i5K#9H
-zgcDgge-ThLTuiQelxS!&sg0zrnY20X_;C=^Ia|#gP1;aNXSB~wo#0F`(Rvu;4=fW!
-zP)^ehG;Oojm>D~voyW9MP}GBZK7Jg~&%6Bb=DTnA?c4W#yZgTH`}zJ*`^yK4`<=b6
-zMouTcL<p3r=QF_Afw&MLas%Hz`8Tz<T=EI6=qft8+C@M3rf6w93@AZf9J?y~;e73U
-zkBCt{(q<$<z9vTRep8U%&R<50wAlG_($Nn2(lJ3yu%muWi*5x3+M*qUX8+<PT<P)|
-z0Jt4&O7@9BiFgvCUF}@zrZ;Zo(>b@TIgM}tXu#Nl{1CwMS*-X;cb_rHfp%Vrupz7C
-z45Ec;<?Z!?J?n>H@0Yh#dgFH8l2foVj{2;wG*+~Iqwo7!|L8!Ah-mTRkZd@GTm{rO
-zl(X#TTUS6aJKS5MIhhYXdDQ}J6ZT>8ER;#g&uC~UHKFZo`p=<qF{>9pGE&R1lQs^k
-z$?Y)21;x^FZP+Fr9ypG!$A(pEza#sDd_m7O`8u{zWMyJll1&(YXLlTgvpyDX;l)#4
-zpqpOqLn%YXCsSDqKXJ*_Q<bEVnq*j;@L_bJyd=yDh!IQGTM*c9aOCk31p67pr>~xX
-z8X|Y{J5$fc!3r5l?lz||JjxFLw>|#uim>z;0R6(_8$S5YVmB*Nh$O;}*vbDswN=2l
-zXm08$Mym_>SD#Wp8^1|b@ULeQu-!XH45Prz4ocZZSWr9p)KqEq%N7Z^=^5lZ*`Vh0
-z?$~;Dy_2ly9hMeL=6rrGc6O{mTBE9Vh=dDLla|lV#NHVXRGP3SY?8J=Ol@2RJR^_4
-zF_W*(@uFzOkcD|d9-00CS43ZL(i2}{exP0C0idUCcQdxM@cb)c2id|c@zbtZQ^k?<
-z^W)5<>4FwxN(4(knu5n;1WJYWt)FHKH(sH$ce4^w0(9w!j4;y3G_{W`6YuLL9!GbL
-zEHkw7qnBvYNN##FUVksle8LwX30r*#{|(3Z`Dyy+5e+DO+2rO5S;L)eCyiv2I#k@s
-zH%@9=iTYn0ZJ4BG_bk>{E>9L#d;uwDb3#vm*S#==uU3KKPZm4}kaVfl(aPsf(nI$$
-zOb57(m~|m%2)duRL@(d7<hAl!6Phd3A=(X2nAF`KNqZc+Oz0;IRH@o57AjW|BcHyP
-zp|tY;i8i#gIR<ZI-H<eLdaF#{kzOOFfSGioo<%gGNk1k>vt;_c`<aF_{CbSK@2|(f
-z$r%0ce!iFqTRZyu>wT4GK3Iz>`e}?-K6rY5DY`g{F3@1S-ALbmkZI`R|Blg153JAJ
-z<ol<qDlk8`oz6B*d~*UAp!^U_)QO<Knce=dt?VRkpAcAglFa$*)3PuAX1vKV^B&_V
-zF<KDWBA(uR3Qu=OinA_4;*_ev-KDA(rC@V`WsbJVX?0xWznG+dio9g7^1sZ`<)i6^
-zkAxcD{IQXEW(%E)*e1Z7V8!~m=(J3l&LY+nd;C{mdUy@A^)%fzn&Cfzb$1AV)Z4iT
-zv)L&VZIw)Z2p7kG;Q)KUOj4kWs)ut)7+~MOfEt|!r1Rdda>)Z=C3B%>izI<IC+;c0
-zy+tx9ea}n+SgMcvkyHl#{u<Il!^|&A#|8_<g<?fM?;D_@{YVg8gRz)8cZ#7ue;Pvr
-zIBhEX?${#oF5d|g3VamIPsqqCH*?KNETQ3fmI@$JNGAjU=UsjTIoeFnhgp{-zrurv
-zcliz!>pZ?=dJND>#J=1?vQr$7X@7Jsb_5(3%B9gj(y>wOtO^_T<N>MBNZ%UEl#bK)
-z$ISj!gWhUcJ6D}I7y-4pvj@Fy)ZNPmBW?^X{S!=xX7gkYCMsWs4?92KC!7L4-(&Zg
-z&m&cmx3VFR|7Rk~_s&LKXjeUVP*Q->C<%Isk{eEBDmrbhjxnzXoqEQZw+6K4Axl)!
-z!j*f;O1klXDgHdH>O(9`S*brhkg8bpxdTS!N!_F@))y)yoXXx{Y05f%iBb;}Vh*kw
-z1}sXNo~^tdPG`BwYQ0c-HJr)pwPr0)d!2<qN!?Y}hes#7FSAe`_+a1zr|UmuePA!y
-zbAhQCQM2bP>+|?=qUK|!Vrb1ZCs`k8a_vW~uMV{S1E$vFe0?j6;09aG@7Xq`QBNPp
-zQMT$S80|icW}dPi?B;~uVoQ`lJwsU@wy_o9AXm}!3ee}2)bJkG8U4intiEudGkVIu
-zSx*|ctd#2~qJf4N{3Q)xg^9x-l&k<0=?>>J7n*na*Xo_o>;84|W|vF0>ho7tg-e;e
-z9t;J~2!;anFR)O(S;M}cY-4IIMp|3W`aqNG983iV&2>++kQ=OfwlKQ~cX&3k5GbiB
-zVxbz)+O>XW$3dWGHB<2pn_c<LUWa;JE>kgA&29@@#*ECw`Y;h;JSc;C(e9ipmD$m8
-zz`c+~FlDyd`ONM@-8GMeKuL8Hvsa^Doxnn%#0@WC7eNk|P4Kog!+}|-s`>n>ZY6FM
-z^5Rd8G?BQaV+gBF48Mx_5u}xK!pEb`o>U@*XZX}O^+vNOjjm7VZle9sWeM4{bU3<J
-z$YW#+rWub`<$9r5tajx_0>r8X;}ReUDnk+kHIidsHu+UvHANdA`NWDt&SS;7^Qerj
-z;RObf1eEUOJH&-PaUsmDza4KA)q@?VwvAiq7vnhzdJ~O~%a%2K!%UibZd{YflIDCR
-zHxu((UNi*(-(zl;WE=l<hCVrwW3~aX7dY&jNXBF8F`x){=bRlEjAZXRI1U`3Z%&y1
-E52KeC5&!@I
-
diff --git a/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb b/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb
index c0180eb..d3d4e7d 100644
--- a/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb
+++ b/meta-raspberrypi/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb
@@ -25,10 +25,9 @@
 
 SRC_URI = " \
     git://github.com/RPi-Distro/bluez-firmware;branch=master;protocol=https \
-    file://31ad68831357d2019624004f1f0846475671088f.patch \
 "
-SRCREV = "e7fd166981ab4bb9a36c2d1500205a078a35714d"
-PV = "1.2-4+rpt8"
+SRCREV = "9556b08ace2a1735127894642cc8ea6529c04c90"
+PV = "1.2-4+rpt10"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb b/meta-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb
index 653f6e0..0955164 100644
--- a/meta-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb
+++ b/meta-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb
@@ -7,19 +7,19 @@
 
 LICENSE = "GPL-2.0-only & binary-redist-Cypress-rpidistro & Synaptics-rpidistro"
 LIC_FILES_CHKSUM = "\
-    file://debian/config/brcm80211/copyright;md5=b0630b02d90e3da72206c909b6aecc8c \
+    file://debian/copyright;md5=03475efdcf4c53c8f2d8fb4bc1fc6965 \
 "
 # Where these are no common licenses, set NO_GENERIC_LICENSE so that the
 # license files will be copied from the fetched source.
-NO_GENERIC_LICENSE[binary-redist-Cypress-rpidistro] = "debian/config/brcm80211/copyright"
-NO_GENERIC_LICENSE[Synaptics-rpidistro] = "debian/config/brcm80211/copyright"
+NO_GENERIC_LICENSE[binary-redist-Cypress-rpidistro] = "debian/copyright"
+NO_GENERIC_LICENSE[Synaptics-rpidistro] = "debian/copyright"
 LICENSE_FLAGS = "synaptics-killswitch"
 
 SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree;branch=bullseye;protocol=https \
     file://0001-Default-43455-firmware-to-standard-variant.patch \
 "
-SRCREV = "541e5a05d152e7e6f0d9be45622e4a3741e51c02"
-PV = "20210315-3+rpt7"
+SRCREV = "2c3a8701193ba23d0ef85cdf0d0c9e47baf03dfc"
+PV = "20230210-5_bpo11+1"
 S = "${WORKDIR}/git"
 
 inherit allarch
@@ -30,7 +30,7 @@
 do_install() {
     install -d ${D}${nonarch_base_libdir}/firmware/brcm ${D}${nonarch_base_libdir}/firmware/cypress
 
-    cp debian/config/brcm80211/copyright ${D}${nonarch_base_libdir}/firmware/copyright.firmware-nonfree-rpidistro
+    cp debian/copyright ${D}${nonarch_base_libdir}/firmware/copyright.firmware-nonfree-rpidistro
 
     for fw in \
             brcmfmac43430-sdio \
@@ -44,22 +44,13 @@
     cp -R --no-dereference --preserve=mode,links -v debian/config/brcm80211/cypress/* ${D}${nonarch_base_libdir}/firmware/cypress/
 
     rm ${D}${nonarch_base_libdir}/firmware/cypress/README.txt
-
-    # add compat links. Fixes errors like
-    # brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-compute-module.txt failed with error -2
-    ln -s brcmfmac43455-sdio.txt ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.txt
-    # brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin failed with error -2
-    ln -s brcmfmac43455-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
-    # brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin failed with error -2
-    ln -s brcmfmac43430-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin
-    # brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.bin failed with error -2
-    ln -s brcmfmac43430-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.bin
 }
 
 PACKAGES = "\
     ${PN}-bcm43430 \
     ${PN}-bcm43436 \
     ${PN}-bcm43436s \
+    ${PN}-bcm43439 \
     ${PN}-bcm43455 \
     ${PN}-bcm43456 \
     ${PN}-license \
@@ -68,6 +59,7 @@
 LICENSE:${PN}-bcm43430 = "binary-redist-Cypress-rpidistro"
 LICENSE:${PN}-bcm43436 = "Synaptics-rpidistro"
 LICENSE:${PN}-bcm43436s = "Synaptics-rpidistro"
+LICENSE:${PN}-bcm43439 = "Synaptics-rpidistro"
 LICENSE:${PN}-bcm43455 = "binary-redist-Cypress-rpidistro"
 LICENSE:${PN}-bcm43456 = "Synaptics-rpidistro"
 LICENSE:${PN}-license = "GPL-2.0-only"
@@ -79,6 +71,7 @@
 "
 FILES:${PN}-bcm43436 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43436-*"
 FILES:${PN}-bcm43436s = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43436s*"
+FILES:${PN}-bcm43439 = "${nonarch_base_libdir}/firmware/cypress/43439A0-7.95.49.00.combined"
 FILES:${PN}-bcm43455 = " \
     ${nonarch_base_libdir}/firmware/brcm/brcmfmac43455* \
     ${nonarch_base_libdir}/firmware/cypress/cyfmac43455-sdio* \
@@ -89,18 +82,21 @@
 RDEPENDS:${PN}-bcm43430 += "${PN}-license"
 RDEPENDS:${PN}-bcm43436 += "${PN}-license"
 RDEPENDS:${PN}-bcm43436s += "${PN}-license"
+RDEPENDS:${PN}-bcm43439 += "${PN}-license"
 RDEPENDS:${PN}-bcm43455 += "${PN}-license"
 RDEPENDS:${PN}-bcm43456 += "${PN}-license"
 
 RCONFLICTS:${PN}-bcm43430 = "linux-firmware-raspbian-bcm43430"
 RCONFLICTS:${PN}-bcm43436 = "linux-firmware-bcm43436"
 RCONFLICTS:${PN}-bcm43436s = "linux-firmware-bcm43436s"
+RCONFLICTS:${PN}-bcm43439 = "linux-firmware-bcm43439"
 RCONFLICTS:${PN}-bcm43455 = "linux-firmware-bcm43455"
 RCONFLICTS:${PN}-bcm43456 = "linux-firmware-bcm43456"
 
 RREPLACES:${PN}-bcm43430 = "linux-firmware-bcm43430"
 RREPLACES:${PN}-bcm43436 = "linux-firmware-bcm43436"
 RREPLACES:${PN}-bcm43436s = "linux-firmware-bcm43436s"
+RREPLACES:${PN}-bcm43439 = "linux-firmware-bcm43439"
 RREPLACES:${PN}-bcm43455 = "linux-firmware-bcm43455"
 RREPLACES:${PN}-bcm43456 = "linux-firmware-bcm43456"
 
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
index d326ca2..b81e169 100644
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
@@ -1,9 +1,9 @@
-LINUX_VERSION ?= "6.1.38"
+LINUX_VERSION ?= "6.1.54"
 LINUX_RPI_BRANCH ?= "rpi-6.1.y"
 LINUX_RPI_KMETA_BRANCH ?= "yocto-6.1"
 
-SRCREV_machine = "31dbf25138831241f31f7eee835b83a607eaa179"
-SRCREV_meta = "2eaed50911009f9ddbc74460093e17b22ef7daa0"
+SRCREV_machine = "df4d584e66a660195422ca2b7ce1d68d1181f2a2"
+SRCREV_meta = "e7488dd3776c76fb7d94cc92ae7a2216423f8ece"
 
 KMETA = "kernel-meta"
 
diff --git a/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.8.1.bb b/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.8.1.bb
deleted file mode 100644
index aa7bafa..0000000
--- a/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.8.1.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "identity, multifactor authentication (OTP), authorization, audit"
-DESCRIPTION = "privacyIDEA is an open solution for strong two-factor authentication like OTP tokens, SMS, smartphones or SSH keys. Using privacyIDEA you can enhance your existing applications like local login (PAM, Windows Credential Provider), VPN, remote access, SSH connections, access to web sites or web portals with a second factor during authentication. Thus boosting the security of your existing applications."
-
-HOMEPAGE = "http://www.privacyidea.org/"
-LICENSE = "AGPL-3.0-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c0acfa7a8a03b718abee9135bc1a1c55"
-
-PYPI_PACKAGE = "privacyIDEA"
-SRC_URI[sha256sum] = "e0dae763575c6300ccaebe6dcc8d3f119cb3e25c11302b1e78a96a12e8ab2b38"
-
-inherit pypi setuptools3
-
-do_install:append () {
-    rm -fr ${D}${libdir}/${PYTHON_DIR}/site-packages/tests
-}
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM:${PN} = "--system privacyidea"
-USERADD_PARAM:${PN} = "--system -g privacyidea -o -r -d /opt/${BPN}  \
-    --shell /bin/false privacyidea"
-
-FILES:${PN} += " ${prefix}/etc/privacyidea/* ${prefix}/lib/privacyidea/*"
-
-RDEPENDS:${PN} = " bash perl freeradius-mysql freeradius-utils"
-RDEPENDS:${PN} += "python3 python3-alembic python3-babel python3-bcrypt"
-RDEPENDS:${PN} += "python3-beautifulsoup4 python3-cbor2 python3-certifi python3-cffi python3-chardet"
-RDEPENDS:${PN} += "python3-click python3-configobj python3-croniter python3-cryptography python3-defusedxml"
-RDEPENDS:${PN} += "python3-ecdsa  python3-flask python3-flask-babel python3-flask-migrate"
-RDEPENDS:${PN} += "python3-flask-script python3-flask-sqlalchemy python3-flask-versioned"
-RDEPENDS:${PN} += "python3-future python3-httplib2 python3-huey python3-idna python3-ipaddress"
-RDEPENDS:${PN} += "python3-itsdangerous python3-jinja2 python3-ldap python3-lxml python3-mako"
-RDEPENDS:${PN} += "python3-markupsafe python3-netaddr python3-oauth2client python3-passlib python3-pillow"
-RDEPENDS:${PN} += "python3-pyasn1 python3-pyasn1-modules python3-pycparser python3-pyjwt python3-pymysql"
-RDEPENDS:${PN} += "python3-pyopenssl python3-pyrad python3-dateutil python3-editor python3-gnupg"
-RDEPENDS:${PN} += "python3-pytz python3-pyyaml python3-qrcode python3-redis python3-requests python3-rsa"
-RDEPENDS:${PN} += "python3-smpplib python3-soupsieve python3-segno python3-importlib-metadata"
-RDEPENDS:${PN} += "python3-sqlalchemy python3-urllib3 python3-werkzeug"
diff --git a/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.9.bb b/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.9.bb
new file mode 100644
index 0000000..2f0ac3a
--- /dev/null
+++ b/meta-security/dynamic-layers/meta-python/recipes-security/mfa/python3-privacyidea_3.9.bb
@@ -0,0 +1,37 @@
+SUMMARY = "identity, multifactor authentication (OTP), authorization, audit"
+DESCRIPTION = "privacyIDEA is an open solution for strong two-factor authentication like OTP tokens, SMS, smartphones or SSH keys. Using privacyIDEA you can enhance your existing applications like local login (PAM, Windows Credential Provider), VPN, remote access, SSH connections, access to web sites or web portals with a second factor during authentication. Thus boosting the security of your existing applications."
+
+HOMEPAGE = "http://www.privacyidea.org/"
+LICENSE = "AGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c0acfa7a8a03b718abee9135bc1a1c55"
+
+PYPI_PACKAGE = "privacyIDEA"
+SRC_URI[sha256sum] = "1dce02789ee0a639c5518ab95e254823ca1b47aeb1aae754ec11c70d4248f38e"
+
+inherit pypi setuptools3
+
+do_install:append () {
+    rm -fr ${D}${libdir}/${PYTHON_DIR}/site-packages/tests
+}
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system privacyidea"
+USERADD_PARAM:${PN} = "--system -g privacyidea -o -r -d /opt/${BPN}  \
+    --shell /bin/false privacyidea"
+
+FILES:${PN} += " ${prefix}/etc/privacyidea/* ${prefix}/lib/privacyidea/*"
+
+RDEPENDS:${PN} = " bash perl freeradius-mysql freeradius-utils"
+RDEPENDS:${PN} += "python3 python3-alembic python3-babel python3-bcrypt"
+RDEPENDS:${PN} += "python3-beautifulsoup4 python3-cbor2 python3-certifi python3-cffi python3-chardet"
+RDEPENDS:${PN} += "python3-click python3-configobj python3-croniter python3-cryptography python3-defusedxml"
+RDEPENDS:${PN} += "python3-ecdsa  python3-flask python3-flask-babel python3-flask-migrate"
+RDEPENDS:${PN} += "python3-flask-script python3-flask-sqlalchemy python3-flask-versioned"
+RDEPENDS:${PN} += "python3-future python3-httplib2 python3-huey python3-idna python3-ipaddress"
+RDEPENDS:${PN} += "python3-itsdangerous python3-jinja2 python3-ldap python3-lxml python3-mako"
+RDEPENDS:${PN} += "python3-markupsafe python3-netaddr python3-oauth2client python3-passlib python3-pillow"
+RDEPENDS:${PN} += "python3-pyasn1 python3-pyasn1-modules python3-pycparser python3-pyjwt python3-pymysql"
+RDEPENDS:${PN} += "python3-pyopenssl python3-pyrad python3-dateutil python3-editor python3-gnupg"
+RDEPENDS:${PN} += "python3-pytz python3-pyyaml python3-qrcode python3-redis python3-requests python3-rsa"
+RDEPENDS:${PN} += "python3-smpplib python3-soupsieve python3-segno python3-importlib-metadata"
+RDEPENDS:${PN} += "python3-sqlalchemy python3-urllib3 python3-werkzeug"
diff --git a/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.1.bb b/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.1.bb
deleted file mode 100644
index 9fa9d3b..0000000
--- a/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.1.bb
+++ /dev/null
@@ -1,159 +0,0 @@
-SUMMARY = "system security services daemon"
-DESCRIPTION = "SSSD is a system security services daemon"
-HOMEPAGE = "https://pagure.io/SSSD/sssd/"
-SECTION = "base"
-LICENSE = "GPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-DEPENDS = "acl attr cyrus-sasl libtdb ding-libs libpam c-ares krb5 autoconf-archive"
-DEPENDS:append = " libldb dbus libtalloc libpcre2 glib-2.0 popt e2fsprogs libtevent"
-DEPENDS:append = " openldap bind p11-kit jansson softhsm openssl libunistring"
-
-DEPENDS:append:libc-musl = " musl-nscd"
-
-# If no crypto has been selected, default to DEPEND on nss, since that's what
-# sssd will pick if no active choice is made during configure
-DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'nss', '', \
-               bb.utils.contains('PACKAGECONFIG', 'crypto', '', 'nss', d), d)}"
-
-SRC_URI = "https://github.com/SSSD/sssd/releases/download/${PV}/${BP}.tar.gz \
-           file://sssd.conf \
-           file://volatiles.99_sssd \
-           file://no_gen.patch \
-           file://fix_gid.patch \
-           file://drop_ntpdate_chk.patch \
-           file://fix-ldblibdir.patch \
-           file://musl_fixup.patch \
-           file://0001-sssctl-add-error-analyzer.patch \
-           "
-
-SRC_URI[sha256sum] = "97703d38159994a869aad1c852de4582c76f189cf044f51e15ba26e1e4b75298"
-
-UPSTREAM_CHECK_URI = "https://github.com/SSSD/${BPN}/releases"
-
-inherit autotools pkgconfig gettext python3-dir features_check systemd
-
-REQUIRED_DISTRO_FEATURES = "pam"
-
-SSSD_UID ?= "root"
-SSSD_GID ?= "root"
-
-CACHED_CONFIGUREVARS = "ac_cv_member_struct_ldap_conncb_lc_arg=no \
-    ac_cv_prog_HAVE_PYTHON3=${PYTHON_DIR} \
-    "
-
-PACKAGECONFIG ?="nss autofs sudo infopipe"
-PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
-PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}"
-
-PACKAGECONFIG[autofs] = "--with-autofs, --with-autofs=no"
-PACKAGECONFIG[crypto] = ", , libcrypto"
-PACKAGECONFIG[curl] = "--with-kcm, --without-kcm, curl jansson"
-PACKAGECONFIG[infopipe] = "--with-infopipe, --with-infopipe=no, "
-PACKAGECONFIG[manpages] = "--with-manpages, --with-manpages=no, libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-PACKAGECONFIG[nl] = "--with-libnl, --with-libnl=no, libnl"
-PACKAGECONFIG[nss] = ", ,nss,"
-PACKAGECONFIG[oidc_child] = "--with-oidc-child, --without-oidc-child"
-PACKAGECONFIG[python3] = "--with-python3-bindings, --without-python3-bindings"
-PACKAGECONFIG[samba] = "--with-samba, --with-samba=no, samba"
-PACKAGECONFIG[selinux] = "--with-selinux, --with-selinux=no --with-semanage=no, libselinux"
-PACKAGECONFIG[ssh] = "--with-ssh, --with-ssh=no, "
-PACKAGECONFIG[sudo] = "--with-sudo, --with-sudo=no, "
-PACKAGECONFIG[systemd] = "--with-initscript=systemd,--with-initscript=sysv,,python3-systemd"
-
-EXTRA_OECONF += " \
-    --disable-cifs-idmap-plugin \
-    --without-nfsv4-idmapd-plugin \
-    --without-ipa-getkeytab \
-    --without-python2-bindings \
-    --enable-pammoddir=${base_libdir}/security \
-    --without-python2-bindings \
-    --with-xml-catalog-path=${STAGING_ETCDIR_NATIVE}/xml/catalog \
-    --with-pid-path=/run \
-"
-
-do_configure:prepend() {
-    mkdir -p ${AUTOTOOLS_AUXDIR}/build
-    cp ${STAGING_DATADIR_NATIVE}/gettext/config.rpath ${AUTOTOOLS_AUXDIR}/build/
-
-    # additional_libdir  defaults to /usr/lib so replace with staging_libdir globally
-    sed -i -e "s#\$additional_libdir#\${STAGING_LIBDIR}#" ${S}/src/build_macros.m4
-}
-
-do_compile:prepend () {
-     echo '#define NSUPDATE_PATH "${bindir}"' >> ${B}/config.h
-}
-do_install () {
-    oe_runmake install  DESTDIR="${D}"
-    rmdir --ignore-fail-on-non-empty "${D}/${bindir}"
-
-    install -d ${D}/${sysconfdir}/${BPN}
-    install -d ${D}/${PYTHON_SITEPACKAGES_DIR}
-    mv ${D}/${BPN}  ${D}/${PYTHON_SITEPACKAGES_DIR}
-
-    install -m 600 ${WORKDIR}/${BPN}.conf ${D}/${sysconfdir}/${BPN}
-
-    # /var/log/sssd needs to be created in runtime. Use rmdir to catch if
-    # upstream stops creating /var/log/sssd, or adds something else in
-    # /var/log.
-    rmdir ${D}${localstatedir}/log/${BPN} ${D}${localstatedir}/log
-    rmdir --ignore-fail-on-non-empty ${D}${localstatedir}
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        install -d ${D}${sysconfdir}/tmpfiles.d
-        echo "d /var/log/sssd 0750 - - - -" > ${D}${sysconfdir}/tmpfiles.d/sss.conf
-    fi
-
-    if [ "${@bb.utils.filter('DISTRO_FEATURES', 'sysvinit', d)}" ]; then
-        install -d ${D}${sysconfdir}/default/volatiles
-        echo "d ${SSSD_UID}:${SSSD_GID} 0755 ${localstatedir}/log/${BPN} none" > ${D}${sysconfdir}/default/volatiles/99_${BPN}
-    fi
-
-    # Remove /run as it is created on startup
-    rm -rf ${D}/run
-
-#    rm -fr ${D}/sssd
-    rm -f ${D}${systemd_system_unitdir}/sssd-secrets.*
-}
-
-pkg_postinst_ontarget:${PN} () {
-if [ -e /etc/init.d/populate-volatile.sh ] ; then
-    ${sysconfdir}/init.d/populate-volatile.sh update
-fi
-    chown ${SSSD_UID}:${SSSD_GID} ${sysconfdir}/${BPN}/${BPN}.conf
-}
-
-CONFFILES:${PN} = "${sysconfdir}/${BPN}/${BPN}.conf"
-
-INITSCRIPT_NAME = "sssd"
-INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
-SYSTEMD_SERVICE:${PN} = " \
-    ${@bb.utils.contains('PACKAGECONFIG', 'autofs', 'sssd-autofs.service sssd-autofs.socket', '', d)} \
-    ${@bb.utils.contains('PACKAGECONFIG', 'curl', 'sssd-kcm.service sssd-kcm.socket', '', d)} \
-    ${@bb.utils.contains('PACKAGECONFIG', 'infopipe', 'sssd-ifp.service ', '', d)} \
-    ${@bb.utils.contains('PACKAGECONFIG', 'ssh', 'sssd-ssh.service sssd-ssh.socket', '', d)} \
-    ${@bb.utils.contains('PACKAGECONFIG', 'sudo', 'sssd-sudo.service sssd-sudo.socket', '', d)} \
-    sssd-nss.service \
-    sssd-nss.socket \
-    sssd-pam-priv.socket \
-    sssd-pam.service \
-    sssd-pam.socket \
-    sssd.service \
-"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-PACKAGES =+ "libsss-sudo"
-ALLOW_EMPTY:libsss-sudo = "1"
-
-FILES:${PN} += "${base_libdir}/security/pam_sss*.so  \
-                ${nonarch_libdir}/tmpfiles.d \
-                ${datadir}/dbus-1/system.d/*.conf \
-                ${datadir}/dbus-1/system-services/*.service \
-                ${libdir}/krb5/* \
-                ${libdir}/ldb/* \
-                ${PYTHON_SITEPACKAGES_DIR}/sssd \
-                "
-
-FILES:libsss-sudo = "${libdir}/libsss_sudo.so"
-
-RDEPENDS:${PN} = "bind bind-utils dbus libldb libpam libsss-sudo"
diff --git a/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.2.bb b/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.2.bb
new file mode 100644
index 0000000..d61471c
--- /dev/null
+++ b/meta-security/dynamic-layers/networking-layer/recipes-security/sssd/sssd_2.9.2.bb
@@ -0,0 +1,159 @@
+SUMMARY = "system security services daemon"
+DESCRIPTION = "SSSD is a system security services daemon"
+HOMEPAGE = "https://pagure.io/SSSD/sssd/"
+SECTION = "base"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "acl attr cyrus-sasl libtdb ding-libs libpam c-ares krb5 autoconf-archive"
+DEPENDS:append = " libldb dbus libtalloc libpcre2 glib-2.0 popt e2fsprogs libtevent"
+DEPENDS:append = " openldap bind p11-kit jansson softhsm openssl libunistring"
+
+DEPENDS:append:libc-musl = " musl-nscd"
+
+# If no crypto has been selected, default to DEPEND on nss, since that's what
+# sssd will pick if no active choice is made during configure
+DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'nss', '', \
+               bb.utils.contains('PACKAGECONFIG', 'crypto', '', 'nss', d), d)}"
+
+SRC_URI = "https://github.com/SSSD/sssd/releases/download/${PV}/${BP}.tar.gz \
+           file://sssd.conf \
+           file://volatiles.99_sssd \
+           file://no_gen.patch \
+           file://fix_gid.patch \
+           file://drop_ntpdate_chk.patch \
+           file://fix-ldblibdir.patch \
+           file://musl_fixup.patch \
+           file://0001-sssctl-add-error-analyzer.patch \
+           "
+SRC_URI[sha256sum] = "827bc65d64132410e6dd3df003f04829d60387ec30e72b2d4e22d93bb6f762ba"
+
+UPSTREAM_CHECK_URI = "https://github.com/SSSD/${BPN}/releases"
+
+inherit autotools pkgconfig gettext python3-dir features_check systemd
+
+REQUIRED_DISTRO_FEATURES = "pam"
+
+SSSD_UID ?= "root"
+SSSD_GID ?= "root"
+
+CACHED_CONFIGUREVARS = "ac_cv_member_struct_ldap_conncb_lc_arg=no \
+    ac_cv_prog_HAVE_PYTHON3=${PYTHON_DIR} \
+    "
+
+PACKAGECONFIG ?="nss autofs sudo infopipe"
+PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
+PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}"
+
+PACKAGECONFIG[autofs] = "--with-autofs, --with-autofs=no"
+PACKAGECONFIG[crypto] = ", , libcrypto"
+PACKAGECONFIG[curl] = "--with-kcm, --without-kcm, curl jansson"
+PACKAGECONFIG[infopipe] = "--with-infopipe, --with-infopipe=no, "
+PACKAGECONFIG[manpages] = "--with-manpages, --with-manpages=no, libxslt-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+PACKAGECONFIG[nl] = "--with-libnl, --with-libnl=no, libnl"
+PACKAGECONFIG[nss] = ", ,nss,"
+PACKAGECONFIG[oidc_child] = "--with-oidc-child, --without-oidc-child"
+PACKAGECONFIG[python3] = "--with-python3-bindings, --without-python3-bindings"
+PACKAGECONFIG[samba] = "--with-samba, --with-samba=no, samba"
+PACKAGECONFIG[selinux] = "--with-selinux, --with-selinux=no --with-semanage=no, libselinux"
+PACKAGECONFIG[ssh] = "--with-ssh, --with-ssh=no, "
+PACKAGECONFIG[sudo] = "--with-sudo, --with-sudo=no, "
+PACKAGECONFIG[systemd] = "--with-initscript=systemd,--with-initscript=sysv,,python3-systemd"
+
+EXTRA_OECONF += " \
+    --disable-cifs-idmap-plugin \
+    --without-nfsv4-idmapd-plugin \
+    --without-ipa-getkeytab \
+    --without-python2-bindings \
+    --enable-pammoddir=${base_libdir}/security \
+    --without-python2-bindings \
+    --with-xml-catalog-path=${STAGING_ETCDIR_NATIVE}/xml/catalog \
+    --with-pid-path=/run \
+"
+
+do_configure:prepend() {
+    mkdir -p ${AUTOTOOLS_AUXDIR}/build
+    cp ${STAGING_DATADIR_NATIVE}/gettext/config.rpath ${AUTOTOOLS_AUXDIR}/build/
+
+    # additional_libdir  defaults to /usr/lib so replace with staging_libdir globally
+    sed -i -e "s#\$additional_libdir#\${STAGING_LIBDIR}#" ${S}/src/build_macros.m4
+}
+
+do_compile:prepend () {
+     sed -i -e "s/__useconds_t/useconds_t/g" ${S}/src/tools/tools_mc_util.c
+     echo '#define NSUPDATE_PATH "${bindir}"' >> ${B}/config.h
+}
+do_install () {
+    oe_runmake install  DESTDIR="${D}"
+    rmdir --ignore-fail-on-non-empty "${D}/${bindir}"
+
+    install -d ${D}/${sysconfdir}/${BPN}
+    install -d ${D}/${PYTHON_SITEPACKAGES_DIR}
+    mv ${D}/${BPN}  ${D}/${PYTHON_SITEPACKAGES_DIR}
+
+    install -m 600 ${WORKDIR}/${BPN}.conf ${D}/${sysconfdir}/${BPN}
+
+    # /var/log/sssd needs to be created in runtime. Use rmdir to catch if
+    # upstream stops creating /var/log/sssd, or adds something else in
+    # /var/log.
+    rmdir ${D}${localstatedir}/log/${BPN} ${D}${localstatedir}/log
+    rmdir --ignore-fail-on-non-empty ${D}${localstatedir}
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${sysconfdir}/tmpfiles.d
+        echo "d /var/log/sssd 0750 - - - -" > ${D}${sysconfdir}/tmpfiles.d/sss.conf
+    fi
+
+    if [ "${@bb.utils.filter('DISTRO_FEATURES', 'sysvinit', d)}" ]; then
+        install -d ${D}${sysconfdir}/default/volatiles
+        echo "d ${SSSD_UID}:${SSSD_GID} 0755 ${localstatedir}/log/${BPN} none" > ${D}${sysconfdir}/default/volatiles/99_${BPN}
+    fi
+
+    # Remove /run as it is created on startup
+    rm -rf ${D}/run
+
+#    rm -fr ${D}/sssd
+    rm -f ${D}${systemd_system_unitdir}/sssd-secrets.*
+}
+
+pkg_postinst_ontarget:${PN} () {
+if [ -e /etc/init.d/populate-volatile.sh ] ; then
+    ${sysconfdir}/init.d/populate-volatile.sh update
+fi
+    chown ${SSSD_UID}:${SSSD_GID} ${sysconfdir}/${BPN}/${BPN}.conf
+}
+
+CONFFILES:${PN} = "${sysconfdir}/${BPN}/${BPN}.conf"
+
+INITSCRIPT_NAME = "sssd"
+INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
+SYSTEMD_SERVICE:${PN} = " \
+    ${@bb.utils.contains('PACKAGECONFIG', 'autofs', 'sssd-autofs.service sssd-autofs.socket', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'curl', 'sssd-kcm.service sssd-kcm.socket', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'infopipe', 'sssd-ifp.service ', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'ssh', 'sssd-ssh.service sssd-ssh.socket', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'sudo', 'sssd-sudo.service sssd-sudo.socket', '', d)} \
+    sssd-nss.service \
+    sssd-nss.socket \
+    sssd-pam-priv.socket \
+    sssd-pam.service \
+    sssd-pam.socket \
+    sssd.service \
+"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+PACKAGES =+ "libsss-sudo"
+ALLOW_EMPTY:libsss-sudo = "1"
+
+FILES:${PN} += "${base_libdir}/security/pam_sss*.so  \
+                ${nonarch_libdir}/tmpfiles.d \
+                ${datadir}/dbus-1/system.d/*.conf \
+                ${datadir}/dbus-1/system-services/*.service \
+                ${libdir}/krb5/* \
+                ${libdir}/ldb/* \
+                ${PYTHON_SITEPACKAGES_DIR}/sssd \
+                "
+
+FILES:libsss-sudo = "${libdir}/libsss_sudo.so"
+
+RDEPENDS:${PN} = "bind bind-utils dbus libldb libpam libsss-sudo"
diff --git a/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.0.bb b/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.0.bb
deleted file mode 100644
index da86c47..0000000
--- a/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.0.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "SWTPM - Software TPM Emulator"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=fe8092c832b71ef20dfe4c6d3decb3a8"
-SECTION = "apps"
-
-# expect-native, socat-native, coreutils-native and net-tools-native are reportedly only required for the tests
-DEPENDS = "libtasn1 coreutils-native expect-native socat-native glib-2.0 net-tools-native libtpm json-glib"
-
-SRCREV = "2ae7b019370760e17f4f2675195a91ca53950eda"
-SRC_URI = "git://github.com/stefanberger/swtpm.git;branch=master;protocol=https \
-           "
-PE = "1"
-
-S = "${WORKDIR}/git"
-
-PARALLEL_MAKE = ""
-inherit autotools pkgconfig perlnative
-
-TSS_USER="tss"
-TSS_GROUP="tss"
-
-PACKAGECONFIG ?= "openssl gnutls"
-PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
-PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)}"
-PACKAGECONFIG += "${@bb.utils.contains('BBFILE_COLLECTIONS', 'filesystems-layer', 'cuse', '', d)}"
-PACKAGECONFIG[openssl] = "--with-openssl, --without-openssl, openssl"
-# expect, bash, tpm2-pkcs11-tools (tpm2_ptool), tpmtool and certtool is
-# used by swtpm-create-tpmca (the last two is provided by gnutls)
-# gnutls is required by: swtpm-create-tpmca, swtpm-localca and swtpm_cert
-PACKAGECONFIG[gnutls] = "--with-gnutls, --without-gnutls, gnutls-native gnutls, gnutls-bin expect bash tpm2-pkcs11-tools"
-PACKAGECONFIG[selinux] = "--with-selinux, --without-selinux, libselinux"
-PACKAGECONFIG[cuse] = "--with-cuse, --without-cuse, fuse"
-PACKAGECONFIG[seccomp] = "--with-seccomp, --without-seccomp, libseccomp"
-
-EXTRA_OECONF += "--with-tss-user=${TSS_USER} --with-tss-group=${TSS_GROUP}"
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM:${PN} = "--system ${TSS_USER}"
-USERADD_PARAM:${PN} = "--system -g ${TSS_GROUP} --home-dir / \
-    --no-create-home  --shell /bin/false ${BPN}"
-
-
-PACKAGE_BEFORE_PN = "${PN}-cuse"
-FILES:${PN}-cuse = "${bindir}/swtpm_cuse"
-
-INSANE_SKIP:${PN}   += "dev-so"
-
-RDEPENDS:${PN} = "libtpm"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.1.bb b/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.1.bb
new file mode 100644
index 0000000..7a538da
--- /dev/null
+++ b/meta-security/meta-tpm/recipes-tpm/swtpm/swtpm_0.8.1.bb
@@ -0,0 +1,49 @@
+SUMMARY = "SWTPM - Software TPM Emulator"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fe8092c832b71ef20dfe4c6d3decb3a8"
+SECTION = "apps"
+
+# expect-native, socat-native, coreutils-native and net-tools-native are reportedly only required for the tests
+DEPENDS = "libtasn1 coreutils-native expect-native socat-native glib-2.0 net-tools-native libtpm json-glib"
+
+SRCREV = "d2849a9f5ced70438d67036693438344b47b4161"
+SRC_URI = "git://github.com/stefanberger/swtpm.git;branch=stable-0.8;protocol=https"
+PE = "1"
+
+S = "${WORKDIR}/git"
+
+PARALLEL_MAKE = ""
+inherit autotools pkgconfig perlnative
+
+TSS_USER="tss"
+TSS_GROUP="tss"
+
+PACKAGECONFIG ?= "openssl gnutls"
+PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
+PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)}"
+PACKAGECONFIG += "${@bb.utils.contains('BBFILE_COLLECTIONS', 'filesystems-layer', 'cuse', '', d)}"
+PACKAGECONFIG[openssl] = "--with-openssl, --without-openssl, openssl"
+# expect, bash, tpm2-pkcs11-tools (tpm2_ptool), tpmtool and certtool is
+# used by swtpm-create-tpmca (the last two is provided by gnutls)
+# gnutls is required by: swtpm-create-tpmca, swtpm-localca and swtpm_cert
+PACKAGECONFIG[gnutls] = "--with-gnutls, --without-gnutls, gnutls-native gnutls, gnutls-bin expect bash tpm2-pkcs11-tools"
+PACKAGECONFIG[selinux] = "--with-selinux, --without-selinux, libselinux"
+PACKAGECONFIG[cuse] = "--with-cuse, --without-cuse, fuse"
+PACKAGECONFIG[seccomp] = "--with-seccomp, --without-seccomp, libseccomp"
+
+EXTRA_OECONF += "--with-tss-user=${TSS_USER} --with-tss-group=${TSS_GROUP}"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system ${TSS_USER}"
+USERADD_PARAM:${PN} = "--system -g ${TSS_GROUP} --home-dir / \
+    --no-create-home  --shell /bin/false ${BPN}"
+
+
+PACKAGE_BEFORE_PN = "${PN}-cuse"
+FILES:${PN}-cuse = "${bindir}/swtpm_cuse"
+
+INSANE_SKIP:${PN}   += "dev-so"
+
+RDEPENDS:${PN} = "libtpm"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-security/meta-tpm/recipes-tpm1/hoth/libhoth_git.bb b/meta-security/meta-tpm/recipes-tpm1/hoth/libhoth_git.bb
index 0485afc..5c7305c 100644
--- a/meta-security/meta-tpm/recipes-tpm1/hoth/libhoth_git.bb
+++ b/meta-security/meta-tpm/recipes-tpm1/hoth/libhoth_git.bb
@@ -7,7 +7,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
 SRC_URI = "git://github.com/google/libhoth;protocol=https;branch=main"
-SRCREV = "769296220dc88df33f4726aa11e39e049257b3c4"
+SRCREV = "0e3eec6937d35c602ce497444eda05f3c465b5a8"
 
 DEPENDS += "libusb1"
 
diff --git a/meta-security/recipes-compliance/lynis/lynis_3.0.8.bb b/meta-security/recipes-compliance/lynis/lynis_3.0.8.bb
deleted file mode 100644
index 0a49812..0000000
--- a/meta-security/recipes-compliance/lynis/lynis_3.0.8.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2017 Armin Kuster  <akuster808@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "Lynis is a free and open source security and auditing tool."
-HOMEDIR = "https://cisofy.com/"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3edd6782854304fd11da4975ab9799c1"
-
-SRC_URI = "https://cisofy.com/files/${BPN}-${PV}.tar.gz \
-           file://0001-osdetection-add-OpenEmbedded-and-Poky.patch \
-          "
-
-SRC_URI[sha256sum] = "98373a4cc9d0471ab9bebb249e442fcf94b6bf6d4e9c6fc0b22bca1506646c63"
-
-S = "${WORKDIR}/${BPN}"
-
-inherit autotools-brokensep
-
-do_compile[noexec] = "1"
-do_configure[noexec] = "1"
-
-do_install () {
-	install -d ${D}/${bindir}
-	install -d ${D}/${sysconfdir}/lynis
-	install -m 555 ${S}/lynis ${D}/${bindir}
-
-	install -d ${D}/${datadir}/lynis/db
-	install -d ${D}/${datadir}/lynis/plugins
-	install -d ${D}/${datadir}/lynis/include
-	install -d ${D}/${datadir}/lynis/extras
-
-	cp -r ${S}/db/* ${D}/${datadir}/lynis/db/.
-	cp -r ${S}/plugins/*  ${D}/${datadir}/lynis/plugins/.
-	cp -r ${S}/include/* ${D}/${datadir}/lynis/include/.
-	cp -r ${S}/extras/*  ${D}/${datadir}/lynis/extras/.
-        cp ${S}/*.prf ${D}/${sysconfdir}/lynis
-}
-
-FILES:${PN} += "${sysconfdir}/developer.prf ${sysconfdir}/default.prf"
-FILES:${PN}-doc += "lynis.8 FAQ README CHANGELOG.md CONTRIBUTIONS.md CONTRIBUTORS.md" 
-
-RDEPENDS:${PN} += "procps findutils"
diff --git a/meta-security/recipes-compliance/lynis/lynis_3.0.9.bb b/meta-security/recipes-compliance/lynis/lynis_3.0.9.bb
new file mode 100644
index 0000000..8c796c0
--- /dev/null
+++ b/meta-security/recipes-compliance/lynis/lynis_3.0.9.bb
@@ -0,0 +1,42 @@
+# Copyright (C) 2017 Armin Kuster  <akuster808@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Lynis is a free and open source security and auditing tool."
+HOMEDIR = "https://cisofy.com/"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3edd6782854304fd11da4975ab9799c1"
+
+SRC_URI = "https://cisofy.com/files/${BPN}-${PV}.tar.gz \
+           file://0001-osdetection-add-OpenEmbedded-and-Poky.patch \
+          "
+
+SRC_URI[sha256sum] = "f394df7d20391fb76e975ae88f3eba1da05ac9c4945e2c7f709326e185e17025"
+
+S = "${WORKDIR}/${BPN}"
+
+inherit autotools-brokensep
+
+do_compile[noexec] = "1"
+do_configure[noexec] = "1"
+
+do_install () {
+	install -d ${D}/${bindir}
+	install -d ${D}/${sysconfdir}/lynis
+	install -m 555 ${S}/lynis ${D}/${bindir}
+
+	install -d ${D}/${datadir}/lynis/db
+	install -d ${D}/${datadir}/lynis/plugins
+	install -d ${D}/${datadir}/lynis/include
+	install -d ${D}/${datadir}/lynis/extras
+
+	cp -r ${S}/db/* ${D}/${datadir}/lynis/db/.
+	cp -r ${S}/plugins/*  ${D}/${datadir}/lynis/plugins/.
+	cp -r ${S}/include/* ${D}/${datadir}/lynis/include/.
+	cp -r ${S}/extras/*  ${D}/${datadir}/lynis/extras/.
+        cp ${S}/*.prf ${D}/${sysconfdir}/lynis
+}
+
+FILES:${PN} += "${sysconfdir}/developer.prf ${sysconfdir}/default.prf"
+FILES:${PN}-doc += "lynis.8 FAQ README CHANGELOG.md CONTRIBUTIONS.md CONTRIBUTORS.md" 
+
+RDEPENDS:${PN} += "procps findutils"
diff --git a/meta-security/recipes-compliance/openscap/files/0003-CMakeLists.txt-make-2-variables-configurable.patch b/meta-security/recipes-compliance/openscap/files/0003-CMakeLists.txt-make-2-variables-configurable.patch
deleted file mode 100644
index 953b0d9..0000000
--- a/meta-security/recipes-compliance/openscap/files/0003-CMakeLists.txt-make-2-variables-configurable.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From f99c3f1f516a84d33794f8e3da59adea1a12ef54 Mon Sep 17 00:00:00 2001
-From: Kai Kang <kai.kang@windriver.com>
-Date: Tue, 20 Jun 2023 22:42:51 +0800
-Subject: [PATCH] CMakeLists.txt: make 2 variables configurable
-
-Variables PREFERRED_PYTHON_PATH and PYTHON3_PATH are set with
-${PYTHON_EXECUTABLE}. For cross compile, ${PYTHON_EXECUTABLE} may point
-to other path rather than standard dir such as /usr/bin. Then the
-generated library file contains such path which should NOT. Update to
-make variables PREFERRED_PYTHON_PATH and PYTHON3_PATH configurable to
-avoid such issue.
-
-Upstream-Status: Submitted [https://github.com/OpenSCAP/openscap/pull/1990]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
----
- CMakeLists.txt | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 5db014e77..74628cdd4 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -125,8 +125,8 @@ endif()
- find_package(PythonInterp 3)
- find_package(PythonLibs 3)
- 
--set(PREFERRED_PYTHON_PATH "${PYTHON_EXECUTABLE}")
--set(PYTHON3_PATH "${PYTHON_EXECUTABLE}")
-+set(PREFERRED_PYTHON_PATH "${PYTHON_EXECUTABLE}" CACHE PATH "Path to preferred Python")
-+set(PYTHON3_PATH "${PYTHON_EXECUTABLE}" CACHE PATH "Path to Python3")
- 
- find_package(RPM)
- if(RPM_FOUND)
--- 
-2.34.1
-
diff --git a/meta-security/recipes-compliance/openscap/openscap_1.3.8.bb b/meta-security/recipes-compliance/openscap/openscap_1.3.8.bb
deleted file mode 100644
index 5abd5a6..0000000
--- a/meta-security/recipes-compliance/openscap/openscap_1.3.8.bb
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (C) 2017  - 2023 Armin Kuster  <akuster808@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMARRY = "NIST Certified SCAP 1.2 toolkit"
-HOME_URL = "https://www.open-scap.org/tools/openscap-base/"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-LICENSE = "LGPL-2.1-only"
-
-DEPENDS = "dbus acl bzip2 pkgconfig gconf procps curl libxml2 libxslt libcap swig libpcre  xmlsec1"
-DEPENDS:class-native = "pkgconfig-native swig-native curl-native libxml2-native libxslt-native libcap-native libpcre-native xmlsec1-native"
-
-#Jun 22th, 2023
-SRCREV = "a81c66d9bc36612dd1ca83a8c959a59e172eb4b9"
-SRC_URI = "git://github.com/OpenSCAP/openscap.git;branch=maint-1.3;protocol=https \
-           file://0003-CMakeLists.txt-make-2-variables-configurable.patch \
-           "
-
-S = "${WORKDIR}/git"
-
-inherit cmake pkgconfig python3native python3targetconfig perlnative systemd
-
-PACKAGECONFIG ?= "python3 rpm perl gcrypt ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
-PACKAGECONFIG[python3] = "-DENABLE_PYTHON3=ON, ,python3, python3"
-PACKAGECONFIG[perl] = "-DENABLE_PERL=ON, ,perl, perl"
-PACKAGECONFIG[rpm] = "-DENABLE_OSCAP_UTIL_AS_RPM=ON, ,rpm, rpm"
-PACKAGECONFIG[gcrypt] = "-DWITH_CRYPTO=gcrypt, ,libgcrypt"
-PACKAGECONFIG[nss3] = "-DWITH_CRYPTO=nss3, ,nss"
-PACKAGECONFIG[selinux] = ", ,libselinux"
-PACKAGECONFIG[remdediate_service] = "-DENABLE_OSCAP_REMEDIATE_SERVICE=ON,-DENABLE_OSCAP_REMEDIATE_SERVICE=NO,"
-
-EXTRA_OECMAKE += "-DENABLE_PROBES_LINUX=ON -DENABLE_PROBES_UNIX=ON \
-                  -DENABLE_PROBES_SOLARIS=OFF -DENABLE_PROBES_INDEPENDENT=ON \
-                  -DENABLE_OSCAP_UTIL=ON -DENABLE_OSCAP_UTIL_SSH=ON \
-                  -DENABLE_OSCAP_UTIL_DOCKER=OFF -DENABLE_OSCAP_UTIL_CHROOT=OFF \
-                  -DENABLE_OSCAP_UTIL_PODMAN=OFF -DENABLE_OSCAP_UTIL_VM=OFF \
-                  -DENABLE_PROBES_WINDOWS=OFF -DENABLE_VALGRIND=OFF \
-                  -DENABLE_SCE=ON -DENABLE_MITRE=OFF -DENABLE_TESTS=OFF \
-                  -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_SKIP_RPATH=ON \
-                  -DPREFERRED_PYTHON_PATH=${bindir}/python3 \
-                  -DPYTHON3_PATH=${bindir}/python3 \
-                  "
-
-STAGING_OSCAP_DIR = "${TMPDIR}/work-shared/${MACHINE}/oscap-source"
-STAGING_OSCAP_BUILDDIR = "${TMPDIR}/work-shared/openscap/oscap-build-artifacts"
-
-do_configure:append:class-native () {
-    sed -i 's:OSCAP_DEFAULT_CPE_PATH.*$:OSCAP_DEFAULT_CPE_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/cpe":' ${B}/config.h
-    sed -i 's:OSCAP_DEFAULT_SCHEMA_PATH.*$:OSCAP_DEFAULT_SCHEMA_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/schemas":' ${B}/config.h
-    sed -i 's:OSCAP_DEFAULT_XSLT_PATH.*$:OSCAP_DEFAULT_XSLT_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/xsl":' ${B}/config.h
-}
-
-do_install:append () {
-    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
-        if ${@bb.utils.contains('PACKAGECONFIG','remdediate_service','true','false',d)}; then
-            install -D -m 0644 ${B}/oscap-remediate.service ${D}${systemd_system_unitdir}/oscap-remediate.service
-        fi
-    fi
-}
-
-do_install:class-native[cleandirs] += " ${STAGING_OSCAP_BUILDDIR}"
-do_install:append:class-native () {
-    oscapdir=${STAGING_OSCAP_BUILDDIR}/${datadir_native}
-    install -d $oscapdir
-    cp -a ${D}/${STAGING_DATADIR_NATIVE}/openscap $oscapdir
-}
-
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG','remdediate_service', 'oscap-remediate.service', '',d)}"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-
-FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
-
-
-RDEPENDS:${PN} = "libxml2 python3-core libgcc bash"
-RDEPENDS:${PN}-class-target = "libxml2 python3-core libgcc bash os-release"
-BBCLASSEXTEND = "native"
diff --git a/meta-security/recipes-compliance/openscap/openscap_1.3.9.bb b/meta-security/recipes-compliance/openscap/openscap_1.3.9.bb
new file mode 100644
index 0000000..97261df
--- /dev/null
+++ b/meta-security/recipes-compliance/openscap/openscap_1.3.9.bb
@@ -0,0 +1,76 @@
+# Copyright (C) 2017  - 2023 Armin Kuster  <akuster808@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMARRY = "NIST Certified SCAP 1.2 toolkit"
+HOME_URL = "https://www.open-scap.org/tools/openscap-base/"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+LICENSE = "LGPL-2.1-only"
+
+DEPENDS = "dbus acl bzip2 pkgconfig gconf procps curl libxml2 libxslt libcap swig libpcre  xmlsec1"
+DEPENDS:class-native = "pkgconfig-native swig-native curl-native libxml2-native libxslt-native libcap-native libpcre-native xmlsec1-native"
+
+#Jun 22th, 2023
+SRCREV = "9b3e7563575f7e5b419f8a09999b40f30e3e7c29"
+SRC_URI = "git://github.com/OpenSCAP/openscap.git;branch=maint-1.3;protocol=https"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig python3native python3targetconfig perlnative systemd
+
+PACKAGECONFIG ?= "python3 rpm perl gcrypt ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}"
+PACKAGECONFIG[python3] = "-DENABLE_PYTHON3=ON, ,python3, python3"
+PACKAGECONFIG[perl] = "-DENABLE_PERL=ON, ,perl, perl"
+PACKAGECONFIG[rpm] = "-DENABLE_OSCAP_UTIL_AS_RPM=ON, ,rpm, rpm"
+PACKAGECONFIG[gcrypt] = "-DWITH_CRYPTO=gcrypt, ,libgcrypt"
+PACKAGECONFIG[nss3] = "-DWITH_CRYPTO=nss3, ,nss"
+PACKAGECONFIG[selinux] = ", ,libselinux"
+PACKAGECONFIG[remdediate_service] = "-DENABLE_OSCAP_REMEDIATE_SERVICE=ON,-DENABLE_OSCAP_REMEDIATE_SERVICE=NO,"
+
+EXTRA_OECMAKE += "-DENABLE_PROBES_LINUX=ON -DENABLE_PROBES_UNIX=ON \
+                  -DENABLE_PROBES_SOLARIS=OFF -DENABLE_PROBES_INDEPENDENT=ON \
+                  -DENABLE_OSCAP_UTIL=ON -DENABLE_OSCAP_UTIL_SSH=ON \
+                  -DENABLE_OSCAP_UTIL_DOCKER=OFF -DENABLE_OSCAP_UTIL_CHROOT=OFF \
+                  -DENABLE_OSCAP_UTIL_PODMAN=OFF -DENABLE_OSCAP_UTIL_VM=OFF \
+                  -DENABLE_PROBES_WINDOWS=OFF -DENABLE_VALGRIND=OFF \
+                  -DENABLE_SCE=ON -DENABLE_MITRE=OFF -DENABLE_TESTS=OFF \
+                  -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_SKIP_RPATH=ON \
+                  -DPREFERRED_PYTHON_PATH=${bindir}/python3 \
+                  -DPYTHON3_PATH=${bindir}/python3 \
+                  "
+
+STAGING_OSCAP_DIR = "${TMPDIR}/work-shared/${MACHINE}/oscap-source"
+STAGING_OSCAP_BUILDDIR = "${TMPDIR}/work-shared/openscap/oscap-build-artifacts"
+
+do_configure:append:class-native () {
+    sed -i 's:OSCAP_DEFAULT_CPE_PATH.*$:OSCAP_DEFAULT_CPE_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/cpe":' ${B}/config.h
+    sed -i 's:OSCAP_DEFAULT_SCHEMA_PATH.*$:OSCAP_DEFAULT_SCHEMA_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/schemas":' ${B}/config.h
+    sed -i 's:OSCAP_DEFAULT_XSLT_PATH.*$:OSCAP_DEFAULT_XSLT_PATH "${STAGING_OSCAP_BUILDDIR}${datadir_native}/openscap/xsl":' ${B}/config.h
+}
+
+do_install:append () {
+    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+        if ${@bb.utils.contains('PACKAGECONFIG','remdediate_service','true','false',d)}; then
+            install -D -m 0644 ${B}/oscap-remediate.service ${D}${systemd_system_unitdir}/oscap-remediate.service
+        fi
+    fi
+}
+
+do_install:class-native[cleandirs] += " ${STAGING_OSCAP_BUILDDIR}"
+do_install:append:class-native () {
+    oscapdir=${STAGING_OSCAP_BUILDDIR}/${datadir_native}
+    install -d $oscapdir
+    cp -a ${D}/${STAGING_DATADIR_NATIVE}/openscap $oscapdir
+}
+
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG','remdediate_service', 'oscap-remediate.service', '',d)}"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+
+FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
+
+
+RDEPENDS:${PN} = "libxml2 python3-core libgcc bash"
+RDEPENDS:${PN}-class-target = "libxml2 python3-core libgcc bash os-release"
+BBCLASSEXTEND = "native"
diff --git a/meta-security/recipes-compliance/scap-security-guide/files/0002-scap-security-guide-Add-Poky-support.patch b/meta-security/recipes-compliance/scap-security-guide/files/0002-scap-security-guide-Add-Poky-support.patch
deleted file mode 100644
index 1639264..0000000
--- a/meta-security/recipes-compliance/scap-security-guide/files/0002-scap-security-guide-Add-Poky-support.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 2be977a60c944a54594d5786b2d8869ed72a9a06 Mon Sep 17 00:00:00 2001
-From: Armin Kuster <akuster808@gmail.com>
-Date: Wed, 5 Jul 2023 12:57:52 -0400
-Subject: [PATCH 2/2] scap-security-guide: Add Poky support
-
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-Upstream-Status: Pending
-Waiting to see if OE changes get merged.
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-
----
- products/openembedded/product.yml           |  6 ++++
- shared/checks/oval/installed_OS_is_poky.xml | 33 +++++++++++++++++++++
- 2 files changed, 39 insertions(+)
- create mode 100644 shared/checks/oval/installed_OS_is_poky.xml
-
-diff --git a/products/openembedded/product.yml b/products/openembedded/product.yml
-index debf6870ef..d63479d5d3 100644
---- a/products/openembedded/product.yml
-+++ b/products/openembedded/product.yml
-@@ -17,3 +17,9 @@ cpes:
-       name: "cpe:/o:openembedded:nodistro:"
-       title: "OpenEmbedded nodistro"
-       check_id: installed_OS_is_openembedded
-+
-+  - poky:
-+      name: "cpe:/o:openembedded:poky:"
-+      title: "OpenEmbedded Poky reference distribution"
-+      check_id: installed_OS_is_poky
-+
-diff --git a/shared/checks/oval/installed_OS_is_poky.xml b/shared/checks/oval/installed_OS_is_poky.xml
-new file mode 100644
-index 0000000000..b8805cf31b
---- /dev/null
-+++ b/shared/checks/oval/installed_OS_is_poky.xml
-@@ -0,0 +1,33 @@
-+<def-group>
-+  <definition class="inventory" id="installed_OS_is_poky" version="1">
-+    <metadata>
-+      <title>Poky</title>
-+      <affected family="unix">
-+        <platform>multi_platform_all</platform>
-+      </affected>
-+      <description>The operating system installed is a Poky based System</description>
-+    </metadata>
-+    <criteria comment="System is Poky based distribution" operator="AND">
-+      <extend_definition comment="Installed OS is part of the Unix family" definition_ref="installed_OS_is_part_of_Unix_family" />
-+      <criterion comment="Poky based distro" test_ref="test_os_poky" />
-+      <criterion comment="Poky based distribution is installed" test_ref="test_poky" />
-+    </criteria>
-+  </definition>
-+
-+  <unix:file_test check="all" check_existence="all_exist" comment="/etc/os-release exists" id="test_os_poky" version="1">
-+    <unix:object object_ref="obj_os_poky" />
-+  </unix:file_test>
-+  <unix:file_object comment="check /etc/os-release file" id="obj_os_poky" version="1">
-+    <unix:filepath>/etc/os-release</unix:filepath>
-+  </unix:file_object>
-+
-+  <ind:textfilecontent54_test check="all" check_existence="at_least_one_exists" comment="Check OpenEmbedded" id="test_poky" version="1">
-+    <ind:object object_ref="obj_poky" />
-+  </ind:textfilecontent54_test>
-+  <ind:textfilecontent54_object id="obj_poky" version="1" comment="Check Poky">
-+    <ind:filepath>/etc/os-release</ind:filepath>
-+    <ind:pattern operation="pattern match">^ID=poky$</ind:pattern>
-+    <ind:instance datatype="int">1</ind:instance>
-+  </ind:textfilecontent54_object>
-+
-+</def-group>
--- 
-2.34.1
-
diff --git a/meta-security/recipes-compliance/scap-security-guide/scap-security-guide_0.1.69.bb b/meta-security/recipes-compliance/scap-security-guide/scap-security-guide_0.1.69.bb
index ac839de..23637a5 100644
--- a/meta-security/recipes-compliance/scap-security-guide/scap-security-guide_0.1.69.bb
+++ b/meta-security/recipes-compliance/scap-security-guide/scap-security-guide_0.1.69.bb
@@ -6,11 +6,10 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=9bfa86579213cb4c6adaffface6b2820"
 LICENSE = "BSD-3-Clause"
 
-SRCREV = "d09e81ae00509a9be4b01359166cfbece06e47f4"
+SRCREV = "da283b9a360f2f42ad642c0c9b08b061501bc667"
 SRC_URI = "git://github.com/ComplianceAsCode/content.git;branch=master;protocol=https \
            file://run_eval.sh \
            file://run-ptest \
-           file://0002-scap-security-guide-Add-Poky-support.patch \
            "
 
 
diff --git a/meta-security/recipes-ids/suricata/files/fixup.patch b/meta-security/recipes-ids/suricata/files/fixup.patch
index 4646aa9..0b2ae7c 100644
--- a/meta-security/recipes-ids/suricata/files/fixup.patch
+++ b/meta-security/recipes-ids/suricata/files/fixup.patch
@@ -4,27 +4,27 @@
 
 Signed-off-by: Armin Kuster <akuster808@gmail.com>
 
-Index: suricata-6.0.2/Makefile.am
+Index: suricata-7.0.0/Makefile.in
 ===================================================================
---- suricata-6.0.2.orig/Makefile.am
-+++ suricata-6.0.2/Makefile.am
-@@ -7,7 +7,7 @@ EXTRA_DIST = ChangeLog COPYING LICENSE s
-              $(SURICATA_UPDATE_DIR) \
- 	     lua \
- 	     acsite.m4
+--- suricata-7.0.0.orig/Makefile.in
++++ suricata-7.0.0/Makefile.in
+@@ -424,7 +424,7 @@ EXTRA_DIST = ChangeLog COPYING LICENSE s
+ 	     acsite.m4 \
+ 	     scripts/generate-images.sh
+ 
 -SUBDIRS = $(HTP_DIR) rust src qa rules doc contrib etc python ebpf \
 +SUBDIRS = $(HTP_DIR) src qa rules doc contrib etc python ebpf \
            $(SURICATA_UPDATE_DIR)
  
  CLEANFILES = stamp-h[0-9]*
-Index: suricata-6.0.2/Makefile.in
+Index: suricata-7.0.0/Makefile.am
 ===================================================================
---- suricata-6.0.2.orig/Makefile.in
-+++ suricata-6.0.2/Makefile.in
-@@ -426,7 +426,7 @@ EXTRA_DIST = ChangeLog COPYING LICENSE s
+--- suricata-7.0.0.orig/Makefile.am
++++ suricata-7.0.0/Makefile.am
+@@ -8,7 +8,7 @@ EXTRA_DIST = ChangeLog COPYING LICENSE s
  	     lua \
- 	     acsite.m4
- 
+ 	     acsite.m4 \
+ 	     scripts/generate-images.sh
 -SUBDIRS = $(HTP_DIR) rust src qa rules doc contrib etc python ebpf \
 +SUBDIRS = $(HTP_DIR) src qa rules doc contrib etc python ebpf \
            $(SURICATA_UPDATE_DIR)
diff --git a/meta-security/recipes-ids/suricata/libhtp_0.5.43.bb b/meta-security/recipes-ids/suricata/libhtp_0.5.43.bb
deleted file mode 100644
index 5825419..0000000
--- a/meta-security/recipes-ids/suricata/libhtp_0.5.43.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "LibHTP is a security-aware parser for the HTTP protocol and the related bits and pieces."
-
-require suricata.inc
-
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=2;md5=596ab7963a1a0e5198e5a1c4aa621843"
-
-SRC_URI = "git://github.com/OISF/libhtp.git;protocol=https;branch=0.5.x"
-SRCREV = "be0063a6138f795fc1af76cc5340bcb11d3b0b87"
-
-DEPENDS = "zlib"
-
-inherit autotools-brokensep pkgconfig
-
-CFLAGS += "-D_DEFAULT_SOURCE"
-
-#S = "${WORKDIR}/suricata-${VER}/${BPN}"
-
-S = "${WORKDIR}/git"
-
-do_configure () {
-    cd ${S}
-    ./autogen.sh
-    oe_runconf
-}
-
-RDEPENDS:${PN} += "zlib"
-
diff --git a/meta-security/recipes-ids/suricata/libhtp_0.5.45.bb b/meta-security/recipes-ids/suricata/libhtp_0.5.45.bb
new file mode 100644
index 0000000..cc8285c
--- /dev/null
+++ b/meta-security/recipes-ids/suricata/libhtp_0.5.45.bb
@@ -0,0 +1,27 @@
+SUMMARY = "LibHTP is a security-aware parser for the HTTP protocol and the related bits and pieces."
+
+require suricata.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=2;md5=596ab7963a1a0e5198e5a1c4aa621843"
+
+SRC_URI = "git://github.com/OISF/libhtp.git;protocol=https;branch=0.5.x"
+SRCREV = "8bdfe7b9d04e5e948c8fbaa7472e14d884cc00af"
+
+DEPENDS = "zlib"
+
+inherit autotools-brokensep pkgconfig
+
+CFLAGS += "-D_DEFAULT_SOURCE"
+
+#S = "${WORKDIR}/suricata-${VER}/${BPN}"
+
+S = "${WORKDIR}/git"
+
+do_configure () {
+    cd ${S}
+    ./autogen.sh
+    oe_runconf
+}
+
+RDEPENDS:${PN} += "zlib"
+
diff --git a/meta-security/recipes-ids/suricata/suricata-crates.inc b/meta-security/recipes-ids/suricata/suricata-crates.inc
index 535f53c..386d8d1 100644
--- a/meta-security/recipes-ids/suricata/suricata-crates.inc
+++ b/meta-security/recipes-ids/suricata/suricata-crates.inc
@@ -1,295 +1,759 @@
-# ak did manually
-SRC_URI += " \
-    crate://crates.io/autocfg/1.0.1;name=autocfg-1.0.1 \
-    crate://crates.io/brotli/3.3.0;name=brotli-3.0.3 \
-    crate://crates.io/crc/1.8.1;name=crc-1.8.1 \
-    crate://crates.io/der-parser/0.5.0;name=der-parser-0.5.0 \
-    crate://crates.io/der-parser/4.1.0;name=der-parser-4.1.0 \
-    crate://crates.io/der-parser/3.0.4;name=der-parser-3.0.4 \
-    crate://crates.io/flate2/1.0.20;name=flate2-1.0.20 \
-    crate://crates.io/ipsec-parser/0.5.0;name=ipsec-parser-0.5.0 \
-    crate://crates.io/kerberos-parser/0.5.0;name=kerberos-parser-0.5.0 \
-    crate://crates.io/md5/0.7.0;name=md5-0.7.0 \
-    crate://crates.io/memchr/2.3.4;name=memchr-2.3.4 \
-    crate://crates.io/nom/5.1.1;name=nom-5.1.1 \
-    crate://crates.io/ntp-parser/0.4.0;name=ntp-parser-0.5.0 \
-    crate://crates.io/num/0.2.1;name=num-0.2.1 \
-    crate://crates.io/num-derive/0.2.5;name=num-derive-0.2.5 \
-    crate://crates.io/snmp-parser/0.6.0;name=snmp-parser-0.6.0 \
-    crate://crates.io/tls-parser/0.9.4;name=tls-parser-0.9.4 \
-    crate://crates.io/uuid/0.8.2;name=uuid-0.8.2 \
-    crate://crates.io/widestring/0.4.3;name=widestring-0.4.3 \
-    crate://crates.io/x509-parser/0.6.5;name=x509-parser-0.6.5 \
-    crate://crates.io/build_const/0.2.1;name=build_const-0.2.1 \
-    crate://crates.io/der-oid-macro/0.2.0;name=der-oid-macro-0.2.0 \
-    crate://crates.io/proc-macro-hack/0.5.19;name=proc-macro-hack-0.5.19 \
-    crate://crates.io/rusticata-macros/2.1.0;name=rusticata-macros-2.1.0 \
-    crate://crates.io/miniz_oxide/0.4.4;name=miniz_oxide-0.4.4 \
-    crate://crates.io/num-bigint/0.2.6;name=num-bigint-0.2.6 \
-    crate://crates.io/num-bigint/0.3.1;name=num-bigint-0.3.1 \
-    crate://crates.io/num-complex/0.2.4;name=num-complex-0.2.4 \
-    crate://crates.io/num-integer/0.1.44;name=num-integer-0.1.44 \
-    crate://crates.io/num-iter/0.1.42;name=num-iter-0.1.42 \
-    crate://crates.io/num-rational/0.2.4;name=num-rational-0.2.4 \
-    crate://crates.io/num-traits/0.2.14;name=num-traits-0.2.14 \
-    crate://crates.io/num-traits/0.1.43;name=num-traits-0.1.43 \
-    crate://crates.io/enum_primitive/0.1.1;name=enum_primitive-0.1.1 \
-    crate://crates.io/phf/0.8.0;name=phf-0.8.0 \
-    crate://crates.io/phf_codegen/0.8.0;name=phf_codegen-0.8.0 \
-    crate://crates.io/phf_generator/0.8.0;name=phf_generator-0.8.0 \
-    crate://crates.io/base64/0.11.0;name=base64-0.11.0 \
-    crate://crates.io/time/0.1.44;name=time-0.1.44 \
-    crate://crates.io/wasi/0.10.0+wasi-snapshot-preview1;name=wasi-0.10.0+wasi-snapshot-preview1 \
-    crate://crates.io/lexical-core/0.6.8;name=lexical-core-0.6.8 \
-"
-
-# test case support
-SRC_URI += " \
-    crate://crates.io/test-case/1.0.1;name=test-case-1.0.1 \
-"
-
 # Autogenerated with 'bitbake -c update_crates suricata'
-# from vendor/base64/Cargo.lock
-SRC_URI += " \
-    crate://crates.io/arrayvec/0.4.11;name=arrayvec-0.4.11 \
-    crate://crates.io/atty/0.2.12;name=atty-0.2.12 \
-    crate://crates.io/autocfg/0.1.4;name=autocfg-0.1.4 \
-    crate://crates.io/bitflags/1.1.0;name=bitflags-1.1.0 \
-    crate://crates.io/bstr/0.2.1;name=bstr-0.2.1 \
-    crate://crates.io/byteorder/1.3.2;name=byteorder-1.3.2 \
-    crate://crates.io/cast/0.2.2;name=cast-0.2.2 \
-    crate://crates.io/cfg-if/0.1.9;name=cfg-if-0.1.9 \
-    crate://crates.io/clap/2.33.0;name=clap-2.33.0 \
-    crate://crates.io/cloudabi/0.0.3;name=cloudabi-0.0.3 \
-    crate://crates.io/criterion/0.3.0;name=criterion-0.3.0 \
-    crate://crates.io/criterion-plot/0.4.0;name=criterion-plot-0.4.0 \
-    crate://crates.io/crossbeam-deque/0.6.3;name=crossbeam-deque-0.6.3 \
-    crate://crates.io/crossbeam-epoch/0.7.1;name=crossbeam-epoch-0.7.1 \
-    crate://crates.io/crossbeam-queue/0.1.2;name=crossbeam-queue-0.1.2 \
-    crate://crates.io/crossbeam-utils/0.6.5;name=crossbeam-utils-0.6.5 \
-    crate://crates.io/csv/1.1.1;name=csv-1.1.1 \
-    crate://crates.io/csv-core/0.1.6;name=csv-core-0.1.6 \
-    crate://crates.io/doc-comment/0.3.1;name=doc-comment-0.3.1 \
-    crate://crates.io/either/1.5.2;name=either-1.5.2 \
-    crate://crates.io/fuchsia-cprng/0.1.1;name=fuchsia-cprng-0.1.1 \
-    crate://crates.io/getrandom/0.1.13;name=getrandom-0.1.13 \
-    crate://crates.io/itertools/0.8.0;name=itertools-0.8.0 \
-    crate://crates.io/itoa/0.4.4;name=itoa-0.4.4 \
-    crate://crates.io/lazy_static/1.3.0;name=lazy_static-1.3.0 \
-    crate://crates.io/libc/0.2.65;name=libc-0.2.65 \
-    crate://crates.io/memchr/2.2.1;name=memchr-2.2.1 \
-    crate://crates.io/memoffset/0.2.1;name=memoffset-0.2.1 \
-    crate://crates.io/nodrop/0.1.13;name=nodrop-0.1.13 \
-    crate://crates.io/num-traits/0.2.8;name=num-traits-0.2.8 \
-    crate://crates.io/num_cpus/1.10.1;name=num_cpus-1.10.1 \
-    crate://crates.io/proc-macro2/0.4.30;name=proc-macro2-0.4.30 \
-    crate://crates.io/quote/0.6.13;name=quote-0.6.13 \
-    crate://crates.io/rand/0.6.5;name=rand-0.6.5 \
-    crate://crates.io/rand_chacha/0.1.1;name=rand_chacha-0.1.1 \
-    crate://crates.io/rand_core/0.3.1;name=rand_core-0.3.1 \
-    crate://crates.io/rand_core/0.4.0;name=rand_core-0.4.0 \
-    crate://crates.io/rand_core/0.5.1;name=rand_core-0.5.1 \
-    crate://crates.io/rand_hc/0.1.0;name=rand_hc-0.1.0 \
-    crate://crates.io/rand_isaac/0.1.1;name=rand_isaac-0.1.1 \
-    crate://crates.io/rand_jitter/0.1.4;name=rand_jitter-0.1.4 \
-    crate://crates.io/rand_os/0.1.3;name=rand_os-0.1.3 \
-    crate://crates.io/rand_os/0.2.2;name=rand_os-0.2.2 \
-    crate://crates.io/rand_pcg/0.1.2;name=rand_pcg-0.1.2 \
-    crate://crates.io/rand_xorshift/0.1.1;name=rand_xorshift-0.1.1 \
-    crate://crates.io/rand_xoshiro/0.3.1;name=rand_xoshiro-0.3.1 \
-    crate://crates.io/rayon/1.1.0;name=rayon-1.1.0 \
-    crate://crates.io/rayon-core/1.5.0;name=rayon-core-1.5.0 \
-    crate://crates.io/rdrand/0.4.0;name=rdrand-0.4.0 \
-    crate://crates.io/regex-automata/0.1.7;name=regex-automata-0.1.7 \
-    crate://crates.io/ryu/1.0.0;name=ryu-1.0.0 \
-    crate://crates.io/same-file/1.0.4;name=same-file-1.0.4 \
-    crate://crates.io/scopeguard/0.3.3;name=scopeguard-0.3.3 \
-    crate://crates.io/serde/1.0.94;name=serde-1.0.94 \
-    crate://crates.io/serde_derive/1.0.94;name=serde_derive-1.0.94 \
-    crate://crates.io/serde_json/1.0.40;name=serde_json-1.0.40 \
-    crate://crates.io/syn/0.15.39;name=syn-0.15.39 \
-    crate://crates.io/textwrap/0.11.0;name=textwrap-0.11.0 \
-    crate://crates.io/tinytemplate/1.0.2;name=tinytemplate-1.0.2 \
-    crate://crates.io/unicode-width/0.1.5;name=unicode-width-0.1.5 \
-    crate://crates.io/unicode-xid/0.1.0;name=unicode-xid-0.1.0 \
-    crate://crates.io/walkdir/2.2.8;name=walkdir-2.2.8 \
-    crate://crates.io/wasi/0.7.0;name=wasi-0.7.0 \
-    crate://crates.io/winapi/0.3.7;name=winapi-0.3.7 \
-    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0;name=winapi-i686-pc-windows-gnu-0.4.0 \
-    crate://crates.io/winapi-util/0.1.2;name=winapi-util-0.1.2 \
-    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0;name=winapi-x86_64-pc-windows-gnu-0.4.0 \
-"
 
-# from vendor/ryu/Cargo.lock
+# from rust/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/cfg-if/1.0.0;name=cfg-if-1.0.0 \
-    crate://crates.io/getrandom/0.2.7;name=getrandom-0.2.7 \
-    crate://crates.io/hermit-abi/0.1.19;name=hermit-abi-0.1.19 \
-    crate://crates.io/libc/0.2.134;name=libc-0.2.134 \
-    crate://crates.io/no-panic/0.1.16;name=no-panic-0.1.16 \
-    crate://crates.io/num_cpus/1.13.1;name=num_cpus-1.13.1 \
-    crate://crates.io/ppv-lite86/0.2.16;name=ppv-lite86-0.2.16 \
-    crate://crates.io/proc-macro2/1.0.46;name=proc-macro2-1.0.46 \
-    crate://crates.io/quote/1.0.21;name=quote-1.0.21 \
-    crate://crates.io/rand/0.8.5;name=rand-0.8.5 \
-    crate://crates.io/rand_chacha/0.3.1;name=rand_chacha-0.3.1 \
-    crate://crates.io/rand_core/0.6.4;name=rand_core-0.6.4 \
-    crate://crates.io/rand_xorshift/0.3.0;name=rand_xorshift-0.3.0 \
-    crate://crates.io/syn/1.0.102;name=syn-1.0.102 \
-    crate://crates.io/unicode-ident/1.0.4;name=unicode-ident-1.0.4 \
-    crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1;name=wasi-0.11.0+wasi-snapshot-preview1 \
-"
-
-SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[getrandom-0.2.7.sha256sum] = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
-SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-SRC_URI[libc-0.2.134.sha256sum] = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
-SRC_URI[no-panic-0.1.16.sha256sum] = "12f10d4b6dcf2138f0fc171f4cc8f49517cc71ac57e29aa061c61aa57ec2dffc"
-SRC_URI[num_cpus-1.13.1.sha256sum] = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
-SRC_URI[ppv-lite86-0.2.16.sha256sum] = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
-SRC_URI[proc-macro2-1.0.46.sha256sum] = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"
-SRC_URI[quote-1.0.21.sha256sum] = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
-SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-SRC_URI[rand_xorshift-0.3.0.sha256sum] = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
-SRC_URI[syn-1.0.102.sha256sum] = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
-SRC_URI[unicode-ident-1.0.4.sha256sum] = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
-SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-# from vendor/flate2/Cargo.lock
-SRC_URI += " \
-    crate://crates.io/adler/1.0.2;name=adler-1.0.2 \
-    crate://crates.io/cc/1.0.77;name=cc-1.0.77 \
-    crate://crates.io/cfg-if/1.0.0;name=cfg-if-1.0.0 \
-    crate://crates.io/cloudflare-zlib-sys/0.3.0;name=cloudflare-zlib-sys-0.3.0 \
-    crate://crates.io/cmake/0.1.49;name=cmake-0.1.49 \
-    crate://crates.io/crc32fast/1.3.2;name=crc32fast-1.3.2 \
-    crate://crates.io/getrandom/0.2.8;name=getrandom-0.2.8 \
-    crate://crates.io/libc/0.2.137;name=libc-0.2.137 \
-    crate://crates.io/libz-ng-sys/1.1.8;name=libz-ng-sys-1.1.8 \
-    crate://crates.io/libz-sys/1.1.8;name=libz-sys-1.1.8 \
-    crate://crates.io/miniz_oxide/0.6.2;name=miniz_oxide-0.6.2 \
-    crate://crates.io/pkg-config/0.3.26;name=pkg-config-0.3.26 \
-    crate://crates.io/ppv-lite86/0.2.17;name=ppv-lite86-0.2.17 \
-    crate://crates.io/quickcheck/1.0.3;name=quickcheck-1.0.3 \
-    crate://crates.io/rand/0.8.5;name=rand-0.8.5 \
-    crate://crates.io/rand_chacha/0.3.1;name=rand_chacha-0.3.1 \
-    crate://crates.io/rand_core/0.6.4;name=rand_core-0.6.4 \
-    crate://crates.io/vcpkg/0.2.15;name=vcpkg-0.2.15 \
-    crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1;name=wasi-0.11.0+wasi-snapshot-preview1 \
+    crate://crates.io/adler/1.0.2 \
+    crate://crates.io/aead/0.4.3 \
+    crate://crates.io/aes/0.7.5 \
+    crate://crates.io/aes-gcm/0.9.4 \
+    crate://crates.io/aho-corasick/0.7.20 \
+    crate://crates.io/alloc-no-stdlib/2.0.4 \
+    crate://crates.io/alloc-stdlib/0.2.2 \
+    crate://crates.io/asn1-rs/0.5.2 \
+    crate://crates.io/asn1-rs-derive/0.4.0 \
+    crate://crates.io/asn1-rs-impl/0.1.0 \
+    crate://crates.io/autocfg/1.1.0 \
+    crate://crates.io/base64/0.13.1 \
+    crate://crates.io/bendy/0.3.3 \
+    crate://crates.io/bitflags/1.2.1 \
+    crate://crates.io/block-buffer/0.10.4 \
+    crate://crates.io/brotli/3.3.4 \
+    crate://crates.io/brotli-decompressor/2.3.4 \
+    crate://crates.io/build_const/0.2.2 \
+    crate://crates.io/byteorder/1.4.3 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/cipher/0.3.0 \
+    crate://crates.io/cpufeatures/0.2.9 \
+    crate://crates.io/crc/1.8.1 \
+    crate://crates.io/crc32fast/1.3.2 \
+    crate://crates.io/crypto-common/0.1.6 \
+    crate://crates.io/ctr/0.8.0 \
+    crate://crates.io/data-encoding/2.4.0 \
+    crate://crates.io/der-oid-macro/0.5.0 \
+    crate://crates.io/der-parser/6.0.1 \
+    crate://crates.io/der-parser/8.2.0 \
+    crate://crates.io/digest/0.10.7 \
+    crate://crates.io/displaydoc/0.2.4 \
+    crate://crates.io/enum_primitive/0.1.1 \
+    crate://crates.io/failure/0.1.8 \
+    crate://crates.io/failure_derive/0.1.8 \
+    crate://crates.io/flate2/1.0.26 \
+    crate://crates.io/generic-array/0.14.7 \
+    crate://crates.io/getrandom/0.2.10 \
+    crate://crates.io/ghash/0.4.4 \
+    crate://crates.io/hex/0.4.3 \
+    crate://crates.io/hkdf/0.12.3 \
+    crate://crates.io/hmac/0.12.1 \
+    crate://crates.io/ipsec-parser/0.7.0 \
+    crate://crates.io/itoa/1.0.8 \
+    crate://crates.io/kerberos-parser/0.7.1 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.147 \
+    crate://crates.io/lzma-rs/0.2.0 \
+    crate://crates.io/md-5/0.10.5 \
+    crate://crates.io/memchr/2.4.1 \
+    crate://crates.io/minimal-lexical/0.2.1 \
+    crate://crates.io/miniz_oxide/0.7.1 \
+    crate://crates.io/nom/7.1.3 \
+    crate://crates.io/nom-derive/0.10.1 \
+    crate://crates.io/nom-derive-impl/0.10.1 \
+    crate://crates.io/ntp-parser/0.6.0 \
+    crate://crates.io/num/0.2.1 \
+    crate://crates.io/num-bigint/0.2.6 \
+    crate://crates.io/num-bigint/0.4.3 \
+    crate://crates.io/num-complex/0.2.4 \
+    crate://crates.io/num-derive/0.2.5 \
+    crate://crates.io/num-integer/0.1.45 \
+    crate://crates.io/num-iter/0.1.43 \
+    crate://crates.io/num-rational/0.2.4 \
+    crate://crates.io/num-traits/0.1.43 \
+    crate://crates.io/num-traits/0.2.15 \
+    crate://crates.io/num_enum/0.5.11 \
+    crate://crates.io/num_enum_derive/0.5.11 \
+    crate://crates.io/num_threads/0.1.6 \
+    crate://crates.io/oid-registry/0.6.1 \
+    crate://crates.io/opaque-debug/0.3.0 \
+    crate://crates.io/phf/0.10.1 \
+    crate://crates.io/phf_codegen/0.10.0 \
+    crate://crates.io/phf_generator/0.10.0 \
+    crate://crates.io/phf_shared/0.10.0 \
+    crate://crates.io/polyval/0.5.3 \
+    crate://crates.io/ppv-lite86/0.2.17 \
+    crate://crates.io/proc-macro-crate/1.1.0 \
+    crate://crates.io/proc-macro2/0.4.30 \
+    crate://crates.io/proc-macro2/1.0.64 \
+    crate://crates.io/quote/0.6.13 \
+    crate://crates.io/quote/1.0.29 \
+    crate://crates.io/rand/0.8.5 \
+    crate://crates.io/rand_chacha/0.3.1 \
+    crate://crates.io/rand_core/0.6.4 \
+    crate://crates.io/regex/1.5.6 \
+    crate://crates.io/regex-syntax/0.6.29 \
+    crate://crates.io/rusticata-macros/4.1.0 \
+    crate://crates.io/rustversion/1.0.13 \
+    crate://crates.io/sawp/0.12.1 \
+    crate://crates.io/sawp-flags/0.12.1 \
+    crate://crates.io/sawp-flags-derive/0.12.1 \
+    crate://crates.io/sawp-modbus/0.12.1 \
+    crate://crates.io/serde/1.0.171 \
+    crate://crates.io/sha1/0.10.5 \
+    crate://crates.io/sha2/0.10.7 \
+    crate://crates.io/siphasher/0.3.10 \
+    crate://crates.io/snmp-parser/0.9.0 \
+    crate://crates.io/subtle/2.4.1 \
+    crate://crates.io/syn/0.15.44 \
+    crate://crates.io/syn/1.0.109 \
+    crate://crates.io/syn/2.0.25 \
+    crate://crates.io/synstructure/0.12.6 \
+    crate://crates.io/test-case/1.1.0 \
+    crate://crates.io/thiserror/1.0.43 \
+    crate://crates.io/thiserror-impl/1.0.43 \
+    crate://crates.io/time/0.3.13 \
+    crate://crates.io/time-macros/0.2.4 \
+    crate://crates.io/tls-parser/0.11.0 \
+    crate://crates.io/toml/0.5.11 \
+    crate://crates.io/typenum/1.16.0 \
+    crate://crates.io/unicode-ident/1.0.10 \
+    crate://crates.io/unicode-xid/0.1.0 \
+    crate://crates.io/unicode-xid/0.2.4 \
+    crate://crates.io/universal-hash/0.4.1 \
+    crate://crates.io/uuid/0.8.2 \
+    crate://crates.io/version_check/0.9.4 \
+    crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+    crate://crates.io/widestring/0.4.3 \
+    crate://crates.io/x509-parser/0.15.0 \
 "
 
 SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-SRC_URI[cc-1.0.77.sha256sum] = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+SRC_URI[aead-0.4.3.sha256sum] = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+SRC_URI[aes-0.7.5.sha256sum] = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+SRC_URI[aes-gcm-0.9.4.sha256sum] = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+SRC_URI[aho-corasick-0.7.20.sha256sum] = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+SRC_URI[alloc-no-stdlib-2.0.4.sha256sum] = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+SRC_URI[alloc-stdlib-0.2.2.sha256sum] = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+SRC_URI[asn1-rs-0.5.2.sha256sum] = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
+SRC_URI[asn1-rs-derive-0.4.0.sha256sum] = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
+SRC_URI[asn1-rs-impl-0.1.0.sha256sum] = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+SRC_URI[bendy-0.3.3.sha256sum] = "8133e404c8bec821e531f347dab1247bf64f60882826e7228f8ffeb33a35a658"
+SRC_URI[bitflags-1.2.1.sha256sum] = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+SRC_URI[brotli-3.3.4.sha256sum] = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+SRC_URI[brotli-decompressor-2.3.4.sha256sum] = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+SRC_URI[build_const-0.2.2.sha256sum] = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7"
+SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[cloudflare-zlib-sys-0.3.0.sha256sum] = "2040b6d1edfee6d75f172d81e2d2a7807534f3f294ce18184c70e7bb0105cd6f"
-SRC_URI[cmake-0.1.49.sha256sum] = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+SRC_URI[cipher-0.3.0.sha256sum] = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+SRC_URI[cpufeatures-0.2.9.sha256sum] = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+SRC_URI[crc-1.8.1.sha256sum] = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb"
 SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
-SRC_URI[getrandom-0.2.8.sha256sum] = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
-SRC_URI[libc-0.2.137.sha256sum] = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
-SRC_URI[libz-ng-sys-1.1.8.sha256sum] = "4399ae96a9966bf581e726de86969f803a81b7ce795fcd5480e640589457e0f2"
-SRC_URI[libz-sys-1.1.8.sha256sum] = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
-SRC_URI[miniz_oxide-0.6.2.sha256sum] = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
-SRC_URI[pkg-config-0.3.26.sha256sum] = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+SRC_URI[ctr-0.8.0.sha256sum] = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+SRC_URI[data-encoding-2.4.0.sha256sum] = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+SRC_URI[der-oid-macro-0.5.0.sha256sum] = "c73af209b6a5dc8ca7cbaba720732304792cddc933cfea3d74509c2b1ef2f436"
+SRC_URI[der-parser-6.0.1.sha256sum] = "4cddf120f700b411b2b02ebeb7f04dc0b7c8835909a6c2f52bf72ed0dd3433b2"
+SRC_URI[der-parser-8.2.0.sha256sum] = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
+SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+SRC_URI[displaydoc-0.2.4.sha256sum] = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+SRC_URI[enum_primitive-0.1.1.sha256sum] = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
+SRC_URI[failure-0.1.8.sha256sum] = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+SRC_URI[failure_derive-0.1.8.sha256sum] = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+SRC_URI[flate2-1.0.26.sha256sum] = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.10.sha256sum] = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+SRC_URI[ghash-0.4.4.sha256sum] = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+SRC_URI[hkdf-0.12.3.sha256sum] = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+SRC_URI[hmac-0.12.1.sha256sum] = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+SRC_URI[ipsec-parser-0.7.0.sha256sum] = "2cf8413e5de78bcbc51880ff71f4b64105719abe6efb8b4b877d3c7dc494ddd1"
+SRC_URI[itoa-1.0.8.sha256sum] = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
+SRC_URI[kerberos-parser-0.7.1.sha256sum] = "c10e7cfd4759cbce37ea65e2f48caebd695c246196a38e97ba4f731da48996da"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[lzma-rs-0.2.0.sha256sum] = "aba8ecb0450dfabce4ad72085eed0a75dffe8f21f7ada05638564ea9db2d7fb1"
+SRC_URI[md-5-0.10.5.sha256sum] = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+SRC_URI[memchr-2.4.1.sha256sum] = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[miniz_oxide-0.7.1.sha256sum] = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[nom-derive-0.10.1.sha256sum] = "1ff943d68b88d0b87a6e0d58615e8fa07f9fd5a1319fa0a72efc1f62275c79a7"
+SRC_URI[nom-derive-impl-0.10.1.sha256sum] = "cd0b9a93a84b0d3ec3e70e02d332dc33ac6dfac9cde63e17fcb77172dededa62"
+SRC_URI[ntp-parser-0.6.0.sha256sum] = "76084be9bf432d487336dd4e39b31ad93f94aecb14b81f08724f4a37b9abb7a5"
+SRC_URI[num-0.2.1.sha256sum] = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
+SRC_URI[num-bigint-0.2.6.sha256sum] = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
+SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+SRC_URI[num-complex-0.2.4.sha256sum] = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
+SRC_URI[num-derive-0.2.5.sha256sum] = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2"
+SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+SRC_URI[num-iter-0.1.43.sha256sum] = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+SRC_URI[num-rational-0.2.4.sha256sum] = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+SRC_URI[num-traits-0.1.43.sha256sum] = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[num_enum-0.5.11.sha256sum] = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+SRC_URI[num_enum_derive-0.5.11.sha256sum] = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+SRC_URI[oid-registry-0.6.1.sha256sum] = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
+SRC_URI[opaque-debug-0.3.0.sha256sum] = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+SRC_URI[phf-0.10.1.sha256sum] = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+SRC_URI[phf_codegen-0.10.0.sha256sum] = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+SRC_URI[phf_generator-0.10.0.sha256sum] = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+SRC_URI[phf_shared-0.10.0.sha256sum] = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+SRC_URI[polyval-0.5.3.sha256sum] = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
 SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
-SRC_URI[quickcheck-1.0.3.sha256sum] = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+SRC_URI[proc-macro-crate-1.1.0.sha256sum] = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83"
+SRC_URI[proc-macro2-0.4.30.sha256sum] = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+SRC_URI[proc-macro2-1.0.64.sha256sum] = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
+SRC_URI[quote-0.6.13.sha256sum] = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+SRC_URI[quote-1.0.29.sha256sum] = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
 SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
 SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[regex-1.5.6.sha256sum] = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+SRC_URI[regex-syntax-0.6.29.sha256sum] = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
+SRC_URI[rustversion-1.0.13.sha256sum] = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+SRC_URI[sawp-0.12.1.sha256sum] = "7e74f84d736420afcba72f689a494d275c97cf4775c3fe248f937e9d3bf83e30"
+SRC_URI[sawp-flags-0.12.1.sha256sum] = "1f2b22023d224b5314d51e53bfb2dbca53dc2cf90a4435aa4feb78172799dad0"
+SRC_URI[sawp-flags-derive-0.12.1.sha256sum] = "49a585d3c22887d23bb06dd602b8ce96c2a716e1fa89beec8bfb49e466f2d643"
+SRC_URI[sawp-modbus-0.12.1.sha256sum] = "2cbad9b003999a0f3016fb3603da113ff86f06279ccf6aacb577058168c0568d"
+SRC_URI[serde-1.0.171.sha256sum] = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+SRC_URI[sha1-0.10.5.sha256sum] = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+SRC_URI[sha2-0.10.7.sha256sum] = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+SRC_URI[siphasher-0.3.10.sha256sum] = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+SRC_URI[snmp-parser-0.9.0.sha256sum] = "773a26ad6742636f4259e7cc32262efb31feabd56bc34f0b2f28de9801aa24b3"
+SRC_URI[subtle-2.4.1.sha256sum] = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+SRC_URI[syn-0.15.44.sha256sum] = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.25.sha256sum] = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
+SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+SRC_URI[test-case-1.1.0.sha256sum] = "956044ef122917dde830c19dec5f76d0670329fde4104836d62ebcb14f4865f1"
+SRC_URI[thiserror-1.0.43.sha256sum] = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
+SRC_URI[thiserror-impl-1.0.43.sha256sum] = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
+SRC_URI[time-0.3.13.sha256sum] = "db76ff9fa4b1458b3c7f077f3ff9887394058460d21e634355b273aaf11eea45"
+SRC_URI[time-macros-0.2.4.sha256sum] = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
+SRC_URI[tls-parser-0.11.0.sha256sum] = "409206e2de64edbf7ea99a44ac31680daf9ef1a57895fb3c5bd738a903691be0"
+SRC_URI[toml-0.5.11.sha256sum] = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+SRC_URI[typenum-1.16.0.sha256sum] = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+SRC_URI[unicode-ident-1.0.10.sha256sum] = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73"
+SRC_URI[unicode-xid-0.1.0.sha256sum] = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+SRC_URI[universal-hash-0.4.1.sha256sum] = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+SRC_URI[uuid-0.8.2.sha256sum] = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-# from vendor/nom/Cargo.lock
+SRC_URI[widestring-0.4.3.sha256sum] = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+SRC_URI[x509-parser-0.15.0.sha256sum] = "bab0c2f54ae1d92f4fcb99c0b7ccf0b1e3451cbd395e5f115ccbdbcb18d4f634"
+# from rust/vendor/base64/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/aho-corasick/0.7.6;name=aho-corasick-0.7.6 \
-    crate://crates.io/arrayvec/0.4.11;name=arrayvec-0.4.11 \
-    crate://crates.io/atty/0.2.13;name=atty-0.2.13 \
-    crate://crates.io/autocfg/0.1.6;name=autocfg-0.1.6 \
-    crate://crates.io/bitflags/1.2.1;name=bitflags-1.2.1 \
-    crate://crates.io/bstr/0.2.7;name=bstr-0.2.7 \
-    crate://crates.io/byteorder/1.3.2;name=byteorder-1.3.2 \
-    crate://crates.io/cast/0.2.2;name=cast-0.2.2 \
-    crate://crates.io/cc/1.0.40;name=cc-1.0.40 \
-    crate://crates.io/cfg-if/0.1.9;name=cfg-if-0.1.9 \
-    crate://crates.io/clap/2.33.0;name=clap-2.33.0 \
-    crate://crates.io/cloudabi/0.0.3;name=cloudabi-0.0.3 \
-    crate://crates.io/criterion/0.2.11;name=criterion-0.2.11 \
-    crate://crates.io/criterion-plot/0.3.1;name=criterion-plot-0.3.1 \
-    crate://crates.io/crossbeam-deque/0.6.3;name=crossbeam-deque-0.6.3 \
-    crate://crates.io/crossbeam-epoch/0.7.2;name=crossbeam-epoch-0.7.2 \
-    crate://crates.io/crossbeam-queue/0.1.2;name=crossbeam-queue-0.1.2 \
-    crate://crates.io/crossbeam-utils/0.6.6;name=crossbeam-utils-0.6.6 \
-    crate://crates.io/csv/1.1.1;name=csv-1.1.1 \
-    crate://crates.io/csv-core/0.1.6;name=csv-core-0.1.6 \
-    crate://crates.io/doc-comment/0.3.1;name=doc-comment-0.3.1 \
-    crate://crates.io/either/1.5.2;name=either-1.5.2 \
-    crate://crates.io/fs_extra/1.1.0;name=fs_extra-1.1.0 \
-    crate://crates.io/fuchsia-cprng/0.1.1;name=fuchsia-cprng-0.1.1 \
-    crate://crates.io/itertools/0.8.0;name=itertools-0.8.0 \
-    crate://crates.io/itoa/0.4.4;name=itoa-0.4.4 \
-    crate://crates.io/jemalloc-sys/0.1.8;name=jemalloc-sys-0.1.8 \
-    crate://crates.io/jemallocator/0.1.9;name=jemallocator-0.1.9 \
-    crate://crates.io/lazy_static/1.3.0;name=lazy_static-1.3.0 \
-    crate://crates.io/lexical-core/0.6.7;name=lexical-core-0.6.7 \
-    crate://crates.io/libc/0.2.62;name=libc-0.2.62 \
-    crate://crates.io/memchr/2.2.1;name=memchr-2.2.1 \
-    crate://crates.io/memoffset/0.5.1;name=memoffset-0.5.1 \
-    crate://crates.io/nodrop/0.1.13;name=nodrop-0.1.13 \
-    crate://crates.io/num-traits/0.2.8;name=num-traits-0.2.8 \
-    crate://crates.io/num_cpus/1.10.1;name=num_cpus-1.10.1 \
-    crate://crates.io/proc-macro2/1.0.1;name=proc-macro2-1.0.1 \
-    crate://crates.io/quote/1.0.2;name=quote-1.0.2 \
-    crate://crates.io/rand_core/0.3.1;name=rand_core-0.3.1 \
-    crate://crates.io/rand_core/0.4.2;name=rand_core-0.4.2 \
-    crate://crates.io/rand_os/0.1.3;name=rand_os-0.1.3 \
-    crate://crates.io/rand_xoshiro/0.1.0;name=rand_xoshiro-0.1.0 \
-    crate://crates.io/rayon/1.1.0;name=rayon-1.1.0 \
-    crate://crates.io/rayon-core/1.5.0;name=rayon-core-1.5.0 \
-    crate://crates.io/rdrand/0.4.0;name=rdrand-0.4.0 \
-    crate://crates.io/regex/1.2.1;name=regex-1.2.1 \
-    crate://crates.io/regex-automata/0.1.8;name=regex-automata-0.1.8 \
-    crate://crates.io/regex-syntax/0.6.11;name=regex-syntax-0.6.11 \
-    crate://crates.io/rustc_version/0.2.3;name=rustc_version-0.2.3 \
-    crate://crates.io/ryu/1.0.0;name=ryu-1.0.0 \
-    crate://crates.io/same-file/1.0.5;name=same-file-1.0.5 \
-    crate://crates.io/scopeguard/1.0.0;name=scopeguard-1.0.0 \
-    crate://crates.io/semver/0.9.0;name=semver-0.9.0 \
-    crate://crates.io/semver-parser/0.7.0;name=semver-parser-0.7.0 \
-    crate://crates.io/serde/1.0.99;name=serde-1.0.99 \
-    crate://crates.io/serde_derive/1.0.99;name=serde_derive-1.0.99 \
-    crate://crates.io/serde_json/1.0.40;name=serde_json-1.0.40 \
-    crate://crates.io/static_assertions/0.3.4;name=static_assertions-0.3.4 \
-    crate://crates.io/syn/1.0.3;name=syn-1.0.3 \
-    crate://crates.io/textwrap/0.11.0;name=textwrap-0.11.0 \
-    crate://crates.io/thread_local/0.3.6;name=thread_local-0.3.6 \
-    crate://crates.io/tinytemplate/1.0.2;name=tinytemplate-1.0.2 \
-    crate://crates.io/unicode-width/0.1.6;name=unicode-width-0.1.6 \
-    crate://crates.io/unicode-xid/0.2.0;name=unicode-xid-0.2.0 \
-    crate://crates.io/version_check/0.9.1;name=version_check-0.9.1 \
-    crate://crates.io/walkdir/2.2.9;name=walkdir-2.2.9 \
-    crate://crates.io/winapi/0.3.7;name=winapi-0.3.7 \
-    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0;name=winapi-i686-pc-windows-gnu-0.4.0 \
-    crate://crates.io/winapi-util/0.1.2;name=winapi-util-0.1.2 \
-    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0;name=winapi-x86_64-pc-windows-gnu-0.4.0 \
+    crate://crates.io/ansi_term/0.12.1 \
+    crate://crates.io/atty/0.2.14 \
+    crate://crates.io/autocfg/0.1.8 \
+    crate://crates.io/autocfg/1.1.0 \
+    crate://crates.io/bitflags/1.3.2 \
+    crate://crates.io/bstr/0.2.17 \
+    crate://crates.io/bumpalo/3.11.1 \
+    crate://crates.io/cast/0.2.7 \
+    crate://crates.io/cast/0.3.0 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/clap/2.34.0 \
+    crate://crates.io/cloudabi/0.0.3 \
+    crate://crates.io/criterion/0.3.2 \
+    crate://crates.io/criterion-plot/0.4.5 \
+    crate://crates.io/crossbeam-channel/0.5.6 \
+    crate://crates.io/crossbeam-deque/0.8.2 \
+    crate://crates.io/crossbeam-epoch/0.9.11 \
+    crate://crates.io/crossbeam-utils/0.8.12 \
+    crate://crates.io/csv/1.1.6 \
+    crate://crates.io/csv-core/0.1.10 \
+    crate://crates.io/either/1.8.0 \
+    crate://crates.io/fuchsia-cprng/0.1.1 \
+    crate://crates.io/heck/0.3.3 \
+    crate://crates.io/hermit-abi/0.1.19 \
+    crate://crates.io/itertools/0.9.0 \
+    crate://crates.io/itertools/0.10.5 \
+    crate://crates.io/itoa/0.4.8 \
+    crate://crates.io/itoa/1.0.4 \
+    crate://crates.io/js-sys/0.3.60 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.135 \
+    crate://crates.io/log/0.4.17 \
+    crate://crates.io/memchr/2.5.0 \
+    crate://crates.io/memoffset/0.6.5 \
+    crate://crates.io/num-traits/0.2.15 \
+    crate://crates.io/num_cpus/1.13.1 \
+    crate://crates.io/once_cell/1.15.0 \
+    crate://crates.io/oorandom/11.1.3 \
+    crate://crates.io/plotters/0.2.15 \
+    crate://crates.io/proc-macro-error/1.0.4 \
+    crate://crates.io/proc-macro-error-attr/1.0.4 \
+    crate://crates.io/proc-macro2/1.0.47 \
+    crate://crates.io/quote/1.0.21 \
+    crate://crates.io/rand/0.6.5 \
+    crate://crates.io/rand_chacha/0.1.1 \
+    crate://crates.io/rand_core/0.3.1 \
+    crate://crates.io/rand_core/0.4.2 \
+    crate://crates.io/rand_hc/0.1.0 \
+    crate://crates.io/rand_isaac/0.1.1 \
+    crate://crates.io/rand_jitter/0.1.4 \
+    crate://crates.io/rand_os/0.1.3 \
+    crate://crates.io/rand_pcg/0.1.2 \
+    crate://crates.io/rand_xorshift/0.1.1 \
+    crate://crates.io/rayon/1.5.3 \
+    crate://crates.io/rayon-core/1.9.3 \
+    crate://crates.io/rdrand/0.4.0 \
+    crate://crates.io/regex/1.6.0 \
+    crate://crates.io/regex-automata/0.1.10 \
+    crate://crates.io/regex-syntax/0.6.27 \
+    crate://crates.io/rustc_version/0.4.0 \
+    crate://crates.io/ryu/1.0.11 \
+    crate://crates.io/same-file/1.0.6 \
+    crate://crates.io/scopeguard/1.1.0 \
+    crate://crates.io/semver/1.0.14 \
+    crate://crates.io/serde/1.0.146 \
+    crate://crates.io/serde_derive/1.0.146 \
+    crate://crates.io/serde_json/1.0.87 \
+    crate://crates.io/strsim/0.8.0 \
+    crate://crates.io/structopt/0.3.26 \
+    crate://crates.io/structopt-derive/0.4.18 \
+    crate://crates.io/syn/1.0.103 \
+    crate://crates.io/textwrap/0.11.0 \
+    crate://crates.io/tinytemplate/1.2.1 \
+    crate://crates.io/unicode-ident/1.0.5 \
+    crate://crates.io/unicode-segmentation/1.10.0 \
+    crate://crates.io/unicode-width/0.1.10 \
+    crate://crates.io/vec_map/0.8.2 \
+    crate://crates.io/version_check/0.9.4 \
+    crate://crates.io/walkdir/2.3.2 \
+    crate://crates.io/wasm-bindgen/0.2.83 \
+    crate://crates.io/wasm-bindgen-backend/0.2.83 \
+    crate://crates.io/wasm-bindgen-macro/0.2.83 \
+    crate://crates.io/wasm-bindgen-macro-support/0.2.83 \
+    crate://crates.io/wasm-bindgen-shared/0.2.83 \
+    crate://crates.io/web-sys/0.3.60 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-util/0.1.5 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
 "
 
-# from vendor/brotli/Cargo.lock
+SRC_URI[ansi_term-0.12.1.sha256sum] = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+SRC_URI[autocfg-0.1.8.sha256sum] = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bstr-0.2.17.sha256sum] = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+SRC_URI[bumpalo-3.11.1.sha256sum] = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+SRC_URI[cast-0.2.7.sha256sum] = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a"
+SRC_URI[cast-0.3.0.sha256sum] = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[clap-2.34.0.sha256sum] = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+SRC_URI[cloudabi-0.0.3.sha256sum] = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+SRC_URI[criterion-0.3.2.sha256sum] = "63f696897c88b57f4ffe3c69d8e1a0613c7d0e6c4833363c8560fbde9c47b966"
+SRC_URI[criterion-plot-0.4.5.sha256sum] = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876"
+SRC_URI[crossbeam-channel-0.5.6.sha256sum] = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+SRC_URI[crossbeam-deque-0.8.2.sha256sum] = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+SRC_URI[crossbeam-epoch-0.9.11.sha256sum] = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348"
+SRC_URI[crossbeam-utils-0.8.12.sha256sum] = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
+SRC_URI[csv-1.1.6.sha256sum] = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+SRC_URI[csv-core-0.1.10.sha256sum] = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+SRC_URI[either-1.8.0.sha256sum] = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+SRC_URI[fuchsia-cprng-0.1.1.sha256sum] = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+SRC_URI[heck-0.3.3.sha256sum] = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+SRC_URI[itertools-0.9.0.sha256sum] = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+SRC_URI[itertools-0.10.5.sha256sum] = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+SRC_URI[itoa-0.4.8.sha256sum] = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+SRC_URI[itoa-1.0.4.sha256sum] = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+SRC_URI[js-sys-0.3.60.sha256sum] = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.135.sha256sum] = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
+SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[memoffset-0.6.5.sha256sum] = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[num_cpus-1.13.1.sha256sum] = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+SRC_URI[once_cell-1.15.0.sha256sum] = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
+SRC_URI[oorandom-11.1.3.sha256sum] = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+SRC_URI[plotters-0.2.15.sha256sum] = "0d1685fbe7beba33de0330629da9d955ac75bd54f33d7b79f9a895590124f6bb"
+SRC_URI[proc-macro-error-1.0.4.sha256sum] = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+SRC_URI[proc-macro-error-attr-1.0.4.sha256sum] = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+SRC_URI[proc-macro2-1.0.47.sha256sum] = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+SRC_URI[quote-1.0.21.sha256sum] = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+SRC_URI[rand-0.6.5.sha256sum] = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+SRC_URI[rand_chacha-0.1.1.sha256sum] = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+SRC_URI[rand_core-0.3.1.sha256sum] = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+SRC_URI[rand_core-0.4.2.sha256sum] = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+SRC_URI[rand_hc-0.1.0.sha256sum] = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+SRC_URI[rand_isaac-0.1.1.sha256sum] = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+SRC_URI[rand_jitter-0.1.4.sha256sum] = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+SRC_URI[rand_os-0.1.3.sha256sum] = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+SRC_URI[rand_pcg-0.1.2.sha256sum] = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+SRC_URI[rand_xorshift-0.1.1.sha256sum] = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+SRC_URI[rayon-1.5.3.sha256sum] = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+SRC_URI[rayon-core-1.9.3.sha256sum] = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+SRC_URI[rdrand-0.4.0.sha256sum] = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+SRC_URI[regex-1.6.0.sha256sum] = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+SRC_URI[regex-automata-0.1.10.sha256sum] = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+SRC_URI[regex-syntax-0.6.27.sha256sum] = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+SRC_URI[ryu-1.0.11.sha256sum] = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+SRC_URI[semver-1.0.14.sha256sum] = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+SRC_URI[serde-1.0.146.sha256sum] = "6df50b7a60a0ad48e1b42eb38373eac8ff785d619fb14db917b4e63d5439361f"
+SRC_URI[serde_derive-1.0.146.sha256sum] = "a714fd32ba1d66047ce7d53dabd809e9922d538f9047de13cc4cffca47b36205"
+SRC_URI[serde_json-1.0.87.sha256sum] = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
+SRC_URI[strsim-0.8.0.sha256sum] = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+SRC_URI[structopt-0.3.26.sha256sum] = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+SRC_URI[structopt-derive-0.4.18.sha256sum] = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+SRC_URI[syn-1.0.103.sha256sum] = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+SRC_URI[tinytemplate-1.2.1.sha256sum] = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+SRC_URI[unicode-ident-1.0.5.sha256sum] = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+SRC_URI[unicode-segmentation-1.10.0.sha256sum] = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
+SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+SRC_URI[vec_map-0.8.2.sha256sum] = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+SRC_URI[wasm-bindgen-0.2.83.sha256sum] = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+SRC_URI[wasm-bindgen-backend-0.2.83.sha256sum] = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+SRC_URI[wasm-bindgen-macro-0.2.83.sha256sum] = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+SRC_URI[wasm-bindgen-macro-support-0.2.83.sha256sum] = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+SRC_URI[wasm-bindgen-shared-0.2.83.sha256sum] = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+SRC_URI[web-sys-0.3.60.sha256sum] = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+# from rust/vendor/displaydoc/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/alloc-no-stdlib/2.0.3;name=alloc-no-stdlib-2.0.3 \
-    crate://crates.io/alloc-stdlib/0.2.1;name=alloc-stdlib-0.2.1 \
-    crate://crates.io/block-buffer/0.7.3;name=block-buffer-0.7.3 \
-    crate://crates.io/block-padding/0.1.5;name=block-padding-0.1.5 \
-    crate://crates.io/brotli-decompressor/2.3.2;name=brotli-decompressor-2.3.2 \
-    crate://crates.io/byte-tools/0.3.1;name=byte-tools-0.3.1 \
-    crate://crates.io/byteorder/1.4.3;name=byteorder-1.4.3 \
-    crate://crates.io/cfg-if/1.0.0;name=cfg-if-1.0.0 \
-    crate://crates.io/digest/0.8.1;name=digest-0.8.1 \
-    crate://crates.io/fake-simd/0.1.2;name=fake-simd-0.1.2 \
-    crate://crates.io/generic-array/0.12.4;name=generic-array-0.12.4 \
-    crate://crates.io/libm/0.1.4;name=libm-0.1.4 \
-    crate://crates.io/opaque-debug/0.2.3;name=opaque-debug-0.2.3 \
-    crate://crates.io/packed_simd_2/0.3.7;name=packed_simd_2-0.3.7 \
-    crate://crates.io/sha2/0.8.2;name=sha2-0.8.2 \
-    crate://crates.io/typenum/1.15.0;name=typenum-1.15.0 \
+    crate://crates.io/ansi_term/0.11.0 \
+    crate://crates.io/basic-toml/0.1.2 \
+    crate://crates.io/ctor/0.1.26 \
+    crate://crates.io/difference/2.0.0 \
+    crate://crates.io/glob/0.3.1 \
+    crate://crates.io/itoa/1.0.6 \
+    crate://crates.io/libc/0.2.142 \
+    crate://crates.io/once_cell/1.17.1 \
+    crate://crates.io/output_vt100/0.1.3 \
+    crate://crates.io/pretty_assertions/0.6.1 \
+    crate://crates.io/proc-macro2/1.0.56 \
+    crate://crates.io/quote/1.0.26 \
+    crate://crates.io/rustversion/1.0.12 \
+    crate://crates.io/ryu/1.0.13 \
+    crate://crates.io/serde/1.0.160 \
+    crate://crates.io/serde_derive/1.0.160 \
+    crate://crates.io/serde_json/1.0.96 \
+    crate://crates.io/static_assertions/1.1.0 \
+    crate://crates.io/syn/1.0.109 \
+    crate://crates.io/syn/2.0.15 \
+    crate://crates.io/termcolor/1.2.0 \
+    crate://crates.io/thiserror/1.0.40 \
+    crate://crates.io/thiserror-impl/1.0.40 \
+    crate://crates.io/trybuild/1.0.80 \
+    crate://crates.io/unicode-ident/1.0.8 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-util/0.1.5 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+"
+
+SRC_URI[ansi_term-0.11.0.sha256sum] = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+SRC_URI[basic-toml-0.1.2.sha256sum] = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1"
+SRC_URI[ctor-0.1.26.sha256sum] = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+SRC_URI[difference-2.0.0.sha256sum] = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+SRC_URI[libc-0.2.142.sha256sum] = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+SRC_URI[once_cell-1.17.1.sha256sum] = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+SRC_URI[output_vt100-0.1.3.sha256sum] = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+SRC_URI[pretty_assertions-0.6.1.sha256sum] = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427"
+SRC_URI[proc-macro2-1.0.56.sha256sum] = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+SRC_URI[quote-1.0.26.sha256sum] = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+SRC_URI[rustversion-1.0.12.sha256sum] = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+SRC_URI[ryu-1.0.13.sha256sum] = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+SRC_URI[serde-1.0.160.sha256sum] = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+SRC_URI[serde_derive-1.0.160.sha256sum] = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+SRC_URI[serde_json-1.0.96.sha256sum] = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.15.sha256sum] = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+SRC_URI[termcolor-1.2.0.sha256sum] = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+SRC_URI[thiserror-1.0.40.sha256sum] = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+SRC_URI[thiserror-impl-1.0.40.sha256sum] = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+SRC_URI[trybuild-1.0.80.sha256sum] = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a"
+SRC_URI[unicode-ident-1.0.8.sha256sum] = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+# from rust/vendor/asn1-rs/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/asn1-rs/0.5.1 \
+    crate://crates.io/asn1-rs-derive/0.4.0 \
+    crate://crates.io/asn1-rs-impl/0.1.0 \
+    crate://crates.io/atty/0.2.14 \
+    crate://crates.io/autocfg/1.1.0 \
+    crate://crates.io/base64/0.13.1 \
+    crate://crates.io/basic-toml/0.1.2 \
+    crate://crates.io/bitvec/1.0.1 \
+    crate://crates.io/colored/2.0.0 \
+    crate://crates.io/cookie-factory/0.3.2 \
+    crate://crates.io/displaydoc/0.2.3 \
+    crate://crates.io/funty/2.0.0 \
+    crate://crates.io/glob/0.3.1 \
+    crate://crates.io/hermit-abi/0.1.19 \
+    crate://crates.io/hex-literal/0.3.4 \
+    crate://crates.io/itoa/1.0.6 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.139 \
+    crate://crates.io/memchr/2.5.0 \
+    crate://crates.io/minimal-lexical/0.2.1 \
+    crate://crates.io/nom/7.1.3 \
+    crate://crates.io/num-bigint/0.4.3 \
+    crate://crates.io/num-integer/0.1.45 \
+    crate://crates.io/num-traits/0.2.15 \
+    crate://crates.io/oid-registry/0.6.1 \
+    crate://crates.io/once_cell/1.17.1 \
+    crate://crates.io/pem/1.1.1 \
+    crate://crates.io/proc-macro2/1.0.51 \
+    crate://crates.io/quote/1.0.23 \
+    crate://crates.io/radium/0.7.0 \
+    crate://crates.io/rusticata-macros/4.1.0 \
+    crate://crates.io/ryu/1.0.13 \
+    crate://crates.io/serde/1.0.152 \
+    crate://crates.io/serde_derive/1.0.152 \
+    crate://crates.io/serde_json/1.0.94 \
+    crate://crates.io/syn/1.0.109 \
+    crate://crates.io/synstructure/0.12.6 \
+    crate://crates.io/tap/1.0.1 \
+    crate://crates.io/termcolor/1.2.0 \
+    crate://crates.io/thiserror/1.0.39 \
+    crate://crates.io/thiserror-impl/1.0.39 \
+    crate://crates.io/time/0.3.20 \
+    crate://crates.io/time-core/0.1.0 \
+    crate://crates.io/time-macros/0.2.8 \
+    crate://crates.io/trybuild/1.0.79 \
+    crate://crates.io/unicode-ident/1.0.8 \
+    crate://crates.io/unicode-xid/0.2.4 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-util/0.1.5 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+    crate://crates.io/wyz/0.5.1 \
+"
+
+SRC_URI[asn1-rs-0.5.1.sha256sum] = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4"
+SRC_URI[asn1-rs-derive-0.4.0.sha256sum] = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
+SRC_URI[asn1-rs-impl-0.1.0.sha256sum] = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
+SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+SRC_URI[basic-toml-0.1.2.sha256sum] = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1"
+SRC_URI[bitvec-1.0.1.sha256sum] = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+SRC_URI[colored-2.0.0.sha256sum] = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+SRC_URI[cookie-factory-0.3.2.sha256sum] = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+SRC_URI[displaydoc-0.2.3.sha256sum] = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+SRC_URI[funty-2.0.0.sha256sum] = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+SRC_URI[hex-literal-0.3.4.sha256sum] = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.139.sha256sum] = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[oid-registry-0.6.1.sha256sum] = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
+SRC_URI[once_cell-1.17.1.sha256sum] = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+SRC_URI[pem-1.1.1.sha256sum] = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+SRC_URI[proc-macro2-1.0.51.sha256sum] = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+SRC_URI[quote-1.0.23.sha256sum] = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+SRC_URI[radium-0.7.0.sha256sum] = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
+SRC_URI[ryu-1.0.13.sha256sum] = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+SRC_URI[serde-1.0.152.sha256sum] = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+SRC_URI[serde_derive-1.0.152.sha256sum] = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+SRC_URI[serde_json-1.0.94.sha256sum] = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+SRC_URI[tap-1.0.1.sha256sum] = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+SRC_URI[termcolor-1.2.0.sha256sum] = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+SRC_URI[thiserror-1.0.39.sha256sum] = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
+SRC_URI[thiserror-impl-1.0.39.sha256sum] = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
+SRC_URI[time-0.3.20.sha256sum] = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+SRC_URI[time-core-0.1.0.sha256sum] = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+SRC_URI[time-macros-0.2.8.sha256sum] = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+SRC_URI[trybuild-1.0.79.sha256sum] = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38"
+SRC_URI[unicode-ident-1.0.8.sha256sum] = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[wyz-0.5.1.sha256sum] = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+# from rust/vendor/flate2/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/adler/1.0.2 \
+    crate://crates.io/cc/1.0.73 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/cloudflare-zlib-sys/0.3.0 \
+    crate://crates.io/cmake/0.1.48 \
+    crate://crates.io/crc32fast/1.3.2 \
+    crate://crates.io/getrandom/0.2.6 \
+    crate://crates.io/libc/0.2.124 \
+    crate://crates.io/libz-ng-sys/1.1.8 \
+    crate://crates.io/libz-sys/1.1.8 \
+    crate://crates.io/miniz_oxide/0.7.1 \
+    crate://crates.io/pkg-config/0.3.25 \
+    crate://crates.io/ppv-lite86/0.2.16 \
+    crate://crates.io/quickcheck/1.0.3 \
+    crate://crates.io/rand/0.8.5 \
+    crate://crates.io/rand_chacha/0.3.1 \
+    crate://crates.io/rand_core/0.6.3 \
+    crate://crates.io/vcpkg/0.2.15 \
+    crate://crates.io/wasi/0.10.2+wasi-snapshot-preview1 \
+"
+
+SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+SRC_URI[cc-1.0.73.sha256sum] = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[cloudflare-zlib-sys-0.3.0.sha256sum] = "2040b6d1edfee6d75f172d81e2d2a7807534f3f294ce18184c70e7bb0105cd6f"
+SRC_URI[cmake-0.1.48.sha256sum] = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
+SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+SRC_URI[getrandom-0.2.6.sha256sum] = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+SRC_URI[libc-0.2.124.sha256sum] = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50"
+SRC_URI[libz-ng-sys-1.1.8.sha256sum] = "4399ae96a9966bf581e726de86969f803a81b7ce795fcd5480e640589457e0f2"
+SRC_URI[libz-sys-1.1.8.sha256sum] = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+SRC_URI[miniz_oxide-0.7.1.sha256sum] = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+SRC_URI[pkg-config-0.3.25.sha256sum] = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+SRC_URI[ppv-lite86-0.2.16.sha256sum] = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+SRC_URI[quickcheck-1.0.3.sha256sum] = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.3.sha256sum] = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+SRC_URI[wasi-0.10.2+wasi-snapshot-preview1.sha256sum] = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+# from rust/vendor/toml/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/autocfg/1.1.0 \
+    crate://crates.io/hashbrown/0.12.3 \
+    crate://crates.io/indexmap/1.9.2 \
+    crate://crates.io/itoa/1.0.5 \
+    crate://crates.io/proc-macro2/1.0.50 \
+    crate://crates.io/quote/1.0.23 \
+    crate://crates.io/ryu/1.0.12 \
+    crate://crates.io/serde/1.0.152 \
+    crate://crates.io/serde_derive/1.0.152 \
+    crate://crates.io/serde_json/1.0.91 \
+    crate://crates.io/syn/1.0.107 \
+    crate://crates.io/unicode-ident/1.0.6 \
+"
+
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+SRC_URI[indexmap-1.9.2.sha256sum] = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+SRC_URI[itoa-1.0.5.sha256sum] = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+SRC_URI[proc-macro2-1.0.50.sha256sum] = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
+SRC_URI[quote-1.0.23.sha256sum] = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+SRC_URI[ryu-1.0.12.sha256sum] = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+SRC_URI[serde-1.0.152.sha256sum] = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+SRC_URI[serde_derive-1.0.152.sha256sum] = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+SRC_URI[serde_json-1.0.91.sha256sum] = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+SRC_URI[syn-1.0.107.sha256sum] = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+SRC_URI[unicode-ident-1.0.6.sha256sum] = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+# from rust/vendor/nom/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/autocfg/1.0.1 \
+    crate://crates.io/bit-set/0.5.2 \
+    crate://crates.io/bit-vec/0.6.3 \
+    crate://crates.io/bitflags/1.3.2 \
+    crate://crates.io/byteorder/1.4.3 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/doc-comment/0.3.3 \
+    crate://crates.io/fnv/1.0.7 \
+    crate://crates.io/getrandom/0.2.3 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.106 \
+    crate://crates.io/memchr/2.4.1 \
+    crate://crates.io/minimal-lexical/0.2.1 \
+    crate://crates.io/num-traits/0.2.14 \
+    crate://crates.io/ppv-lite86/0.2.15 \
+    crate://crates.io/proptest/1.0.0 \
+    crate://crates.io/quick-error/1.2.3 \
+    crate://crates.io/quick-error/2.0.1 \
+    crate://crates.io/rand/0.8.4 \
+    crate://crates.io/rand_chacha/0.3.1 \
+    crate://crates.io/rand_core/0.6.3 \
+    crate://crates.io/rand_hc/0.3.1 \
+    crate://crates.io/rand_xorshift/0.3.0 \
+    crate://crates.io/redox_syscall/0.2.10 \
+    crate://crates.io/regex-syntax/0.6.25 \
+    crate://crates.io/remove_dir_all/0.5.3 \
+    crate://crates.io/rusty-fork/0.3.0 \
+    crate://crates.io/tempfile/3.2.0 \
+    crate://crates.io/wait-timeout/0.2.0 \
+    crate://crates.io/wasi/0.10.2+wasi-snapshot-preview1 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+"
+
+SRC_URI[autocfg-1.0.1.sha256sum] = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+SRC_URI[bit-set-0.5.2.sha256sum] = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+SRC_URI[bit-vec-0.6.3.sha256sum] = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[doc-comment-0.3.3.sha256sum] = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+SRC_URI[fnv-1.0.7.sha256sum] = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+SRC_URI[getrandom-0.2.3.sha256sum] = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.106.sha256sum] = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673"
+SRC_URI[memchr-2.4.1.sha256sum] = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[num-traits-0.2.14.sha256sum] = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+SRC_URI[ppv-lite86-0.2.15.sha256sum] = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
+SRC_URI[proptest-1.0.0.sha256sum] = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5"
+SRC_URI[quick-error-1.2.3.sha256sum] = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+SRC_URI[quick-error-2.0.1.sha256sum] = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+SRC_URI[rand-0.8.4.sha256sum] = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.3.sha256sum] = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+SRC_URI[rand_hc-0.3.1.sha256sum] = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+SRC_URI[rand_xorshift-0.3.0.sha256sum] = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+SRC_URI[redox_syscall-0.2.10.sha256sum] = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+SRC_URI[regex-syntax-0.6.25.sha256sum] = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+SRC_URI[remove_dir_all-0.5.3.sha256sum] = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+SRC_URI[rusty-fork-0.3.0.sha256sum] = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+SRC_URI[tempfile-3.2.0.sha256sum] = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+SRC_URI[wait-timeout-0.2.0.sha256sum] = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+SRC_URI[wasi-0.10.2+wasi-snapshot-preview1.sha256sum] = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+# from rust/vendor/brotli/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/alloc-no-stdlib/2.0.3 \
+    crate://crates.io/alloc-stdlib/0.2.1 \
+    crate://crates.io/block-buffer/0.7.3 \
+    crate://crates.io/block-padding/0.1.5 \
+    crate://crates.io/brotli-decompressor/2.3.2 \
+    crate://crates.io/byte-tools/0.3.1 \
+    crate://crates.io/byteorder/1.4.3 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/digest/0.8.1 \
+    crate://crates.io/fake-simd/0.1.2 \
+    crate://crates.io/generic-array/0.12.4 \
+    crate://crates.io/libm/0.1.4 \
+    crate://crates.io/opaque-debug/0.2.3 \
+    crate://crates.io/packed_simd_2/0.3.7 \
+    crate://crates.io/sha2/0.8.2 \
+    crate://crates.io/typenum/1.15.0 \
 "
 
 SRC_URI[alloc-no-stdlib-2.0.3.sha256sum] = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3"
@@ -308,417 +772,379 @@
 SRC_URI[packed_simd_2-0.3.7.sha256sum] = "defdcfef86dcc44ad208f71d9ff4ce28df6537a4e0d6b0e8e845cb8ca10059a6"
 SRC_URI[sha2-0.8.2.sha256sum] = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69"
 SRC_URI[typenum-1.15.0.sha256sum] = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
-# from vendor/alloc-stdlib/Cargo.lock
+# from rust/vendor/failure/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/alloc-no-stdlib/2.0.4;name=alloc-no-stdlib-2.0.4 \
+    crate://crates.io/backtrace/0.3.46 \
+    crate://crates.io/backtrace-sys/0.1.37 \
+    crate://crates.io/cc/1.0.52 \
+    crate://crates.io/cfg-if/0.1.10 \
+    crate://crates.io/failure_derive/0.1.7 \
+    crate://crates.io/libc/0.2.69 \
+    crate://crates.io/proc-macro2/1.0.12 \
+    crate://crates.io/quote/1.0.4 \
+    crate://crates.io/rustc-demangle/0.1.16 \
+    crate://crates.io/syn/1.0.18 \
+    crate://crates.io/synstructure/0.12.3 \
+    crate://crates.io/unicode-xid/0.2.0 \
+"
+
+SRC_URI[backtrace-0.3.46.sha256sum] = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e"
+SRC_URI[backtrace-sys-0.1.37.sha256sum] = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399"
+SRC_URI[cc-1.0.52.sha256sum] = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
+SRC_URI[cfg-if-0.1.10.sha256sum] = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+SRC_URI[failure_derive-0.1.7.sha256sum] = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231"
+SRC_URI[libc-0.2.69.sha256sum] = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
+SRC_URI[proc-macro2-1.0.12.sha256sum] = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319"
+SRC_URI[quote-1.0.4.sha256sum] = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7"
+SRC_URI[rustc-demangle-0.1.16.sha256sum] = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
+SRC_URI[syn-1.0.18.sha256sum] = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213"
+SRC_URI[synstructure-0.12.3.sha256sum] = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
+SRC_URI[unicode-xid-0.2.0.sha256sum] = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+# from rust/vendor/alloc-stdlib/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/alloc-no-stdlib/2.0.4 \
 "
 
 SRC_URI[alloc-no-stdlib-2.0.4.sha256sum] = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
-# from vendor/brotli-decompressor/Cargo.lock
+# from rust/vendor/bendy/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/alloc-no-stdlib/2.0.4;name=alloc-no-stdlib-2.0.4 \
-    crate://crates.io/alloc-stdlib/0.2.2;name=alloc-stdlib-0.2.2 \
+    crate://crates.io/addr2line/0.14.0 \
+    crate://crates.io/adler/0.2.3 \
+    crate://crates.io/aho-corasick/0.7.15 \
+    crate://crates.io/autocfg/1.0.1 \
+    crate://crates.io/backtrace/0.3.54 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/failure/0.1.8 \
+    crate://crates.io/failure_derive/0.1.8 \
+    crate://crates.io/gimli/0.23.0 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.80 \
+    crate://crates.io/memchr/2.3.4 \
+    crate://crates.io/miniz_oxide/0.4.3 \
+    crate://crates.io/object/0.22.0 \
+    crate://crates.io/proc-macro2/1.0.24 \
+    crate://crates.io/quote/1.0.7 \
+    crate://crates.io/regex/1.4.2 \
+    crate://crates.io/regex-syntax/0.6.21 \
+    crate://crates.io/rustc-demangle/0.1.18 \
+    crate://crates.io/serde/1.0.117 \
+    crate://crates.io/serde_bytes/0.11.5 \
+    crate://crates.io/serde_derive/1.0.117 \
+    crate://crates.io/syn/1.0.48 \
+    crate://crates.io/synstructure/0.12.4 \
+    crate://crates.io/thread_local/1.0.1 \
+    crate://crates.io/unicode-xid/0.2.1 \
+"
+
+SRC_URI[addr2line-0.14.0.sha256sum] = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423"
+SRC_URI[adler-0.2.3.sha256sum] = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
+SRC_URI[aho-corasick-0.7.15.sha256sum] = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+SRC_URI[autocfg-1.0.1.sha256sum] = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+SRC_URI[backtrace-0.3.54.sha256sum] = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[failure-0.1.8.sha256sum] = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+SRC_URI[failure_derive-0.1.8.sha256sum] = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+SRC_URI[gimli-0.23.0.sha256sum] = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.80.sha256sum] = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614"
+SRC_URI[memchr-2.3.4.sha256sum] = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+SRC_URI[miniz_oxide-0.4.3.sha256sum] = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"
+SRC_URI[object-0.22.0.sha256sum] = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397"
+SRC_URI[proc-macro2-1.0.24.sha256sum] = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+SRC_URI[quote-1.0.7.sha256sum] = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
+SRC_URI[regex-1.4.2.sha256sum] = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"
+SRC_URI[regex-syntax-0.6.21.sha256sum] = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
+SRC_URI[rustc-demangle-0.1.18.sha256sum] = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232"
+SRC_URI[serde-1.0.117.sha256sum] = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a"
+SRC_URI[serde_bytes-0.11.5.sha256sum] = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"
+SRC_URI[serde_derive-1.0.117.sha256sum] = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e"
+SRC_URI[syn-1.0.48.sha256sum] = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
+SRC_URI[synstructure-0.12.4.sha256sum] = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
+SRC_URI[thread_local-1.0.1.sha256sum] = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+SRC_URI[unicode-xid-0.2.1.sha256sum] = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+# from rust/vendor/regex/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/aho-corasick/0.7.18 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/getrandom/0.2.6 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.125 \
+    crate://crates.io/memchr/2.5.0 \
+    crate://crates.io/quickcheck/1.0.3 \
+    crate://crates.io/rand/0.8.5 \
+    crate://crates.io/rand_core/0.6.3 \
+    crate://crates.io/regex-syntax/0.6.26 \
+    crate://crates.io/wasi/0.10.2+wasi-snapshot-preview1 \
+"
+
+SRC_URI[aho-corasick-0.7.18.sha256sum] = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[getrandom-0.2.6.sha256sum] = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.125.sha256sum] = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[quickcheck-1.0.3.sha256sum] = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+SRC_URI[rand_core-0.6.3.sha256sum] = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+SRC_URI[regex-syntax-0.6.26.sha256sum] = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+SRC_URI[wasi-0.10.2+wasi-snapshot-preview1.sha256sum] = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+# from rust/vendor/brotli-decompressor/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/alloc-no-stdlib/2.0.4 \
+    crate://crates.io/alloc-stdlib/0.2.2 \
 "
 
 SRC_URI[alloc-no-stdlib-2.0.4.sha256sum] = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
 SRC_URI[alloc-stdlib-0.2.2.sha256sum] = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
-# from vendor/phf_generator/Cargo.lock
+# from rust/vendor/phf_generator/Cargo.lock
 SRC_URI += " \
-    crate://crates.io/arrayvec/0.4.12;name=arrayvec-0.4.12 \
-    crate://crates.io/atty/0.2.13;name=atty-0.2.13 \
-    crate://crates.io/autocfg/0.1.6;name=autocfg-0.1.6 \
-    crate://crates.io/bitflags/1.2.1;name=bitflags-1.2.1 \
-    crate://crates.io/bstr/0.2.8;name=bstr-0.2.8 \
-    crate://crates.io/byteorder/1.3.2;name=byteorder-1.3.2 \
-    crate://crates.io/c2-chacha/0.2.2;name=c2-chacha-0.2.2 \
-    crate://crates.io/cast/0.2.2;name=cast-0.2.2 \
-    crate://crates.io/cfg-if/0.1.10;name=cfg-if-0.1.10 \
-    crate://crates.io/clap/2.33.0;name=clap-2.33.0 \
-    crate://crates.io/criterion/0.3.0;name=criterion-0.3.0 \
-    crate://crates.io/criterion-plot/0.4.0;name=criterion-plot-0.4.0 \
-    crate://crates.io/crossbeam-deque/0.7.1;name=crossbeam-deque-0.7.1 \
-    crate://crates.io/crossbeam-epoch/0.7.2;name=crossbeam-epoch-0.7.2 \
-    crate://crates.io/crossbeam-queue/0.1.2;name=crossbeam-queue-0.1.2 \
-    crate://crates.io/crossbeam-utils/0.6.6;name=crossbeam-utils-0.6.6 \
-    crate://crates.io/csv/1.1.1;name=csv-1.1.1 \
-    crate://crates.io/csv-core/0.1.6;name=csv-core-0.1.6 \
-    crate://crates.io/either/1.5.3;name=either-1.5.3 \
-    crate://crates.io/getrandom/0.1.12;name=getrandom-0.1.12 \
-    crate://crates.io/itertools/0.8.0;name=itertools-0.8.0 \
-    crate://crates.io/itoa/0.4.4;name=itoa-0.4.4 \
-    crate://crates.io/lazy_static/1.4.0;name=lazy_static-1.4.0 \
-    crate://crates.io/libc/0.2.64;name=libc-0.2.64 \
-    crate://crates.io/memchr/2.2.1;name=memchr-2.2.1 \
-    crate://crates.io/memoffset/0.5.1;name=memoffset-0.5.1 \
-    crate://crates.io/nodrop/0.1.14;name=nodrop-0.1.14 \
-    crate://crates.io/num-traits/0.2.8;name=num-traits-0.2.8 \
-    crate://crates.io/num_cpus/1.10.1;name=num_cpus-1.10.1 \
-    crate://crates.io/phf_shared/0.8.0;name=phf_shared-0.8.0 \
-    crate://crates.io/ppv-lite86/0.2.5;name=ppv-lite86-0.2.5 \
-    crate://crates.io/proc-macro2/1.0.5;name=proc-macro2-1.0.5 \
-    crate://crates.io/quote/1.0.2;name=quote-1.0.2 \
-    crate://crates.io/rand/0.7.2;name=rand-0.7.2 \
-    crate://crates.io/rand_chacha/0.2.1;name=rand_chacha-0.2.1 \
-    crate://crates.io/rand_core/0.5.1;name=rand_core-0.5.1 \
-    crate://crates.io/rand_hc/0.2.0;name=rand_hc-0.2.0 \
-    crate://crates.io/rand_os/0.2.2;name=rand_os-0.2.2 \
-    crate://crates.io/rand_pcg/0.2.0;name=rand_pcg-0.2.0 \
-    crate://crates.io/rand_xoshiro/0.3.1;name=rand_xoshiro-0.3.1 \
-    crate://crates.io/rayon/1.2.0;name=rayon-1.2.0 \
-    crate://crates.io/rayon-core/1.6.0;name=rayon-core-1.6.0 \
-    crate://crates.io/regex-automata/0.1.8;name=regex-automata-0.1.8 \
-    crate://crates.io/rustc_version/0.2.3;name=rustc_version-0.2.3 \
-    crate://crates.io/ryu/1.0.2;name=ryu-1.0.2 \
-    crate://crates.io/same-file/1.0.5;name=same-file-1.0.5 \
-    crate://crates.io/scopeguard/1.0.0;name=scopeguard-1.0.0 \
-    crate://crates.io/semver/0.9.0;name=semver-0.9.0 \
-    crate://crates.io/semver-parser/0.7.0;name=semver-parser-0.7.0 \
-    crate://crates.io/serde/1.0.101;name=serde-1.0.101 \
-    crate://crates.io/serde_derive/1.0.101;name=serde_derive-1.0.101 \
-    crate://crates.io/serde_json/1.0.41;name=serde_json-1.0.41 \
-    crate://crates.io/siphasher/0.3.1;name=siphasher-0.3.1 \
-    crate://crates.io/syn/1.0.5;name=syn-1.0.5 \
-    crate://crates.io/textwrap/0.11.0;name=textwrap-0.11.0 \
-    crate://crates.io/tinytemplate/1.0.2;name=tinytemplate-1.0.2 \
-    crate://crates.io/unicode-width/0.1.6;name=unicode-width-0.1.6 \
-    crate://crates.io/unicode-xid/0.2.0;name=unicode-xid-0.2.0 \
-    crate://crates.io/walkdir/2.2.9;name=walkdir-2.2.9 \
-    crate://crates.io/wasi/0.7.0;name=wasi-0.7.0 \
-    crate://crates.io/winapi/0.3.8;name=winapi-0.3.8 \
-    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0;name=winapi-i686-pc-windows-gnu-0.4.0 \
-    crate://crates.io/winapi-util/0.1.2;name=winapi-util-0.1.2 \
-    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0;name=winapi-x86_64-pc-windows-gnu-0.4.0 \
+    crate://crates.io/atty/0.2.14 \
+    crate://crates.io/autocfg/1.0.1 \
+    crate://crates.io/bitflags/1.2.1 \
+    crate://crates.io/bstr/0.2.16 \
+    crate://crates.io/bumpalo/3.7.0 \
+    crate://crates.io/cast/0.2.7 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/clap/2.33.3 \
+    crate://crates.io/criterion/0.3.4 \
+    crate://crates.io/criterion-plot/0.4.4 \
+    crate://crates.io/crossbeam-channel/0.5.1 \
+    crate://crates.io/crossbeam-deque/0.8.1 \
+    crate://crates.io/crossbeam-epoch/0.9.5 \
+    crate://crates.io/crossbeam-utils/0.8.5 \
+    crate://crates.io/csv/1.1.6 \
+    crate://crates.io/csv-core/0.1.10 \
+    crate://crates.io/either/1.6.1 \
+    crate://crates.io/getrandom/0.2.3 \
+    crate://crates.io/half/1.7.1 \
+    crate://crates.io/hermit-abi/0.1.19 \
+    crate://crates.io/itertools/0.10.1 \
+    crate://crates.io/itoa/0.4.7 \
+    crate://crates.io/js-sys/0.3.52 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.99 \
+    crate://crates.io/log/0.4.14 \
+    crate://crates.io/memchr/2.4.0 \
+    crate://crates.io/memoffset/0.6.4 \
+    crate://crates.io/num-traits/0.2.14 \
+    crate://crates.io/num_cpus/1.13.0 \
+    crate://crates.io/oorandom/11.1.3 \
+    crate://crates.io/phf_shared/0.10.0 \
+    crate://crates.io/plotters/0.3.1 \
+    crate://crates.io/plotters-backend/0.3.2 \
+    crate://crates.io/plotters-svg/0.3.1 \
+    crate://crates.io/ppv-lite86/0.2.10 \
+    crate://crates.io/proc-macro2/1.0.28 \
+    crate://crates.io/quote/1.0.9 \
+    crate://crates.io/rand/0.8.4 \
+    crate://crates.io/rand_chacha/0.3.1 \
+    crate://crates.io/rand_core/0.6.3 \
+    crate://crates.io/rand_hc/0.3.1 \
+    crate://crates.io/rayon/1.5.1 \
+    crate://crates.io/rayon-core/1.9.1 \
+    crate://crates.io/regex/1.5.4 \
+    crate://crates.io/regex-automata/0.1.10 \
+    crate://crates.io/regex-syntax/0.6.25 \
+    crate://crates.io/rustc_version/0.4.0 \
+    crate://crates.io/ryu/1.0.5 \
+    crate://crates.io/same-file/1.0.6 \
+    crate://crates.io/scopeguard/1.1.0 \
+    crate://crates.io/semver/1.0.4 \
+    crate://crates.io/serde/1.0.127 \
+    crate://crates.io/serde_cbor/0.11.1 \
+    crate://crates.io/serde_derive/1.0.127 \
+    crate://crates.io/serde_json/1.0.66 \
+    crate://crates.io/siphasher/0.3.6 \
+    crate://crates.io/syn/1.0.74 \
+    crate://crates.io/textwrap/0.11.0 \
+    crate://crates.io/tinytemplate/1.2.1 \
+    crate://crates.io/unicode-width/0.1.8 \
+    crate://crates.io/unicode-xid/0.2.2 \
+    crate://crates.io/walkdir/2.3.2 \
+    crate://crates.io/wasi/0.10.2+wasi-snapshot-preview1 \
+    crate://crates.io/wasm-bindgen/0.2.75 \
+    crate://crates.io/wasm-bindgen-backend/0.2.75 \
+    crate://crates.io/wasm-bindgen-macro/0.2.75 \
+    crate://crates.io/wasm-bindgen-macro-support/0.2.75 \
+    crate://crates.io/wasm-bindgen-shared/0.2.75 \
+    crate://crates.io/web-sys/0.3.52 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-util/0.1.5 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
 "
 
-# from vendor/rand/Cargo.lock
-SRC_URI += " \
-    crate://crates.io/base-x/0.2.5;name=base-x-0.2.5 \
-    crate://crates.io/bumpalo/2.6.0;name=bumpalo-2.6.0 \
-    crate://crates.io/c2-chacha/0.2.2;name=c2-chacha-0.2.2 \
-    crate://crates.io/cfg-if/0.1.9;name=cfg-if-0.1.9 \
-    crate://crates.io/discard/1.0.4;name=discard-1.0.4 \
-    crate://crates.io/getrandom/0.1.12;name=getrandom-0.1.12 \
-    crate://crates.io/itoa/0.4.4;name=itoa-0.4.4 \
-    crate://crates.io/lazy_static/1.4.0;name=lazy_static-1.4.0 \
-    crate://crates.io/libc/0.2.62;name=libc-0.2.62 \
-    crate://crates.io/log/0.4.8;name=log-0.4.8 \
-    crate://crates.io/packed_simd/0.3.3;name=packed_simd-0.3.3 \
-    crate://crates.io/ppv-lite86/0.2.5;name=ppv-lite86-0.2.5 \
-    crate://crates.io/proc-macro2/0.4.30;name=proc-macro2-0.4.30 \
-    crate://crates.io/proc-macro2/1.0.3;name=proc-macro2-1.0.3 \
-    crate://crates.io/quote/0.6.13;name=quote-0.6.13 \
-    crate://crates.io/quote/1.0.2;name=quote-1.0.2 \
-    crate://crates.io/rand_chacha/0.2.1;name=rand_chacha-0.2.1 \
-    crate://crates.io/rand_core/0.5.1;name=rand_core-0.5.1 \
-    crate://crates.io/rand_hc/0.2.0;name=rand_hc-0.2.0 \
-    crate://crates.io/rand_pcg/0.2.1;name=rand_pcg-0.2.1 \
-    crate://crates.io/rustc_version/0.2.3;name=rustc_version-0.2.3 \
-    crate://crates.io/ryu/1.0.0;name=ryu-1.0.0 \
-    crate://crates.io/semver/0.9.0;name=semver-0.9.0 \
-    crate://crates.io/semver-parser/0.7.0;name=semver-parser-0.7.0 \
-    crate://crates.io/serde/1.0.100;name=serde-1.0.100 \
-    crate://crates.io/serde_derive/1.0.100;name=serde_derive-1.0.100 \
-    crate://crates.io/serde_json/1.0.40;name=serde_json-1.0.40 \
-    crate://crates.io/sha1/0.6.0;name=sha1-0.6.0 \
-    crate://crates.io/stdweb/0.4.18;name=stdweb-0.4.18 \
-    crate://crates.io/stdweb-derive/0.5.1;name=stdweb-derive-0.5.1 \
-    crate://crates.io/stdweb-internal-macros/0.2.7;name=stdweb-internal-macros-0.2.7 \
-    crate://crates.io/stdweb-internal-runtime/0.1.4;name=stdweb-internal-runtime-0.1.4 \
-    crate://crates.io/syn/0.15.44;name=syn-0.15.44 \
-    crate://crates.io/syn/1.0.5;name=syn-1.0.5 \
-    crate://crates.io/unicode-xid/0.1.0;name=unicode-xid-0.1.0 \
-    crate://crates.io/unicode-xid/0.2.0;name=unicode-xid-0.2.0 \
-    crate://crates.io/wasi/0.7.0;name=wasi-0.7.0 \
-    crate://crates.io/wasm-bindgen/0.2.50;name=wasm-bindgen-0.2.50 \
-    crate://crates.io/wasm-bindgen-backend/0.2.50;name=wasm-bindgen-backend-0.2.50 \
-    crate://crates.io/wasm-bindgen-macro/0.2.50;name=wasm-bindgen-macro-0.2.50 \
-    crate://crates.io/wasm-bindgen-macro-support/0.2.50;name=wasm-bindgen-macro-support-0.2.50 \
-    crate://crates.io/wasm-bindgen-shared/0.2.50;name=wasm-bindgen-shared-0.2.50 \
-"
-
-SRC_URI[arrayvec-0.4.11.sha256sum] = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba"
-SRC_URI[atty-0.2.12.sha256sum] = "ecaaea69f52b3b18633611ec0007d188517d0366f47ff703d400fa6879d6f8d5"
-SRC_URI[autocfg-0.1.4.sha256sum] = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf"
-SRC_URI[bitflags-1.1.0.sha256sum] = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
-SRC_URI[bstr-0.2.1.sha256sum] = "6cc0572e02f76cb335f309b19e0a0d585b4f62788f7d26de2a13a836a637385f"
-SRC_URI[byteorder-1.3.2.sha256sum] = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
-SRC_URI[cast-0.2.2.sha256sum] = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
-SRC_URI[cfg-if-0.1.9.sha256sum] = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
-SRC_URI[clap-2.33.0.sha256sum] = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
-SRC_URI[cloudabi-0.0.3.sha256sum] = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-SRC_URI[criterion-0.3.0.sha256sum] = "938703e165481c8d612ea3479ac8342e5615185db37765162e762ec3523e2fc6"
-SRC_URI[criterion-plot-0.4.0.sha256sum] = "eccdc6ce8bbe352ca89025bee672aa6d24f4eb8c53e3a8b5d1bc58011da072a2"
-SRC_URI[crossbeam-deque-0.6.3.sha256sum] = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13"
-SRC_URI[crossbeam-epoch-0.7.1.sha256sum] = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4"
-SRC_URI[crossbeam-queue-0.1.2.sha256sum] = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
-SRC_URI[crossbeam-utils-0.6.5.sha256sum] = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c"
-SRC_URI[csv-1.1.1.sha256sum] = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
-SRC_URI[csv-core-0.1.6.sha256sum] = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
-SRC_URI[doc-comment-0.3.1.sha256sum] = "923dea538cea0aa3025e8685b20d6ee21ef99c4f77e954a30febbaac5ec73a97"
-SRC_URI[either-1.5.2.sha256sum] = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
-SRC_URI[fuchsia-cprng-0.1.1.sha256sum] = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-SRC_URI[getrandom-0.1.13.sha256sum] = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
-SRC_URI[itertools-0.8.0.sha256sum] = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
-SRC_URI[itoa-0.4.4.sha256sum] = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
-SRC_URI[lazy_static-1.3.0.sha256sum] = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
-SRC_URI[libc-0.2.65.sha256sum] = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
-SRC_URI[memchr-2.2.1.sha256sum] = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
-SRC_URI[memoffset-0.2.1.sha256sum] = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
-SRC_URI[nodrop-0.1.13.sha256sum] = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
-SRC_URI[num-traits-0.2.8.sha256sum] = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
-SRC_URI[num_cpus-1.10.1.sha256sum] = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
-SRC_URI[proc-macro2-0.4.30.sha256sum] = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
-SRC_URI[quote-0.6.13.sha256sum] = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
-SRC_URI[rand-0.6.5.sha256sum] = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
-SRC_URI[rand_chacha-0.1.1.sha256sum] = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-SRC_URI[rand_core-0.3.1.sha256sum] = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-SRC_URI[rand_core-0.4.0.sha256sum] = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0"
-SRC_URI[rand_core-0.5.1.sha256sum] = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-SRC_URI[rand_hc-0.1.0.sha256sum] = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
-SRC_URI[rand_isaac-0.1.1.sha256sum] = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
-SRC_URI[rand_jitter-0.1.4.sha256sum] = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
-SRC_URI[rand_os-0.1.3.sha256sum] = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
-SRC_URI[rand_os-0.2.2.sha256sum] = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a"
-SRC_URI[rand_pcg-0.1.2.sha256sum] = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
-SRC_URI[rand_xorshift-0.1.1.sha256sum] = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
-SRC_URI[rand_xoshiro-0.3.1.sha256sum] = "0e18c91676f670f6f0312764c759405f13afb98d5d73819840cf72a518487bff"
-SRC_URI[rayon-1.1.0.sha256sum] = "a4b0186e22767d5b9738a05eab7c6ac90b15db17e5b5f9bd87976dd7d89a10a4"
-SRC_URI[rayon-core-1.5.0.sha256sum] = "ebbe0df8435ac0c397d467b6cad6d25543d06e8a019ef3f6af3c384597515bd2"
-SRC_URI[rdrand-0.4.0.sha256sum] = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-SRC_URI[regex-automata-0.1.7.sha256sum] = "3ed09217220c272b29ef237a974ad58515bde75f194e3ffa7e6d0bf0f3b01f86"
-SRC_URI[ryu-1.0.0.sha256sum] = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
-SRC_URI[same-file-1.0.4.sha256sum] = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267"
-SRC_URI[scopeguard-0.3.3.sha256sum] = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
-SRC_URI[serde-1.0.94.sha256sum] = "076a696fdea89c19d3baed462576b8f6d663064414b5c793642da8dfeb99475b"
-SRC_URI[serde_derive-1.0.94.sha256sum] = "ef45eb79d6463b22f5f9e16d283798b7c0175ba6050bc25c1a946c122727fe7b"
-SRC_URI[serde_json-1.0.40.sha256sum] = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
-SRC_URI[syn-0.15.39.sha256sum] = "b4d960b829a55e56db167e861ddb43602c003c7be0bee1d345021703fac2fb7c"
-SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-SRC_URI[tinytemplate-1.0.2.sha256sum] = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
-SRC_URI[unicode-width-0.1.5.sha256sum] = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
-SRC_URI[unicode-xid-0.1.0.sha256sum] = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
-SRC_URI[walkdir-2.2.8.sha256sum] = "c7904a7e2bb3cdf0cf5e783f44204a85a37a93151738fa349f06680f59a98b45"
-SRC_URI[wasi-0.7.0.sha256sum] = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
-SRC_URI[winapi-0.3.7.sha256sum] = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
-SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.2.sha256sum] = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
-SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-SRC_URI[aho-corasick-0.7.6.sha256sum] = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
-SRC_URI[arrayvec-0.4.11.sha256sum] = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba"
-SRC_URI[atty-0.2.13.sha256sum] = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
-SRC_URI[autocfg-0.1.6.sha256sum] = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
-SRC_URI[bitflags-1.2.1.sha256sum] = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-SRC_URI[bstr-0.2.7.sha256sum] = "94cdf78eb7e94c566c1f5dbe2abf8fc70a548fc902942a48c4b3a98b48ca9ade"
-SRC_URI[byteorder-1.3.2.sha256sum] = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
-SRC_URI[cast-0.2.2.sha256sum] = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
-SRC_URI[cc-1.0.40.sha256sum] = "b548a4ee81fccb95919d4e22cfea83c7693ebfd78f0495493178db20b3139da7"
-SRC_URI[cfg-if-0.1.9.sha256sum] = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
-SRC_URI[clap-2.33.0.sha256sum] = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
-SRC_URI[cloudabi-0.0.3.sha256sum] = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-SRC_URI[criterion-0.2.11.sha256sum] = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394"
-SRC_URI[criterion-plot-0.3.1.sha256sum] = "76f9212ddf2f4a9eb2d401635190600656a1f88a932ef53d06e7fa4c7e02fb8e"
-SRC_URI[crossbeam-deque-0.6.3.sha256sum] = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13"
-SRC_URI[crossbeam-epoch-0.7.2.sha256sum] = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
-SRC_URI[crossbeam-queue-0.1.2.sha256sum] = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
-SRC_URI[crossbeam-utils-0.6.6.sha256sum] = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
-SRC_URI[csv-1.1.1.sha256sum] = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
-SRC_URI[csv-core-0.1.6.sha256sum] = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
-SRC_URI[doc-comment-0.3.1.sha256sum] = "923dea538cea0aa3025e8685b20d6ee21ef99c4f77e954a30febbaac5ec73a97"
-SRC_URI[either-1.5.2.sha256sum] = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
-SRC_URI[fs_extra-1.1.0.sha256sum] = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674"
-SRC_URI[fuchsia-cprng-0.1.1.sha256sum] = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-SRC_URI[itertools-0.8.0.sha256sum] = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
-SRC_URI[itoa-0.4.4.sha256sum] = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
-SRC_URI[jemalloc-sys-0.1.8.sha256sum] = "bfc62c8e50e381768ce8ee0428ee53741929f7ebd73e4d83f669bcf7693e00ae"
-SRC_URI[jemallocator-0.1.9.sha256sum] = "9f0cd42ac65f758063fea55126b0148b1ce0a6354ff78e07a4d6806bc65c4ab3"
-SRC_URI[lazy_static-1.3.0.sha256sum] = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
-SRC_URI[lexical-core-0.6.7.sha256sum] = "f86d66d380c9c5a685aaac7a11818bdfa1f733198dfd9ec09c70b762cd12ad6f"
-SRC_URI[libc-0.2.62.sha256sum] = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
-SRC_URI[memchr-2.2.1.sha256sum] = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
-SRC_URI[memoffset-0.5.1.sha256sum] = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
-SRC_URI[nodrop-0.1.13.sha256sum] = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
-SRC_URI[num-traits-0.2.8.sha256sum] = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
-SRC_URI[num_cpus-1.10.1.sha256sum] = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
-SRC_URI[proc-macro2-1.0.1.sha256sum] = "4c5c2380ae88876faae57698be9e9775e3544decad214599c3a6266cca6ac802"
-SRC_URI[quote-1.0.2.sha256sum] = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
-SRC_URI[rand_core-0.3.1.sha256sum] = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-SRC_URI[rand_core-0.4.2.sha256sum] = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
-SRC_URI[rand_os-0.1.3.sha256sum] = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
-SRC_URI[rand_xoshiro-0.1.0.sha256sum] = "03b418169fb9c46533f326efd6eed2576699c44ca92d3052a066214a8d828929"
-SRC_URI[rayon-1.1.0.sha256sum] = "a4b0186e22767d5b9738a05eab7c6ac90b15db17e5b5f9bd87976dd7d89a10a4"
-SRC_URI[rayon-core-1.5.0.sha256sum] = "ebbe0df8435ac0c397d467b6cad6d25543d06e8a019ef3f6af3c384597515bd2"
-SRC_URI[rdrand-0.4.0.sha256sum] = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-SRC_URI[regex-1.2.1.sha256sum] = "88c3d9193984285d544df4a30c23a4e62ead42edf70a4452ceb76dac1ce05c26"
-SRC_URI[regex-automata-0.1.8.sha256sum] = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9"
-SRC_URI[regex-syntax-0.6.11.sha256sum] = "b143cceb2ca5e56d5671988ef8b15615733e7ee16cd348e064333b251b89343f"
-SRC_URI[rustc_version-0.2.3.sha256sum] = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-SRC_URI[ryu-1.0.0.sha256sum] = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
-SRC_URI[same-file-1.0.5.sha256sum] = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
-SRC_URI[scopeguard-1.0.0.sha256sum] = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
-SRC_URI[semver-0.9.0.sha256sum] = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-SRC_URI[semver-parser-0.7.0.sha256sum] = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-SRC_URI[serde-1.0.99.sha256sum] = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f"
-SRC_URI[serde_derive-1.0.99.sha256sum] = "cb4dc18c61206b08dc98216c98faa0232f4337e1e1b8574551d5bad29ea1b425"
-SRC_URI[serde_json-1.0.40.sha256sum] = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
-SRC_URI[static_assertions-0.3.4.sha256sum] = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
-SRC_URI[syn-1.0.3.sha256sum] = "158521e6f544e7e3dcfc370ac180794aa38cb34a1b1e07609376d4adcf429b93"
-SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-SRC_URI[thread_local-0.3.6.sha256sum] = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
-SRC_URI[tinytemplate-1.0.2.sha256sum] = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
-SRC_URI[unicode-width-0.1.6.sha256sum] = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
-SRC_URI[unicode-xid-0.2.0.sha256sum] = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-SRC_URI[version_check-0.9.1.sha256sum] = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
-SRC_URI[walkdir-2.2.9.sha256sum] = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
-SRC_URI[winapi-0.3.7.sha256sum] = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
-SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.2.sha256sum] = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
-SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-SRC_URI[arrayvec-0.4.12.sha256sum] = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
-SRC_URI[atty-0.2.13.sha256sum] = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
-SRC_URI[autocfg-0.1.6.sha256sum] = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
-SRC_URI[bitflags-1.2.1.sha256sum] = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-SRC_URI[bstr-0.2.8.sha256sum] = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
-SRC_URI[byteorder-1.3.2.sha256sum] = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
-SRC_URI[c2-chacha-0.2.2.sha256sum] = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
-SRC_URI[cast-0.2.2.sha256sum] = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
-SRC_URI[cfg-if-0.1.10.sha256sum] = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-SRC_URI[clap-2.33.0.sha256sum] = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
-SRC_URI[criterion-0.3.0.sha256sum] = "938703e165481c8d612ea3479ac8342e5615185db37765162e762ec3523e2fc6"
-SRC_URI[criterion-plot-0.4.0.sha256sum] = "eccdc6ce8bbe352ca89025bee672aa6d24f4eb8c53e3a8b5d1bc58011da072a2"
-SRC_URI[crossbeam-deque-0.7.1.sha256sum] = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71"
-SRC_URI[crossbeam-epoch-0.7.2.sha256sum] = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
-SRC_URI[crossbeam-queue-0.1.2.sha256sum] = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
-SRC_URI[crossbeam-utils-0.6.6.sha256sum] = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
-SRC_URI[csv-1.1.1.sha256sum] = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
-SRC_URI[csv-core-0.1.6.sha256sum] = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
-SRC_URI[either-1.5.3.sha256sum] = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
-SRC_URI[getrandom-0.1.12.sha256sum] = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571"
-SRC_URI[itertools-0.8.0.sha256sum] = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
-SRC_URI[itoa-0.4.4.sha256sum] = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
-SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-SRC_URI[libc-0.2.64.sha256sum] = "74dfca3d9957906e8d1e6a0b641dc9a59848e793f1da2165889fd4f62d10d79c"
-SRC_URI[memchr-2.2.1.sha256sum] = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
-SRC_URI[memoffset-0.5.1.sha256sum] = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f"
-SRC_URI[nodrop-0.1.14.sha256sum] = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
-SRC_URI[num-traits-0.2.8.sha256sum] = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
-SRC_URI[num_cpus-1.10.1.sha256sum] = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
-SRC_URI[phf_shared-0.8.0.sha256sum] = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
-SRC_URI[ppv-lite86-0.2.5.sha256sum] = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b"
-SRC_URI[proc-macro2-1.0.5.sha256sum] = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"
-SRC_URI[quote-1.0.2.sha256sum] = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
-SRC_URI[rand-0.7.2.sha256sum] = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
-SRC_URI[rand_chacha-0.2.1.sha256sum] = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
-SRC_URI[rand_core-0.5.1.sha256sum] = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-SRC_URI[rand_hc-0.2.0.sha256sum] = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-SRC_URI[rand_os-0.2.2.sha256sum] = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a"
-SRC_URI[rand_pcg-0.2.0.sha256sum] = "3e196346cbbc5c70c77e7b4926147ee8e383a38ee4d15d58a08098b169e492b6"
-SRC_URI[rand_xoshiro-0.3.1.sha256sum] = "0e18c91676f670f6f0312764c759405f13afb98d5d73819840cf72a518487bff"
-SRC_URI[rayon-1.2.0.sha256sum] = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123"
-SRC_URI[rayon-core-1.6.0.sha256sum] = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b"
-SRC_URI[regex-automata-0.1.8.sha256sum] = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9"
-SRC_URI[rustc_version-0.2.3.sha256sum] = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-SRC_URI[ryu-1.0.2.sha256sum] = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
-SRC_URI[same-file-1.0.5.sha256sum] = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
-SRC_URI[scopeguard-1.0.0.sha256sum] = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
-SRC_URI[semver-0.9.0.sha256sum] = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-SRC_URI[semver-parser-0.7.0.sha256sum] = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-SRC_URI[serde-1.0.101.sha256sum] = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd"
-SRC_URI[serde_derive-1.0.101.sha256sum] = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e"
-SRC_URI[serde_json-1.0.41.sha256sum] = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2"
-SRC_URI[siphasher-0.3.1.sha256sum] = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d"
-SRC_URI[syn-1.0.5.sha256sum] = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
-SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-SRC_URI[tinytemplate-1.0.2.sha256sum] = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20"
-SRC_URI[unicode-width-0.1.6.sha256sum] = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
-SRC_URI[unicode-xid-0.2.0.sha256sum] = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-SRC_URI[walkdir-2.2.9.sha256sum] = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
-SRC_URI[wasi-0.7.0.sha256sum] = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
-SRC_URI[winapi-0.3.8.sha256sum] = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.2.sha256sum] = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
-SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-SRC_URI[base-x-0.2.5.sha256sum] = "76f4eae81729e69bb1819a26c6caac956cc429238388091f98cb6cd858f16443"
-SRC_URI[bumpalo-2.6.0.sha256sum] = "ad807f2fc2bf185eeb98ff3a901bd46dc5ad58163d0fa4577ba0d25674d71708"
-SRC_URI[c2-chacha-0.2.2.sha256sum] = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
-SRC_URI[cfg-if-0.1.9.sha256sum] = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
-SRC_URI[discard-1.0.4.sha256sum] = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
-SRC_URI[getrandom-0.1.12.sha256sum] = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571"
-SRC_URI[itoa-0.4.4.sha256sum] = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
-SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-SRC_URI[libc-0.2.62.sha256sum] = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
-SRC_URI[log-0.4.8.sha256sum] = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
-SRC_URI[packed_simd-0.3.3.sha256sum] = "a85ea9fc0d4ac0deb6fe7911d38786b32fc11119afd9e9d38b84ff691ce64220"
-SRC_URI[ppv-lite86-0.2.5.sha256sum] = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b"
-SRC_URI[proc-macro2-0.4.30.sha256sum] = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
-SRC_URI[proc-macro2-1.0.3.sha256sum] = "e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8"
-SRC_URI[quote-0.6.13.sha256sum] = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
-SRC_URI[quote-1.0.2.sha256sum] = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
-SRC_URI[rand_chacha-0.2.1.sha256sum] = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
-SRC_URI[rand_core-0.5.1.sha256sum] = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-SRC_URI[rand_hc-0.2.0.sha256sum] = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-SRC_URI[rand_pcg-0.2.1.sha256sum] = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
-SRC_URI[rustc_version-0.2.3.sha256sum] = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-SRC_URI[ryu-1.0.0.sha256sum] = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997"
-SRC_URI[semver-0.9.0.sha256sum] = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-SRC_URI[semver-parser-0.7.0.sha256sum] = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-SRC_URI[serde-1.0.100.sha256sum] = "f4473e8506b213730ff2061073b48fa51dcc66349219e2e7c5608f0296a1d95a"
-SRC_URI[serde_derive-1.0.100.sha256sum] = "11e410fde43e157d789fc290d26bc940778ad0fdd47836426fbac36573710dbb"
-SRC_URI[serde_json-1.0.40.sha256sum] = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
-SRC_URI[sha1-0.6.0.sha256sum] = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-SRC_URI[stdweb-0.4.18.sha256sum] = "a68c0ce28cf7400ed022e18da3c4591e14e1df02c70e93573cc59921b3923aeb"
-SRC_URI[stdweb-derive-0.5.1.sha256sum] = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930"
-SRC_URI[stdweb-internal-macros-0.2.7.sha256sum] = "e68f7d08b76979a43e93fe043b66d2626e35d41d68b0b85519202c6dd8ac59fa"
-SRC_URI[stdweb-internal-runtime-0.1.4.sha256sum] = "d52317523542cc0af5b7e31017ad0f7d1e78da50455e38d5657cd17754f617da"
-SRC_URI[syn-0.15.44.sha256sum] = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
-SRC_URI[syn-1.0.5.sha256sum] = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
-SRC_URI[unicode-xid-0.1.0.sha256sum] = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
-SRC_URI[unicode-xid-0.2.0.sha256sum] = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-SRC_URI[wasi-0.7.0.sha256sum] = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
-SRC_URI[wasm-bindgen-0.2.50.sha256sum] = "dcddca308b16cd93c2b67b126c688e5467e4ef2e28200dc7dfe4ae284f2faefc"
-SRC_URI[wasm-bindgen-backend-0.2.50.sha256sum] = "f805d9328b5fc7e5c6399960fd1889271b9b58ae17bdb2417472156cc9fafdd0"
-SRC_URI[wasm-bindgen-macro-0.2.50.sha256sum] = "3ff88201a482abfc63921621f6cb18eb1efd74f136b05e5841e7f8ca434539e9"
-SRC_URI[wasm-bindgen-macro-support-0.2.50.sha256sum] = "6a433d89ecdb9f77d46fcf00c8cf9f3467b7de9954d8710c175f61e2e245bb0e"
-SRC_URI[wasm-bindgen-shared-0.2.50.sha256sum] = "d41fc1bc3570cdf8d108c15e014045fd45a95bb5eb36605f96a90461fc34027d"
+SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
 SRC_URI[autocfg-1.0.1.sha256sum] = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
-SRC_URI[brotli-3.0.3.sha256sum] = "7f29919120f08613aadcd4383764e00526fc9f18b6c0895814faeed0dd78613e"
-SRC_URI[crc-1.8.1.sha256sum] = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb"
-SRC_URI[der-parser-0.5.0.sha256sum] = "0a235b98e742e0687137c26dc4e63fe2a3953a8362dc38527e89e54d1513d548"
-SRC_URI[der-parser-4.1.0.sha256sum] = "caca07c50eaae94d43e21f4d14eca5543b6f5f5ce64715e9b7665ac5f5185b4e"
-SRC_URI[flate2-1.0.20.sha256sum] = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0"
-SRC_URI[ipsec-parser-0.5.0.sha256sum] = "4fa09785b1d327afc9178772b0c8f43b428cbf30d532366fd8e150b98e4fe90a"
-SRC_URI[kerberos-parser-0.5.0.sha256sum] = "58904d6ec6bf7a602f335a9825e96abac9963e27316a6e4681fd10ce15bfcd40"
-SRC_URI[md5-0.7.0.sha256sum] = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
-SRC_URI[memchr-2.3.4.sha256sum] = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
-SRC_URI[nom-5.1.1.sha256sum] = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
-SRC_URI[ntp-parser-0.5.0.sha256sum] = "b4dcbdbccb49a50f69ea3c98155e6e7678b600a3c097f6aac1e7b32d0ba8ffd6"
-SRC_URI[num-0.2.1.sha256sum] = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
-SRC_URI[num-derive-0.2.5.sha256sum] = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2"
-SRC_URI[snmp-parser-0.6.0.sha256sum] = "ce1062255da4ec2ea2f0d985aecf85864a989d6de97883ec4ccca915d8c86a05"
-SRC_URI[tls-parser-0.9.4.sha256sum] = "579c8a8cdde06a13c7209eb7d5c752d1913489ecdb162264503a39ad9053587f"
-SRC_URI[uuid-0.8.2.sha256sum] = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
-SRC_URI[widestring-0.4.3.sha256sum] = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
-SRC_URI[x509-parser-0.6.5.sha256sum] = "99bbe736dd2b422d66e4830f4a06f34387c9814c027efcbda5c2f86463e8e5b0"
-SRC_URI[test-case-1.0.1.sha256sum] = "e8b114c45b5a342ec701e8775ec130bfee537c9d0fedc747594f51d85e7b6988"
-SRC_URI[build_const-0.2.1.sha256sum] = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39"
-SRC_URI[der-oid-macro-0.2.0.sha256sum] = "e66558629d772c3be040566b7be07be8c8f5aecee95e4a092dfe2efc313277ad"
-SRC_URI[proc-macro-hack-0.5.19.sha256sum] = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
-SRC_URI[rusticata-macros-2.1.0.sha256sum] = "f8a9050636e8a1b487ba1fbe99114021cd7594dde3ce6ed95bfc1691e5b5367b"
-SRC_URI[miniz_oxide-0.4.4.sha256sum] = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
-SRC_URI[num-bigint-0.2.6.sha256sum] = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
-SRC_URI[num-complex-0.2.4.sha256sum] = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
-SRC_URI[num-integer-0.1.44.sha256sum] = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
-SRC_URI[num-iter-0.1.42.sha256sum] = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
-SRC_URI[num-rational-0.2.4.sha256sum] = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+SRC_URI[bitflags-1.2.1.sha256sum] = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+SRC_URI[bstr-0.2.16.sha256sum] = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
+SRC_URI[bumpalo-3.7.0.sha256sum] = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
+SRC_URI[cast-0.2.7.sha256sum] = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[clap-2.33.3.sha256sum] = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+SRC_URI[criterion-0.3.4.sha256sum] = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23"
+SRC_URI[criterion-plot-0.4.4.sha256sum] = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57"
+SRC_URI[crossbeam-channel-0.5.1.sha256sum] = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
+SRC_URI[crossbeam-deque-0.8.1.sha256sum] = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+SRC_URI[crossbeam-epoch-0.9.5.sha256sum] = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
+SRC_URI[crossbeam-utils-0.8.5.sha256sum] = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
+SRC_URI[csv-1.1.6.sha256sum] = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+SRC_URI[csv-core-0.1.10.sha256sum] = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+SRC_URI[either-1.6.1.sha256sum] = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+SRC_URI[getrandom-0.2.3.sha256sum] = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+SRC_URI[half-1.7.1.sha256sum] = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3"
+SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+SRC_URI[itertools-0.10.1.sha256sum] = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
+SRC_URI[itoa-0.4.7.sha256sum] = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+SRC_URI[js-sys-0.3.52.sha256sum] = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.99.sha256sum] = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765"
+SRC_URI[log-0.4.14.sha256sum] = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+SRC_URI[memchr-2.4.0.sha256sum] = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
+SRC_URI[memoffset-0.6.4.sha256sum] = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
 SRC_URI[num-traits-0.2.14.sha256sum] = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
-SRC_URI[enum_primitive-0.1.1.sha256sum] = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
-SRC_URI[phf-0.8.0.sha256sum] = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
-SRC_URI[phf_codegen-0.8.0.sha256sum] = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
-SRC_URI[phf_generator-0.8.0.sha256sum] = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
-SRC_URI[base64-0.11.0.sha256sum] = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
-SRC_URI[der-parser-3.0.4.sha256sum] = "f51f64dcdf1cdc550d21d73dc959726c7dbeeab4a01481d08084a7736956464e"
-SRC_URI[time-0.1.44.sha256sum] = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
-SRC_URI[num-traits-0.1.43.sha256sum] = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
-SRC_URI[wasi-0.10.0+wasi-snapshot-preview1.sha256sum] = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
-SRC_URI[lexical-core-0.6.8.sha256sum] = "233853dfa6b87c7c00eb46a205802069263ab27e16b6bdd1b08ddf91a855e30c"
-SRC_URI[num-bigint-0.3.1.sha256sum] = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf"
+SRC_URI[num_cpus-1.13.0.sha256sum] = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+SRC_URI[oorandom-11.1.3.sha256sum] = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+SRC_URI[phf_shared-0.10.0.sha256sum] = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+SRC_URI[plotters-0.3.1.sha256sum] = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a"
+SRC_URI[plotters-backend-0.3.2.sha256sum] = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c"
+SRC_URI[plotters-svg-0.3.1.sha256sum] = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9"
+SRC_URI[ppv-lite86-0.2.10.sha256sum] = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+SRC_URI[proc-macro2-1.0.28.sha256sum] = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
+SRC_URI[quote-1.0.9.sha256sum] = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+SRC_URI[rand-0.8.4.sha256sum] = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
+SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+SRC_URI[rand_core-0.6.3.sha256sum] = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+SRC_URI[rand_hc-0.3.1.sha256sum] = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
+SRC_URI[rayon-1.5.1.sha256sum] = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
+SRC_URI[rayon-core-1.9.1.sha256sum] = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
+SRC_URI[regex-1.5.4.sha256sum] = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
+SRC_URI[regex-automata-0.1.10.sha256sum] = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+SRC_URI[regex-syntax-0.6.25.sha256sum] = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+SRC_URI[ryu-1.0.5.sha256sum] = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+SRC_URI[semver-1.0.4.sha256sum] = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
+SRC_URI[serde-1.0.127.sha256sum] = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8"
+SRC_URI[serde_cbor-0.11.1.sha256sum] = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
+SRC_URI[serde_derive-1.0.127.sha256sum] = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc"
+SRC_URI[serde_json-1.0.66.sha256sum] = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127"
+SRC_URI[siphasher-0.3.6.sha256sum] = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1"
+SRC_URI[syn-1.0.74.sha256sum] = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
+SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+SRC_URI[tinytemplate-1.2.1.sha256sum] = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+SRC_URI[unicode-width-0.1.8.sha256sum] = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+SRC_URI[unicode-xid-0.2.2.sha256sum] = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+SRC_URI[wasi-0.10.2+wasi-snapshot-preview1.sha256sum] = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+SRC_URI[wasm-bindgen-0.2.75.sha256sum] = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586"
+SRC_URI[wasm-bindgen-backend-0.2.75.sha256sum] = "580aa3a91a63d23aac5b6b267e2d13cb4f363e31dce6c352fca4752ae12e479f"
+SRC_URI[wasm-bindgen-macro-0.2.75.sha256sum] = "171ebf0ed9e1458810dfcb31f2e766ad6b3a89dbda42d8901f2b268277e5f09c"
+SRC_URI[wasm-bindgen-macro-support-0.2.75.sha256sum] = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f"
+SRC_URI[wasm-bindgen-shared-0.2.75.sha256sum] = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2"
+SRC_URI[web-sys-0.3.52.sha256sum] = "01c70a82d842c9979078c772d4a1344685045f1a5628f677c2b2eab4dd7d2696"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+# from rust/vendor/x509-parser/Cargo.lock
+SRC_URI += " \
+    crate://crates.io/asn1-rs/0.5.2 \
+    crate://crates.io/asn1-rs-derive/0.4.0 \
+    crate://crates.io/asn1-rs-impl/0.1.0 \
+    crate://crates.io/autocfg/1.1.0 \
+    crate://crates.io/bumpalo/3.12.0 \
+    crate://crates.io/cc/1.0.79 \
+    crate://crates.io/cfg-if/1.0.0 \
+    crate://crates.io/data-encoding/2.3.3 \
+    crate://crates.io/der-parser/8.2.0 \
+    crate://crates.io/displaydoc/0.2.3 \
+    crate://crates.io/itoa/1.0.6 \
+    crate://crates.io/js-sys/0.3.61 \
+    crate://crates.io/lazy_static/1.4.0 \
+    crate://crates.io/libc/0.2.140 \
+    crate://crates.io/log/0.4.17 \
+    crate://crates.io/memchr/2.5.0 \
+    crate://crates.io/minimal-lexical/0.2.1 \
+    crate://crates.io/nom/7.1.3 \
+    crate://crates.io/num-bigint/0.4.3 \
+    crate://crates.io/num-integer/0.1.45 \
+    crate://crates.io/num-traits/0.2.15 \
+    crate://crates.io/oid-registry/0.6.1 \
+    crate://crates.io/once_cell/1.17.1 \
+    crate://crates.io/proc-macro2/1.0.52 \
+    crate://crates.io/quote/1.0.26 \
+    crate://crates.io/ring/0.16.20 \
+    crate://crates.io/rusticata-macros/4.1.0 \
+    crate://crates.io/serde/1.0.156 \
+    crate://crates.io/spin/0.5.2 \
+    crate://crates.io/syn/1.0.109 \
+    crate://crates.io/synstructure/0.12.6 \
+    crate://crates.io/thiserror/1.0.39 \
+    crate://crates.io/thiserror-impl/1.0.39 \
+    crate://crates.io/time/0.3.20 \
+    crate://crates.io/time-core/0.1.0 \
+    crate://crates.io/time-macros/0.2.8 \
+    crate://crates.io/unicode-ident/1.0.8 \
+    crate://crates.io/unicode-xid/0.2.4 \
+    crate://crates.io/untrusted/0.7.1 \
+    crate://crates.io/wasm-bindgen/0.2.84 \
+    crate://crates.io/wasm-bindgen-backend/0.2.84 \
+    crate://crates.io/wasm-bindgen-macro/0.2.84 \
+    crate://crates.io/wasm-bindgen-macro-support/0.2.84 \
+    crate://crates.io/wasm-bindgen-shared/0.2.84 \
+    crate://crates.io/web-sys/0.3.61 \
+    crate://crates.io/winapi/0.3.9 \
+    crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+    crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+"
 
+SRC_URI[asn1-rs-0.5.2.sha256sum] = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
+SRC_URI[asn1-rs-derive-0.4.0.sha256sum] = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
+SRC_URI[asn1-rs-impl-0.1.0.sha256sum] = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bumpalo-3.12.0.sha256sum] = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[data-encoding-2.3.3.sha256sum] = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+SRC_URI[der-parser-8.2.0.sha256sum] = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
+SRC_URI[displaydoc-0.2.3.sha256sum] = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+SRC_URI[js-sys-0.3.61.sha256sum] = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[libc-0.2.140.sha256sum] = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[oid-registry-0.6.1.sha256sum] = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
+SRC_URI[once_cell-1.17.1.sha256sum] = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+SRC_URI[proc-macro2-1.0.52.sha256sum] = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
+SRC_URI[quote-1.0.26.sha256sum] = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+SRC_URI[ring-0.16.20.sha256sum] = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
+SRC_URI[serde-1.0.156.sha256sum] = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
+SRC_URI[spin-0.5.2.sha256sum] = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+SRC_URI[thiserror-1.0.39.sha256sum] = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
+SRC_URI[thiserror-impl-1.0.39.sha256sum] = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
+SRC_URI[time-0.3.20.sha256sum] = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+SRC_URI[time-core-0.1.0.sha256sum] = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+SRC_URI[time-macros-0.2.8.sha256sum] = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+SRC_URI[unicode-ident-1.0.8.sha256sum] = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+SRC_URI[untrusted-0.7.1.sha256sum] = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+SRC_URI[wasm-bindgen-0.2.84.sha256sum] = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+SRC_URI[wasm-bindgen-backend-0.2.84.sha256sum] = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+SRC_URI[wasm-bindgen-macro-0.2.84.sha256sum] = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+SRC_URI[wasm-bindgen-macro-support-0.2.84.sha256sum] = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+SRC_URI[wasm-bindgen-shared-0.2.84.sha256sum] = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+SRC_URI[web-sys-0.3.61.sha256sum] = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/meta-security/recipes-ids/suricata/suricata_6.0.11.bb b/meta-security/recipes-ids/suricata/suricata_6.0.11.bb
deleted file mode 100644
index 914278e..0000000
--- a/meta-security/recipes-ids/suricata/suricata_6.0.11.bb
+++ /dev/null
@@ -1,123 +0,0 @@
-SUMMARY = "The Suricata Engine is an Open Source Next Generation Intrusion Detection and Prevention Engine"
-
-require suricata.inc
-
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=2;md5=c70d8d3310941dcdfcd1e02800a1f548"
-
-SRC_URI = "http://www.openinfosecfoundation.org/download/suricata-${PV}.tar.gz"
-SRC_URI[sha256sum] = "4da5e4e91e49992633a6024ce10afe6441255b2775a8f20f1ef188bd1129ac66"
-
-DEPENDS = "lz4 libhtp"
-
-SRC_URI += " \
-    file://volatiles.03_suricata \
-    file://tmpfiles.suricata \
-    file://suricata.yaml \
-    file://suricata.service \
-    file://run-ptest \
-    file://fixup.patch \
-    "
-
-inherit autotools pkgconfig python3native systemd ptest cargo cargo-update-recipe-crates
-
-require  ${BPN}-crates.inc
-
-EXTRA_OECONF += " --disable-debug \
-    --disable-gccmarch-native \
-    --enable-non-bundled-htp \
-    --disable-suricata-update \
-    --with-libhtp-includes=${STAGING_INCDIR} --with-libhtp-libraries=${STAGING_LIBDIR} \
-    "
-
-CARGO_SRC_DIR = "rust"
-#CARGO_LOCK_SRC_DIR = "${S}/rust"
-
-B = "${S}"
-
-# nfnetlink has a dependancy to meta-networking
-PACKAGECONFIG ??= "jansson file pcre yaml python pcap cap-ng net nss nspr "
-PACKAGECONFIG:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'unittests', '', d)}"
-
-PACKAGECONFIG[pcre] = "--with-libpcre-includes=${STAGING_INCDIR} --with-libpcre-libraries=${STAGING_LIBDIR}, ,libpcre ," 
-PACKAGECONFIG[yaml] = "--with-libyaml-includes=${STAGING_INCDIR} --with-libyaml-libraries=${STAGING_LIBDIR}, ,libyaml ,"
-PACKAGECONFIG[pcap] = "--with-libpcap-includes=${STAGING_INCDIR} --with-libpcap-libraries=${STAGING_LIBDIR}, ,libpcap" 
-PACKAGECONFIG[cap-ng] = "--with-libcap_ng-includes=${STAGING_INCDIR} --with-libcap_ng-libraries=${STAGING_LIBDIR}, ,libcap-ng , "
-PACKAGECONFIG[net] = "--with-libnet-includes=${STAGING_INCDIR} --with-libnet-libraries=${STAGING_LIBDIR}, , libnet," 
-PACKAGECONFIG[nfnetlink] = "--with-libnfnetlink-includes=${STAGING_INCDIR} --with-libnfnetlink-libraries=${STAGING_LIBDIR}, ,libnfnetlink ,"
-PACKAGECONFIG[nfq] = "--enable-nfqueue, --disable-nfqueue,libnetfilter-queue,"
-
-PACKAGECONFIG[jansson] = "--with-libjansson-includes=${STAGING_INCDIR} --with-libjansson-libraries=${STAGING_LIBDIR},,jansson, jansson"
-PACKAGECONFIG[file] = ",,file, file"
-PACKAGECONFIG[nss] = "--with-libnss-includes=${STAGING_INCDIR} --with-libnss-libraries=${STAGING_LIBDIR}, nss, nss," 
-PACKAGECONFIG[nspr] = "--with-libnspr-includes=${STAGING_INCDIR} --with-libnspr-libraries=${STAGING_LIBDIR}, nspr, nspr," 
-PACKAGECONFIG[python] = "--enable-python, --disable-python, python3, python3-core" 
-PACKAGECONFIG[unittests] = "--enable-unittests, --disable-unittests," 
-
-export logdir = "${localstatedir}/log"
-
-CACHED_CONFIGUREVARS = "ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes"
-
-do_configure:prepend () {
-    # use host for RUST_SURICATA_LIB_XC_DIR
-    sed -i -e 's,\${host_alias},${RUST_HOST_SYS},' ${S}/configure.ac
-    oe_runconf
-}
-
-do_compile () {
-    # we do this to bypass the make provided by this pkg 
-    # patches Makefile to skip the subdir
-    cargo_do_compile
-
-    # Finish building
-    cd ${S}
-    make
-}
-
-do_install () {
-    install -d ${D}${sysconfdir}/suricata
-
-    oe_runmake install DESTDIR=${D}
-
-    install -d ${D}${sysconfdir}/suricata ${D}${sysconfdir}/default/volatiles
-    install -m 0644 ${WORKDIR}/volatiles.03_suricata  ${D}${sysconfdir}/default/volatiles/03_suricata
-
-    install -m 0644 ${S}/threshold.config ${D}${sysconfdir}/suricata
-    install -m 0644 ${S}/suricata.yaml ${D}${sysconfdir}/suricata
-
-    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        install -d ${D}${sysconfdir}/tmpfiles.d
-        install -m 0644 ${WORKDIR}/tmpfiles.suricata ${D}${sysconfdir}/tmpfiles.d/suricata.conf
-
-        install -d ${D}${systemd_unitdir}/system
-        sed  -e s:/etc:${sysconfdir}:g \
-             -e s:/var/run:/run:g \
-             -e s:/var:${localstatedir}:g \
-             -e s:/usr/bin:${bindir}:g \
-             -e s:/bin/kill:${base_bindir}/kill:g \
-             -e s:/usr/lib:${libdir}:g \
-             ${WORKDIR}/suricata.service > ${D}${systemd_unitdir}/system/suricata.service
-    fi
-
-    # Remove /var/run as it is created on startup
-    rm -rf ${D}${localstatedir}/run
-
-    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${bindir}/suricatasc
-    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${bindir}/suricatactl
-    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${libdir}/suricata/python/suricata/sc/suricatasc.py
-}
-
-pkg_postinst_ontarget:${PN} () {
-if command -v systemd-tmpfiles >/dev/null; then
-    systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/suricata.conf
-elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
-    ${sysconfdir}/init.d/populate-volatile.sh update
-fi
-}
-
-SYSTEMD_PACKAGES = "${PN}"
-
-PACKAGES =+ "${PN}-python"
-FILES:${PN} += "${systemd_unitdir} ${sysconfdir}/tmpfiles.d"
-FILES:${PN}-python = "${bindir}/suricatasc ${PYTHON_SITEPACKAGES_DIR}"
-
-CONFFILES:${PN} = "${sysconfdir}/suricata/suricata.yaml"
diff --git a/meta-security/recipes-ids/suricata/suricata_7.0.0.bb b/meta-security/recipes-ids/suricata/suricata_7.0.0.bb
new file mode 100644
index 0000000..a52f081
--- /dev/null
+++ b/meta-security/recipes-ids/suricata/suricata_7.0.0.bb
@@ -0,0 +1,126 @@
+SUMMARY = "The Suricata Engine is an Open Source Next Generation Intrusion Detection and Prevention Engine"
+
+require suricata.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;beginline=1;endline=2;md5=c70d8d3310941dcdfcd1e02800a1f548"
+
+SRC_URI = "http://www.openinfosecfoundation.org/download/suricata-${PV}.tar.gz"
+SRC_URI[sha256sum] = "7bcd1313118366451465dc3f8385a3f6aadd084ffe44dd257dda8105863bb769"
+
+DEPENDS = "lz4 libhtp"
+
+SRC_URI += " \
+    file://volatiles.03_suricata \
+    file://tmpfiles.suricata \
+    file://suricata.yaml \
+    file://suricata.service \
+    file://run-ptest \
+    file://fixup.patch \
+    "
+
+inherit autotools pkgconfig python3native systemd ptest cargo cargo-update-recipe-crates
+
+require  ${BPN}-crates.inc
+
+EXTRA_OECONF += " --disable-debug \
+    --disable-gccmarch-native \
+    --enable-non-bundled-htp \
+    --disable-suricata-update \
+    --with-libhtp-includes=${STAGING_INCDIR} --with-libhtp-libraries=${STAGING_LIBDIR} \
+    "
+
+CARGO_SRC_DIR = "rust"
+
+CARGO_BUILD_FLAGS:remove = "--frozen"
+CARGO_BUILD_FLAGS:append = " --offline"
+
+B = "${S}"
+
+# nfnetlink has a dependancy to meta-networking
+PACKAGECONFIG ??= "jansson file pcre2 yaml python pcap cap-ng net nss nspr "
+PACKAGECONFIG:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'unittests', '', d)}"
+
+PACKAGECONFIG[pcre2] = "--with-libpcre2-includes=${STAGING_INCDIR} --with-libpcre2-libraries=${STAGING_LIBDIR}, ,libpcre2 ," 
+PACKAGECONFIG[yaml] = "--with-libyaml-includes=${STAGING_INCDIR} --with-libyaml-libraries=${STAGING_LIBDIR}, ,libyaml ,"
+PACKAGECONFIG[pcap] = "--with-libpcap-includes=${STAGING_INCDIR} --with-libpcap-libraries=${STAGING_LIBDIR}, ,libpcap" 
+PACKAGECONFIG[cap-ng] = "--with-libcap_ng-includes=${STAGING_INCDIR} --with-libcap_ng-libraries=${STAGING_LIBDIR}, ,libcap-ng , "
+PACKAGECONFIG[net] = "--with-libnet-includes=${STAGING_INCDIR} --with-libnet-libraries=${STAGING_LIBDIR}, , libnet," 
+PACKAGECONFIG[nfnetlink] = "--with-libnfnetlink-includes=${STAGING_INCDIR} --with-libnfnetlink-libraries=${STAGING_LIBDIR}, ,libnfnetlink ,"
+PACKAGECONFIG[nfq] = "--enable-nfqueue, --disable-nfqueue,libnetfilter-queue,"
+
+PACKAGECONFIG[jansson] = "--with-libjansson-includes=${STAGING_INCDIR} --with-libjansson-libraries=${STAGING_LIBDIR},,jansson, jansson"
+PACKAGECONFIG[file] = ",,file, file"
+PACKAGECONFIG[nss] = "--with-libnss-includes=${STAGING_INCDIR} --with-libnss-libraries=${STAGING_LIBDIR}, nss, nss," 
+PACKAGECONFIG[nspr] = "--with-libnspr-includes=${STAGING_INCDIR} --with-libnspr-libraries=${STAGING_LIBDIR}, nspr, nspr," 
+PACKAGECONFIG[python] = "--enable-python, --disable-python, python3, python3-core" 
+PACKAGECONFIG[unittests] = "--enable-unittests, --disable-unittests," 
+
+export logdir = "${localstatedir}/log"
+
+CACHED_CONFIGUREVARS = "ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes"
+
+do_configure:prepend () {
+    # use host for RUST_SURICATA_LIB_XC_DIR
+    sed -i -e 's,\${host_alias},${RUST_HOST_SYS},' ${S}/configure.ac
+    sed -i -e 's,libsuricata_rust.a,libsuricata.a,' ${S}/configure.ac
+    oe_runconf
+}
+
+do_compile () {
+    # we do this to bypass the make provided by this pkg 
+    # patches Makefile to skip the subdir
+    cargo_do_compile
+
+    # Finish building
+    cd ${S}
+    make
+}
+
+do_install () {
+    install -d ${D}${sysconfdir}/suricata
+
+    oe_runmake install DESTDIR=${D}
+
+    install -d ${D}${sysconfdir}/suricata ${D}${sysconfdir}/default/volatiles
+    install -m 0644 ${WORKDIR}/volatiles.03_suricata  ${D}${sysconfdir}/default/volatiles/03_suricata
+
+    install -m 0644 ${S}/threshold.config ${D}${sysconfdir}/suricata
+    install -m 0644 ${S}/suricata.yaml ${D}${sysconfdir}/suricata
+
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${sysconfdir}/tmpfiles.d
+        install -m 0644 ${WORKDIR}/tmpfiles.suricata ${D}${sysconfdir}/tmpfiles.d/suricata.conf
+
+        install -d ${D}${systemd_unitdir}/system
+        sed  -e s:/etc:${sysconfdir}:g \
+             -e s:/var/run:/run:g \
+             -e s:/var:${localstatedir}:g \
+             -e s:/usr/bin:${bindir}:g \
+             -e s:/bin/kill:${base_bindir}/kill:g \
+             -e s:/usr/lib:${libdir}:g \
+             ${WORKDIR}/suricata.service > ${D}${systemd_unitdir}/system/suricata.service
+    fi
+
+    # Remove /var/run as it is created on startup
+    rm -rf ${D}${localstatedir}/run
+
+    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${bindir}/suricatasc
+    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${bindir}/suricatactl
+    sed -i -e "s:#!.*$:#!${USRBINPATH}/env ${PYTHON_PN}:g" ${D}${libdir}/suricata/python/suricata/sc/suricatasc.py
+}
+
+pkg_postinst_ontarget:${PN} () {
+if command -v systemd-tmpfiles >/dev/null; then
+    systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/suricata.conf
+elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+    ${sysconfdir}/init.d/populate-volatile.sh update
+fi
+}
+
+SYSTEMD_PACKAGES = "${PN}"
+
+PACKAGES =+ "${PN}-python"
+FILES:${PN} += "${systemd_unitdir} ${sysconfdir}/tmpfiles.d"
+FILES:${PN}-python = "${bindir}/suricatasc ${PYTHON_SITEPACKAGES_DIR}"
+
+CONFFILES:${PN} = "${sysconfdir}/suricata/suricata.yaml"
diff --git a/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.6.bb b/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.6.bb
deleted file mode 100644
index 421d924..0000000
--- a/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.6.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Linux Kernel Runtime Guard"
-DESCRIPTION="LKRG performs runtime integrity checking of the Linux \
-kernel and detection of security vulnerability exploits against the kernel."
-SECTION = "security"
-HOMEPAGE = "https://www.openwall.com/lkrg/"
-LICENSE = "GPL-2.0-only"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3f3e5dd56319d33a1944d635c1c86c6f"
-
-DEPENDS = "virtual/kernel elfutils"
-
-SRC_URI = "git://github.com/lkrg-org/lkrg.git;protocol=https;branch=main"
-
-SRCREV = "2481b3e2dd04eac945c31f99058b0aeee73c3a71"
-
-S = "${WORKDIR}/git"
-
-inherit module kernel-module-split
-
-MAKE_TARGETS = "modules"
-
-MODULE_NAME = "lkrg"
-
-do_configure:append () {
-    sed -i -e 's/^all/modules/' ${S}/Makefile
-    sed -i -e 's/^install/modules_install/' ${S}/Makefile
-    sed -i -e 's/KERNEL/KERNEL_SRC/g' ${S}/Makefile
-}
-
-module_do_install() {
-    install -d ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}
-    install -m 0644 ${MODULE_NAME}.ko \
-    ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}/${MODULE_NAME}.ko
-}
-
-RPROVIDES:${PN} += "kernel-module-lkrg"
-
-COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
diff --git a/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.7.bb b/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.7.bb
new file mode 100644
index 0000000..020c3a1
--- /dev/null
+++ b/meta-security/recipes-kernel/lkrg/lkrg-module_0.9.7.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Linux Kernel Runtime Guard"
+DESCRIPTION="LKRG performs runtime integrity checking of the Linux \
+kernel and detection of security vulnerability exploits against the kernel."
+SECTION = "security"
+HOMEPAGE = "https://www.openwall.com/lkrg/"
+LICENSE = "GPL-2.0-only"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=57534ed9f03a5810945cd9be4a81db41"
+
+DEPENDS = "virtual/kernel elfutils"
+
+SRC_URI = "git://github.com/lkrg-org/lkrg.git;protocol=https;branch=main"
+
+SRCREV = "5dc5cfea1f4dc8febdd5274d99e277c17df06acc"
+
+S = "${WORKDIR}/git"
+
+inherit module kernel-module-split
+
+MAKE_TARGETS = "modules"
+
+MODULE_NAME = "lkrg"
+
+do_configure:append () {
+    sed -i -e 's/^all/modules/' ${S}/Makefile
+    sed -i -e 's/^install/modules_install/' ${S}/Makefile
+    sed -i -e 's/KERNEL/KERNEL_SRC/g' ${S}/Makefile
+}
+
+module_do_install() {
+    install -d ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}
+    install -m 0644 ${MODULE_NAME}.ko \
+    ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}/${MODULE_NAME}.ko
+}
+
+RPROVIDES:${PN} += "kernel-module-lkrg"
+
+COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux"
diff --git a/poky/bitbake/bin/bitbake-getvar b/poky/bitbake/bin/bitbake-getvar
index 4a9eb4f..8901f99 100755
--- a/poky/bitbake/bin/bitbake-getvar
+++ b/poky/bitbake/bin/bitbake-getvar
@@ -26,26 +26,35 @@
     parser.add_argument('-f', '--flag', help='Specify a variable flag to query (with --value)', default=None)
     parser.add_argument('--value', help='Only report the value, no history and no variable name', action="store_true")
     parser.add_argument('-q', '--quiet', help='Silence bitbake server logging', action="store_true")
+    parser.add_argument('--ignore-undefined', help='Suppress any errors related to undefined variables', action="store_true")
     args = parser.parse_args()
 
-    if args.unexpand and not args.value:
-        print("--unexpand only makes sense with --value")
-        sys.exit(1)
+    if not args.value:
+        if args.unexpand:
+            sys.exit("--unexpand only makes sense with --value")
 
-    if args.flag and not args.value:
-        print("--flag only makes sense with --value")
-        sys.exit(1)
+        if args.flag:
+            sys.exit("--flag only makes sense with --value")
 
-    with bb.tinfoil.Tinfoil(tracking=True, setup_logging=not args.quiet) as tinfoil:
+    quiet = args.quiet or args.value
+    with bb.tinfoil.Tinfoil(tracking=True, setup_logging=not quiet) as tinfoil:
         if args.recipe:
-            tinfoil.prepare(quiet=2)
+            tinfoil.prepare(quiet=3 if quiet else 2)
             d = tinfoil.parse_recipe(args.recipe)
         else:
             tinfoil.prepare(quiet=2, config_only=True)
             d = tinfoil.config_data
+
+        value = None
         if args.flag:
-            print(str(d.getVarFlag(args.variable, args.flag, expand=(not args.unexpand))))
-        elif args.value:
-            print(str(d.getVar(args.variable, expand=(not args.unexpand))))
+            value = d.getVarFlag(args.variable, args.flag, expand=not args.unexpand)
+            if value is None and not args.ignore_undefined:
+                sys.exit(f"The flag '{args.flag}' is not defined for variable '{args.variable}'")
+        else:
+            value = d.getVar(args.variable, expand=not args.unexpand)
+            if value is None and not args.ignore_undefined:
+                sys.exit(f"The variable '{args.variable}' is not defined")
+        if args.value:
+            print(str(value if value is not None else ""))
         else:
             bb.data.emit_var(args.variable, d=d, all=True)
diff --git a/poky/bitbake/bin/bitbake-worker b/poky/bitbake/bin/bitbake-worker
index 451e692..609e276 100755
--- a/poky/bitbake/bin/bitbake-worker
+++ b/poky/bitbake/bin/bitbake-worker
@@ -91,19 +91,19 @@
 worker_thread_exit = False
 
 def worker_flush(worker_queue):
-    worker_queue_int = b""
+    worker_queue_int = bytearray()
     global worker_pipe, worker_thread_exit
 
     while True:
         try:
-            worker_queue_int = worker_queue_int + worker_queue.get(True, 1)
+            worker_queue_int.extend(worker_queue.get(True, 1))
         except queue.Empty:
             pass
         while (worker_queue_int or not worker_queue.empty()):
             try:
                 (_, ready, _) = select.select([], [worker_pipe], [], 1)
                 if not worker_queue.empty():
-                    worker_queue_int = worker_queue_int + worker_queue.get()
+                    worker_queue_int.extend(worker_queue.get())
                 written = os.write(worker_pipe, worker_queue_int)
                 worker_queue_int = worker_queue_int[written:]
             except (IOError, OSError) as e:
@@ -346,12 +346,12 @@
         if pipeout:
             pipeout.close()
         bb.utils.nonblockingfd(self.input)
-        self.queue = b""
+        self.queue = bytearray()
 
     def read(self):
         start = len(self.queue)
         try:
-            self.queue = self.queue + (self.input.read(102400) or b"")
+            self.queue.extend(self.input.read(102400) or b"")
         except (OSError, IOError) as e:
             if e.errno != errno.EAGAIN:
                 raise
@@ -379,7 +379,7 @@
     def __init__(self, din):
         self.input = din
         bb.utils.nonblockingfd(self.input)
-        self.queue = b""
+        self.queue = bytearray()
         self.cookercfg = None
         self.databuilder = None
         self.data = None
@@ -413,7 +413,7 @@
                     if len(r) == 0:
                         # EOF on pipe, server must have terminated
                         self.sigterm_exception(signal.SIGTERM, None)
-                    self.queue = self.queue + r
+                    self.queue.extend(r)
                 except (OSError, IOError):
                     pass
             if len(self.queue):
diff --git a/poky/bitbake/lib/bb/codeparser.py b/poky/bitbake/lib/bb/codeparser.py
index d6b8102..eabeda5 100644
--- a/poky/bitbake/lib/bb/codeparser.py
+++ b/poky/bitbake/lib/bb/codeparser.py
@@ -82,7 +82,7 @@
                 execs.remove(e)
                 execs.add(namespace + "." + e)
         modulecode_deps[name] = [parser.references.copy(), execs, parser.var_execs.copy(), parser.contains.copy()]
-        #bb.warn("%s: %s\nRefs:%s Execs: %s %s %s" % (name, src, parser.references, parser.execs, parser.var_execs, parser.contains))
+        #bb.warn("%s: %s\nRefs:%s Execs: %s %s %s" % (name, fn, parser.references, parser.execs, parser.var_execs, parser.contains))
 
 def update_module_dependencies(d):
     for mod in modulecode_deps:
diff --git a/poky/bitbake/lib/bb/command.py b/poky/bitbake/lib/bb/command.py
index b494f84..f2ee587 100644
--- a/poky/bitbake/lib/bb/command.py
+++ b/poky/bitbake/lib/bb/command.py
@@ -85,8 +85,6 @@
                 if not hasattr(command_method, 'readonly') or not getattr(command_method, 'readonly'):
                     return None, "Not able to execute not readonly commands in readonly mode"
             try:
-                if command != "ping":
-                    self.cooker.process_inotify_updates_apply()
                 if getattr(command_method, 'needconfig', True):
                     self.cooker.updateCacheSync()
                 result = command_method(self, commandline)
@@ -110,7 +108,6 @@
 
     def runAsyncCommand(self, _, process_server, halt):
         try:
-            self.cooker.process_inotify_updates_apply()
             if self.cooker.state in (bb.cooker.state.error, bb.cooker.state.shutdown, bb.cooker.state.forceshutdown):
                 # updateCache will trigger a shutdown of the parser
                 # and then raise BBHandledException triggering an exit
@@ -310,6 +307,11 @@
         return ret
     getLayerPriorities.readonly = True
 
+    def revalidateCaches(self, command, params):
+        """Called by UI clients when metadata may have changed"""
+        command.cooker.revalidateCaches()
+    parseConfiguration.needconfig = False
+
     def getRecipes(self, command, params):
         try:
             mc = params[0]
@@ -779,3 +781,9 @@
         bb.event.fire(bb.event.FindSigInfoResult(res), command.cooker.databuilder.mcdata[mc])
         command.finishAsyncCommand()
     findSigInfo.needcache = False
+
+    def getTaskSignatures(self, command, params):
+        res = command.cooker.getTaskSignatures(params[0], params[1])
+        bb.event.fire(bb.event.GetTaskSignatureResult(res), command.cooker.data)
+        command.finishAsyncCommand()
+    getTaskSignatures.needcache = True
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index 064e3ca..599c7dd 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -22,7 +22,6 @@
 import queue
 import signal
 import prserv.serv
-import pyinotify
 import json
 import pickle
 import codecs
@@ -173,17 +172,9 @@
             self.waitIdle = server.wait_for_idle
 
         bb.debug(1, "BBCooker starting %s" % time.time())
-        sys.stdout.flush()
 
-        self.configwatcher = None
-        self.confignotifier = None
-
-        self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \
-                         pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \
-                         pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO
-
-        self.watcher = None
-        self.notifier = None
+        self.configwatched = {}
+        self.parsewatched = {}
 
         # If being called by something like tinfoil, we need to clean cached data
         # which may now be invalid
@@ -194,8 +185,6 @@
         self.hashserv = None
         self.hashservaddr = None
 
-        self.inotify_modified_files = []
-
         # TOSTOP must not be set or our children will hang when they output
         try:
             fd = sys.stdout.fileno()
@@ -219,53 +208,13 @@
         signal.signal(signal.SIGHUP, self.sigterm_exception)
 
         bb.debug(1, "BBCooker startup complete %s" % time.time())
-        sys.stdout.flush()
-
-        self.inotify_threadlock = threading.Lock()
 
     def init_configdata(self):
         if not hasattr(self, "data"):
             self.initConfigurationData()
             bb.debug(1, "BBCooker parsed base configuration %s" % time.time())
-            sys.stdout.flush()
             self.handlePRServ()
 
-    def setupConfigWatcher(self):
-        with bb.utils.lock_timeout(self.inotify_threadlock):
-            if self.configwatcher:
-                self.configwatcher.close()
-                self.confignotifier = None
-                self.configwatcher = None
-            self.configwatcher = pyinotify.WatchManager()
-            self.configwatcher.bbseen = set()
-            self.configwatcher.bbwatchedfiles = set()
-            self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications)
-
-    def setupParserWatcher(self):
-        with bb.utils.lock_timeout(self.inotify_threadlock):
-            if self.watcher:
-                self.watcher.close()
-                self.notifier = None
-                self.watcher = None
-            self.watcher = pyinotify.WatchManager()
-            self.watcher.bbseen = set()
-            self.watcher.bbwatchedfiles = set()
-            self.notifier = pyinotify.Notifier(self.watcher, self.notifications)
-
-    def process_inotify_updates(self):
-        with bb.utils.lock_timeout(self.inotify_threadlock):
-            for n in [self.confignotifier, self.notifier]:
-                if n and n.check_events(timeout=0):
-                    # read notified events and enqueue them
-                    n.read_events()
-
-    def process_inotify_updates_apply(self):
-        with bb.utils.lock_timeout(self.inotify_threadlock):
-            for n in [self.confignotifier, self.notifier]:
-                if n and n.check_events(timeout=0):
-                    n.read_events()
-                    n.process_events()
-
     def _baseconfig_set(self, value):
         if value and not self.baseconfig_valid:
             bb.server.process.serverlog("Base config valid")
@@ -280,88 +229,16 @@
             bb.server.process.serverlog("Parse cache invalidated")
         self.parsecache_valid = value
 
-    def config_notifications(self, event):
-        if event.maskname == "IN_Q_OVERFLOW":
-            bb.warn("inotify event queue overflowed, invalidating caches.")
-            self._parsecache_set(False)
-            self._baseconfig_set(False)
-            bb.parse.clear_cache()
-            return
-        if not event.pathname in self.configwatcher.bbwatchedfiles:
-            return
-        if "IN_ISDIR" in event.maskname:
-            if "IN_CREATE" in event.maskname or "IN_DELETE" in event.maskname:
-                if event.pathname in self.configwatcher.bbseen:
-                    self.configwatcher.bbseen.remove(event.pathname)
-                # Could remove all entries starting with the directory but for now...
-                bb.parse.clear_cache()
-        if not event.pathname in self.inotify_modified_files:
-            self.inotify_modified_files.append(event.pathname)
-        self._baseconfig_set(False)
+    def add_filewatch(self, deps, configwatcher=False):
+        if configwatcher:
+            watcher = self.configwatched
+        else:
+            watcher = self.parsewatched
 
-    def notifications(self, event):
-        if event.maskname == "IN_Q_OVERFLOW":
-            bb.warn("inotify event queue overflowed, invalidating caches.")
-            self._parsecache_set(False)
-            bb.parse.clear_cache()
-            return
-        if event.pathname.endswith("bitbake-cookerdaemon.log") \
-                or event.pathname.endswith("bitbake.lock"):
-            return
-        if "IN_ISDIR" in event.maskname:
-            if "IN_CREATE" in event.maskname or "IN_DELETE" in event.maskname:
-                if event.pathname in self.watcher.bbseen:
-                    self.watcher.bbseen.remove(event.pathname)
-                # Could remove all entries starting with the directory but for now...
-                bb.parse.clear_cache()
-        if not event.pathname in self.inotify_modified_files:
-            self.inotify_modified_files.append(event.pathname)
-        self._parsecache_set(False)
-
-    def add_filewatch(self, deps, watcher=None, dirs=False):
-        if not watcher:
-            watcher = self.watcher
         for i in deps:
-            watcher.bbwatchedfiles.add(i[0])
-            if dirs:
-                f = i[0]
-            else:
-                f = os.path.dirname(i[0])
-            if f in watcher.bbseen:
-                continue
-            watcher.bbseen.add(f)
-            watchtarget = None
-            while True:
-                # We try and add watches for files that don't exist but if they did, would influence
-                # the parser. The parent directory of these files may not exist, in which case we need
-                # to watch any parent that does exist for changes.
-                try:
-                    watcher.add_watch(f, self.watchmask, quiet=False)
-                    if watchtarget:
-                        watcher.bbwatchedfiles.add(watchtarget)
-                    break
-                except pyinotify.WatchManagerError as e:
-                    if 'ENOENT' in str(e):
-                        watchtarget = f
-                        f = os.path.dirname(f)
-                        if f in watcher.bbseen:
-                            break
-                        watcher.bbseen.add(f)
-                        continue
-                    if 'ENOSPC' in str(e):
-                        providerlog.error("No space left on device or exceeds fs.inotify.max_user_watches?")
-                        providerlog.error("To check max_user_watches: sysctl -n fs.inotify.max_user_watches.")
-                        providerlog.error("To modify max_user_watches: sysctl -n -w fs.inotify.max_user_watches=<value>.")
-                        providerlog.error("Root privilege is required to modify max_user_watches.")
-                    raise
-
-    def handle_inotify_updates(self):
-        # reload files for which we got notifications
-        for p in self.inotify_modified_files:
-            bb.parse.update_cache(p)
-            if p in bb.parse.BBHandler.cached_statements:
-                del bb.parse.BBHandler.cached_statements[p]
-        self.inotify_modified_files = []
+            f = i[0]
+            mtime = i[1]
+            watcher[f] = mtime
 
     def sigterm_exception(self, signum, stackframe):
         if signum == signal.SIGTERM:
@@ -392,8 +269,7 @@
             if mod not in self.orig_sysmodules:
                 del sys.modules[mod]
 
-        self.handle_inotify_updates()
-        self.setupConfigWatcher()
+        self.configwatched = {}
 
         # Need to preserve BB_CONSOLELOG over resets
         consolelog = None
@@ -436,7 +312,7 @@
             self.disableDataTracking()
 
         for mc in self.databuilder.mcdata.values():
-            self.add_filewatch(mc.getVar("__base_depends", False), self.configwatcher)
+            self.add_filewatch(mc.getVar("__base_depends", False), configwatcher=True)
 
         self._baseconfig_set(True)
         self._parsecache_set(False)
@@ -486,6 +362,29 @@
         if hasattr(self, "data"):
             self.data.disableTracking()
 
+    def revalidateCaches(self):
+        bb.parse.clear_cache()
+
+        clean = True
+        for f in self.configwatched:
+            if not bb.parse.check_mtime(f, self.configwatched[f]):
+                bb.server.process.serverlog("Found %s changed, invalid cache" % f)
+                self._baseconfig_set(False)
+                self._parsecache_set(False)
+                clean = False
+                break
+
+        if clean:
+            for f in self.parsewatched:
+                if not bb.parse.check_mtime(f, self.parsewatched[f]):
+                    bb.server.process.serverlog("Found %s changed, invalid cache" % f)
+                    self._parsecache_set(False)
+                    clean = False
+                    break
+
+        if not clean:
+            bb.parse.BBHandler.cached_statements = {}
+
     def parseConfiguration(self):
         self.updateCacheSync()
 
@@ -566,6 +465,7 @@
         # Now update all the variables not in the datastore to match
         self.configuration.env = environment
 
+        self.revalidateCaches()
         if not clean:
             logger.debug("Base environment change, triggering reparse")
             self.reset()
@@ -1542,6 +1442,37 @@
 
         self.idleCallBackRegister(buildFileIdle, rq)
 
+    def getTaskSignatures(self, target, tasks):
+        sig = []
+        getAllTaskSignatures = False
+
+        if not tasks:
+            tasks = ["do_build"]
+            getAllTaskSignatures = True
+
+        for task in tasks:
+            taskdata, runlist = self.buildTaskData(target, task, self.configuration.halt)
+            rq = bb.runqueue.RunQueue(self, self.data, self.recipecaches, taskdata, runlist)
+            rq.rqdata.prepare()
+
+            for l in runlist:
+                mc, pn, taskname, fn = l
+
+                taskdep = rq.rqdata.dataCaches[mc].task_deps[fn]
+                for t in taskdep['tasks']:
+                    if t in taskdep['nostamp'] or "setscene" in t:
+                        continue
+                    tid = bb.runqueue.build_tid(mc, fn, t)
+
+                    if t in task or getAllTaskSignatures:
+                        try:
+                            rq.rqdata.prepare_task_hash(tid)
+                            sig.append([pn, t, rq.rqdata.get_task_unihash(tid)])
+                        except KeyError:
+                            sig.append(self.getTaskSignatures(target, [t])[0])
+
+        return sig
+
     def buildTargets(self, targets, task):
         """
         Attempt to build the targets specified
@@ -1644,8 +1575,6 @@
         if self.state == state.running:
             return
 
-        self.handle_inotify_updates()
-
         if not self.baseconfig_valid:
             logger.debug("Reloading base configuration data")
             self.initConfigurationData()
@@ -1667,7 +1596,7 @@
 
         if self.state != state.parsing and not self.parsecache_valid:
             bb.server.process.serverlog("Parsing started")
-            self.setupParserWatcher()
+            self.parsewatched = {}
 
             bb.parse.siggen.reset(self.data)
             self.parseConfiguration ()
@@ -1692,9 +1621,9 @@
                 total_masked += masked
                 searchdirs |= set(search)
 
-            # Add inotify watches for directories searched for bb/bbappend files
+            # Add mtimes for directories searched for bb/bbappend files
             for dirent in searchdirs:
-                self.add_filewatch([[dirent]], dirs=True)
+                self.add_filewatch([(dirent, bb.parse.cached_mtime_noerror(dirent))])
 
             self.parser = CookerParser(self, mcfilelist, total_masked)
             self._parsecache_set(True)
@@ -1881,7 +1810,7 @@
             collectlog.error("no recipe files to build, check your BBPATH and BBFILES?")
             bb.event.fire(CookerExit(), eventdata)
 
-        # We need to track where we look so that we can add inotify watches. There
+        # We need to track where we look so that we can know when the cache is invalid. There
         # is no nice way to do this, this is horrid. We intercept the os.listdir()
         # (or os.scandir() for python 3.6+) calls while we run glob().
         origlistdir = os.listdir
diff --git a/poky/bitbake/lib/bb/data.py b/poky/bitbake/lib/bb/data.py
index 3ee8f5e..505f429 100644
--- a/poky/bitbake/lib/bb/data.py
+++ b/poky/bitbake/lib/bb/data.py
@@ -285,6 +285,7 @@
             value += "\n_remove of %s" % r
             deps |= r2.references
             deps = deps | (keys & r2.execs)
+            value = handle_contains(value, r2.contains, exclusions, d)
         return value
 
     deps = set()
diff --git a/poky/bitbake/lib/bb/event.py b/poky/bitbake/lib/bb/event.py
index 0d0e0a6..f8acacd 100644
--- a/poky/bitbake/lib/bb/event.py
+++ b/poky/bitbake/lib/bb/event.py
@@ -857,6 +857,14 @@
         Event.__init__(self)
         self.result = result
 
+class GetTaskSignatureResult(Event):
+    """
+    Event to return results from GetTaskSignatures command
+    """
+    def __init__(self, sig):
+        Event.__init__(self)
+        self.sig = sig
+
 class ParseError(Event):
     """
     Event to indicate parse failed
diff --git a/poky/bitbake/lib/bb/fetch2/__init__.py b/poky/bitbake/lib/bb/fetch2/__init__.py
index 765aedd..ffb1a92 100644
--- a/poky/bitbake/lib/bb/fetch2/__init__.py
+++ b/poky/bitbake/lib/bb/fetch2/__init__.py
@@ -874,6 +874,7 @@
                      'AWS_SECRET_ACCESS_KEY',
                      'AWS_DEFAULT_REGION',
                      'GIT_CACHE_PATH',
+                     'REMOTE_CONTAINERS_IPC',
                      'SSL_CERT_DIR']
 
 def get_fetcher_environment(d):
diff --git a/poky/bitbake/lib/bb/fetch2/git.py b/poky/bitbake/lib/bb/fetch2/git.py
index e11271b..4385d0b 100644
--- a/poky/bitbake/lib/bb/fetch2/git.py
+++ b/poky/bitbake/lib/bb/fetch2/git.py
@@ -373,20 +373,17 @@
             try:
                 # Since clones can be bare, use --absolute-git-dir instead of --show-toplevel
                 output = runfetchcmd("LANG=C %s rev-parse --absolute-git-dir" % ud.basecmd, d, workdir=ud.clonedir)
+                toplevel = output.rstrip()
 
-                toplevel = os.path.abspath(output.rstrip())
-                abs_clonedir = os.path.abspath(ud.clonedir).rstrip('/')
-                # The top level Git directory must either be the clone directory
-                # or a child of the clone directory. Any ancestor directory of
-                # the clone directory is not valid as the Git directory (and
-                # probably belongs to some other unrelated repository), so a
-                # clone is required
-                if os.path.commonprefix([abs_clonedir, toplevel]) != abs_clonedir:
-                    logger.warning("Top level directory '%s' doesn't match expected '%s'. Re-cloning", toplevel, ud.clonedir)
+                if not bb.utils.path_is_descendant(toplevel, ud.clonedir):
+                    logger.warning("Top level directory '%s' is not a descendant of '%s'. Re-cloning", toplevel, ud.clonedir)
                     needs_clone = True
             except bb.fetch2.FetchError as e:
                 logger.warning("Unable to get top level for %s (not a git directory?): %s", ud.clonedir, e)
                 needs_clone = True
+            except FileNotFoundError as e:
+                logger.warning("%s", e)
+                needs_clone = True
 
             if needs_clone:
                 shutil.rmtree(ud.clonedir)
diff --git a/poky/bitbake/lib/bb/parse/__init__.py b/poky/bitbake/lib/bb/parse/__init__.py
index 4cd82f1..a4358f1 100644
--- a/poky/bitbake/lib/bb/parse/__init__.py
+++ b/poky/bitbake/lib/bb/parse/__init__.py
@@ -60,6 +60,14 @@
             return 0
     return __mtime_cache[f]
 
+def check_mtime(f, mtime):
+    try:
+        current_mtime = os.stat(f)[stat.ST_MTIME]
+        __mtime_cache[f] = current_mtime
+    except OSError:
+        current_mtime = 0
+    return current_mtime == mtime
+
 def update_mtime(f):
     try:
         __mtime_cache[f] = os.stat(f)[stat.ST_MTIME]
diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py
index c88d712..56147c5 100644
--- a/poky/bitbake/lib/bb/runqueue.py
+++ b/poky/bitbake/lib/bb/runqueue.py
@@ -1324,6 +1324,8 @@
         if self.cooker.configuration.profile:
             magic = "decafbadbad"
         fakerootlogs = None
+
+        workerscript = os.path.realpath(os.path.dirname(__file__) + "/../../bin/bitbake-worker")
         if fakeroot:
             magic = magic + "beef"
             mcdata = self.cooker.databuilder.mcdata[mc]
@@ -1332,10 +1334,10 @@
             env = os.environ.copy()
             for key, value in (var.split('=') for var in fakerootenv):
                 env[key] = value
-            worker = subprocess.Popen(fakerootcmd + ["bitbake-worker", magic], stdout=subprocess.PIPE, stdin=subprocess.PIPE, env=env)
+            worker = subprocess.Popen(fakerootcmd + [sys.executable, workerscript, magic], stdout=subprocess.PIPE, stdin=subprocess.PIPE, env=env)
             fakerootlogs = self.rqdata.dataCaches[mc].fakerootlogs
         else:
-            worker = subprocess.Popen(["bitbake-worker", magic], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+            worker = subprocess.Popen([sys.executable, workerscript, magic], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
         bb.utils.nonblockingfd(worker.stdout)
         workerpipe = runQueuePipe(worker.stdout, None, self.cfgData, self, rqexec, fakerootlogs=fakerootlogs)
 
@@ -3159,7 +3161,7 @@
         if pipeout:
             pipeout.close()
         bb.utils.nonblockingfd(self.input)
-        self.queue = b""
+        self.queue = bytearray()
         self.d = d
         self.rq = rq
         self.rqexec = rqexec
@@ -3178,7 +3180,7 @@
 
         start = len(self.queue)
         try:
-            self.queue = self.queue + (self.input.read(102400) or b"")
+            self.queue.extend(self.input.read(102400) or b"")
         except (OSError, IOError) as e:
             if e.errno != errno.EAGAIN:
                 raise
diff --git a/poky/bitbake/lib/bb/server/process.py b/poky/bitbake/lib/bb/server/process.py
index 40cb99b..d495ac6 100644
--- a/poky/bitbake/lib/bb/server/process.py
+++ b/poky/bitbake/lib/bb/server/process.py
@@ -43,7 +43,8 @@
 
 def serverlog(msg):
     print(str(os.getpid()) + " " +  currenttime() + " " + msg)
-    sys.stdout.flush()
+    #Seems a flush here triggers filesytem sync like behaviour and long hangs in the server
+    #sys.stdout.flush()
 
 #
 # When we have lockfile issues, try and find infomation about which process is
@@ -410,12 +411,6 @@
             nextsleep = 0.1
             fds = []
 
-            try:
-                self.cooker.process_inotify_updates()
-            except Exception as exc:
-                serverlog("Exception %s in inofify updates broke the idle_thread, exiting" % traceback.format_exc())
-                self.quit = True
-
             with bb.utils.lock_timeout(self._idlefuncsLock):
                 items = list(self._idlefuns.items())
 
@@ -625,7 +620,7 @@
         os.set_inheritable(self.bitbake_lock.fileno(), True)
         os.set_inheritable(self.readypipein, True)
         serverscript = os.path.realpath(os.path.dirname(__file__) + "/../../../bin/bitbake-server")
-        os.execl(sys.executable, "bitbake-server", serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname,  str(self.server_timeout or 0), str(int(self.profile)), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1]))
+        os.execl(sys.executable, sys.executable, serverscript, "decafbad", str(self.bitbake_lock.fileno()), str(self.readypipein), self.logfile, self.bitbake_lock.name, self.sockname,  str(self.server_timeout or 0), str(int(self.profile)), str(self.xmlrpcinterface[0]), str(self.xmlrpcinterface[1]))
 
 def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpcinterface, profile):
 
diff --git a/poky/bitbake/lib/bb/tests/codeparser.py b/poky/bitbake/lib/bb/tests/codeparser.py
index a64c614..b6f2b77 100644
--- a/poky/bitbake/lib/bb/tests/codeparser.py
+++ b/poky/bitbake/lib/bb/tests/codeparser.py
@@ -436,6 +436,32 @@
         self.assertEqual(deps, set(["TESTVAR2"]))
         self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
 
+    def test_contains_vardeps_override_operators(self):
+        # Check override operators handle dependencies correctly with the contains functionality
+        expr_plain = 'testval'
+        expr_prepend = '${@bb.utils.filter("TESTVAR1", "testval1", d)} '
+        expr_append = ' ${@bb.utils.filter("TESTVAR2", "testval2", d)}'
+        expr_remove = '${@bb.utils.contains("TESTVAR3", "no-testval", "testval", "", d)}'
+        # Check dependencies
+        self.d.setVar('ANOTHERVAR', expr_plain)
+        self.d.prependVar('ANOTHERVAR', expr_prepend)
+        self.d.appendVar('ANOTHERVAR', expr_append)
+        self.d.setVar('ANOTHERVAR:remove', expr_remove)
+        self.d.setVar('TESTVAR1', 'blah')
+        self.d.setVar('TESTVAR2', 'testval2')
+        self.d.setVar('TESTVAR3', 'no-testval')
+        deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
+        self.assertEqual(sorted(values.splitlines()),
+                         sorted([
+                          expr_prepend + expr_plain + expr_append,
+                          '_remove of ' + expr_remove,
+                          'TESTVAR1{testval1} = Unset',
+                          'TESTVAR2{testval2} = Set',
+                          'TESTVAR3{no-testval} = Set',
+                          ]))
+        # Check final value
+        self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval2'])
+
     #Currently no wildcard support
     #def test_vardeps_wildcards(self):
     #    self.d.setVar("oe_libinstall", "echo test")
diff --git a/poky/bitbake/lib/bb/tinfoil.py b/poky/bitbake/lib/bb/tinfoil.py
index 91fbf1b..dcd3910 100644
--- a/poky/bitbake/lib/bb/tinfoil.py
+++ b/poky/bitbake/lib/bb/tinfoil.py
@@ -325,11 +325,11 @@
         self.recipes_parsed = False
         self.quiet = 0
         self.oldhandlers = self.logger.handlers[:]
+        self.localhandlers = []
         if setup_logging:
             # This is the *client-side* logger, nothing to do with
             # logging messages from the server
             bb.msg.logger_create('BitBake', output)
-            self.localhandlers = []
             for handler in self.logger.handlers:
                 if handler not in self.oldhandlers:
                     self.localhandlers.append(handler)
@@ -449,6 +449,12 @@
         self.run_actions(config_params)
         self.recipes_parsed = True
 
+    def modified_files(self):
+        """
+        Notify the server it needs to revalidate it's caches since the client has modified files
+        """
+        self.run_command("revalidateCaches")
+
     def run_command(self, command, *params, handle_events=True):
         """
         Run a command on the server (as implemented in bb.command).
diff --git a/poky/bitbake/lib/bb/utils.py b/poky/bitbake/lib/bb/utils.py
index 0624a4f..b401fa5 100644
--- a/poky/bitbake/lib/bb/utils.py
+++ b/poky/bitbake/lib/bb/utils.py
@@ -1828,6 +1828,29 @@
         prefix = tempfile.gettempprefix() + entropy
     return tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir, text=text)
 
+def path_is_descendant(descendant, ancestor):
+    """
+    Returns True if the path `descendant` is a descendant of `ancestor`
+    (including being equivalent to `ancestor` itself). Otherwise returns False.
+    Correctly accounts for symlinks, bind mounts, etc. by using
+    os.path.samestat() to compare paths
+
+    May raise any exception that os.stat() raises
+    """
+
+    ancestor_stat = os.stat(ancestor)
+
+    # Recurse up each directory component of the descendant to see if it is
+    # equivalent to the ancestor
+    check_dir = os.path.abspath(descendant).rstrip("/")
+    while check_dir:
+        check_stat = os.stat(check_dir)
+        if os.path.samestat(check_stat, ancestor_stat):
+            return True
+        check_dir = os.path.dirname(check_dir).rstrip("/")
+
+    return False
+
 # If we don't have a timeout of some kind and a process/thread exits badly (for example
 # OOM killed) and held a lock, we'd just hang in the lock futex forever. It is better
 # we exit at some point than hang. 5 minutes with no progress means we're probably deadlocked.
diff --git a/poky/bitbake/lib/bblayers/action.py b/poky/bitbake/lib/bblayers/action.py
index 0d7fd6e..a8f2699 100644
--- a/poky/bitbake/lib/bblayers/action.py
+++ b/poky/bitbake/lib/bblayers/action.py
@@ -50,12 +50,14 @@
 
         try:
             notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None)
+            self.tinfoil.modified_files()
             if not (args.force or notadded):
                 try:
                     self.tinfoil.run_command('parseConfiguration')
                 except (bb.tinfoil.TinfoilUIException, bb.BBHandledException):
                     # Restore the back up copy of bblayers.conf
                     shutil.copy2(backup, bblayers_conf)
+                    self.tinfoil.modified_files()
                     bb.fatal("Parse failure with the specified layer added, exiting.")
                 else:
                     for item in notadded:
@@ -81,6 +83,7 @@
                 layerdir = os.path.abspath(item)
             layerdirs.append(layerdir)
         (_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs)
+        self.tinfoil.modified_files()
         if notremoved:
             for item in notremoved:
                 sys.stderr.write("No layers matching %s found in BBLAYERS\n" % item)
@@ -240,6 +243,9 @@
                             if not entry_found:
                                 logger.warning("File %s does not match the flattened layer's BBFILES setting, you may need to edit conf/layer.conf or move the file elsewhere" % f1full)
 
+        self.tinfoil.modified_files()
+
+
     def get_file_layer(self, filename):
         layerdir = self.get_file_layerdir(filename)
         if layerdir:
diff --git a/poky/documentation/bsp-guide/bsp.rst b/poky/documentation/bsp-guide/bsp.rst
index 3be314b..c78fbeb 100644
--- a/poky/documentation/bsp-guide/bsp.rst
+++ b/poky/documentation/bsp-guide/bsp.rst
@@ -893,8 +893,8 @@
    ``recipes-*`` subdirectories specific to the recipe's function, or
    within a subdirectory containing a set of closely-related recipes.
    The recipes themselves should follow the general guidelines for
-   recipes used in the Yocto Project found in the ":oe_wiki:`OpenEmbedded
-   Style Guide </Styleguide>`".
+   recipes found in the ":doc:`../contributor-guide/recipe-style-guide`"
+   in the Yocto Project and OpenEmbedded Contributor Guide.
 
 -  *License File:* You must include a license file in the
    ``meta-bsp_root_name`` directory. This license covers the BSP
diff --git a/poky/documentation/contributor-guide/recipe-style-guide.rst b/poky/documentation/contributor-guide/recipe-style-guide.rst
index a0d513e..a005aa3 100644
--- a/poky/documentation/contributor-guide/recipe-style-guide.rst
+++ b/poky/documentation/contributor-guide/recipe-style-guide.rst
@@ -7,17 +7,18 @@
 =========================
 
 In general, most recipes should follow the naming convention
-``recipes-category/package/packagename_version.bb``. Recipes for related
-projects may share the same package directory. ``packagename``, ``category``,
-and ``package`` may contain hyphens, but hyphens are not allowed in ``version``.
+``recipes-category/recipename/recipename_version.bb``. Recipes for related
+projects may share the same recipe directory. ``recipename`` and ``category``
+may contain hyphens, but hyphens are not allowed in ``version``.
 
 If the recipe is tracking a Git revision that does not correspond to a released
-version of the software, ``version`` may be ``git`` (e.g. ``packagename_git.bb``)
+version of the software, ``version`` may be ``git`` (e.g. ``recipename_git.bb``)
+and the recipe would set :term:`PV`.
 
 Version Policy
 ==============
 
-Our versions follow the form ``<package epoch>:<package version>-<package revision>``
+Our versions follow the form ``<epoch>:<version>-<revision>``
 or in BitBake variable terms ${:term:`PE`}:${:term:`PV`}-${:term:`PR`}. We
 generally follow the `Debian <https://www.debian.org/doc/debian-policy/ch-controlfields.html#version>`__
 version policy which defines these terms.
@@ -26,7 +27,7 @@
 file name. It is recommended to use released versions of software as these are
 revisions that upstream are expecting people to use.
 
-Package versions should always compare and sort correctly so that upgrades work
+Recipe versions should always compare and sort correctly so that upgrades work
 as expected. With conventional versions such as ``1.4`` upgrading ``to 1.5``
 this happens naturally, but some versions don't sort. For example,
 ``1.5 Release Candidate 2`` could be written as ``1.5rc2`` but this sorts after
@@ -62,7 +63,7 @@
 
 The :term:`PR` variable is used to indicate different revisions of a recipe
 that reference the same upstream source version. It can be used to force a
-new version of a package to be installed onto a device from a package feed.
+new version of a recipe to be installed onto a device from a package feed.
 These once had to be set manually but in most cases these can now be set and
 incremented automatically by a PR Server connected with a package feed.
 
@@ -255,3 +256,144 @@
 -  Use :term:`BBCLASSEXTEND` instead of creating separate recipes such as ``-native``
    and ``-nativesdk`` ones, whenever possible. This avoids having to maintain multiple
    recipe files at the same time.
+
+-  Recipes should have tasks which are idempotent, i.e. that executing a given task
+   multiple times shouldn't change the end result. The build environment is built upon
+   this assumption and breaking it can cause obscure build failures.
+
+-  For idempotence when modifying files in tasks, it is usually best to:
+
+   - copy a file ``X`` to ``X.orig`` (only if it doesn't exist already)
+   - then, copy ``X.orig`` back to ``X``,
+   - and, finally, modify ``X``.
+
+   This ensures if rerun the task always has the same end result and the
+   original file can be preserved to reuse. It also guards against an
+   interrupted build corrupting the file.
+
+Patch Upstream Status
+=====================
+
+In order to keep track of patches applied by recipes and ultimately reduce the
+number of patches that need maintaining, the OpenEmbedded build system
+requires information about the upstream status of each patch.
+
+In its description, each patch should provide detailed information about the
+bug that it addresses, such as the URL in a bug tracking system and links
+to relevant mailing list archives.
+
+Then, you should also add an ``Upstream-Status:`` tag containing one of the
+following status strings:
+
+``Pending``
+   No determination has been made yet, or patch has not yet been submitted to
+   upstream.
+
+   Keep in mind that every patch submitted upstream reduces the maintainance
+   burden in OpenEmbedded and Yocto Project in the long run, so this patch
+   status should only be used in exceptional cases if there are genuine
+   obstacles to submitting a patch upstream; the reason for that should be
+   included in the patch.
+
+``Submitted [where]``
+   Submitted to upstream, waiting for approval. Optionally include where
+   it was submitted, such as the author, mailing list, etc.
+
+``Backport [version]``
+   Accepted upstream and included in the next release, or backported from newer
+   upstream version, because we are at a fixed version.
+   Include upstream version info (e.g. commit ID or next expected version).
+
+``Denied``
+   Not accepted by upstream, include reason in patch.
+
+``Inactive-Upstream [lastcommit: when (and/or) lastrelease: when]``
+   The upstream is no longer available. This typically means a defunct project
+   where no activity has happened for a long time --- measured in years. To make
+   that judgement, it is recommended to look at not only when the last release
+   happened, but also when the last commit happened, and whether newly made bug
+   reports and merge requests since that time receive no reaction. It is also
+   recommended to add to the patch description any relevant links where the
+   inactivity can be clearly seen.
+
+``Inappropriate [reason]``
+   The patch is not appropriate for upstream, include a brief reason on the
+   same line enclosed with ``[]``. In the past, there were several different
+   reasons not to submit patches upstream, but we have to consider that every
+   non-upstreamed patch means a maintainance burden for recipe maintainers.
+   Currently, the only reasons to mark patches as inappropriate for upstream
+   submission are:
+
+   -  ``oe specific``: the issue is specific to how OpenEmbedded performs builds
+      or sets things up at runtime, and can be resolved only with a patch that
+      is not however relevant or appropriate for general upstream submission.
+   -  ``upstream ticket <link>``: the issue is not specific to Open-Embedded
+      and should be fixed upstream, but the patch in its current form is not
+      suitable for merging upstream, and the author lacks sufficient expertise
+      to develop a proper patch. Instead the issue is handled via a bug report
+      (include link).
+
+Of course, if another person later takes care of submitting this patch upstream,
+the status should be changed to ``Submitted [where]``, and an additional
+``Signed-off-by:`` line should be added to the patch by the person claiming
+responsibility for upstreaming.
+
+Examples
+--------
+
+Here's an example of a patch that has been submitted upstream::
+
+   rpm: Adjusted the foo setting in bar
+
+   [RPM Ticket #65] -- http://rpm5.org/cvs/tktview?tn=65,5
+
+   The foo setting in bar was decreased from X to X-50% in order to
+   ensure we don't exhaust all system memory with foobar threads.
+
+   Upstream-Status: Submitted [rpm5-devel@rpm5.org]
+
+   Signed-off-by: Joe Developer <joe.developer@example.com>
+
+A future update can change the value to ``Backport`` or ``Denied`` as
+appropriate.
+
+Another example of a patch that is specific to OpenEmbedded::
+
+   Do not treat warnings as errors
+
+   There are additional warnings found with musl which are
+   treated as errors and fails the build, we have more combinations
+   than upstream supports to handle.
+
+   Upstream-Status: Inappropriate [oe specific]
+
+Here's a patch that has been backported from an upstream commit::
+
+   include missing sys/file.h for LOCK_EX
+
+   Upstream-Status: Backport [https://github.com/systemd/systemd/commit/ac8db36cbc26694ee94beecc8dca208ec4b5fd45]
+
+CVE patches
+===========
+
+In order to have a better control of vulnerabilities, patches that fix CVEs must
+contain a ``CVE:`` tag. This tag list all CVEs fixed by the patch. If more than
+one CVE is fixed, separate them using spaces.
+
+CVE Examples
+------------
+
+This should be the header of patch that fixes :cve:`2015-8370` in GRUB2::
+
+   grub2: Fix CVE-2015-8370
+
+   [No upstream tracking] -- https://bugzilla.redhat.com/show_bug.cgi?id=1286966
+
+   Back to 28; Grub2 Authentication
+
+   Two functions suffer from integer underflow fault; the grub_username_get() and grub_password_get()located in
+   grub-core/normal/auth.c and lib/crypto.c respectively. This can be exploited to obtain a Grub rescue shell.
+
+   Upstream-Status: Backport [http://git.savannah.gnu.org/cgit/grub.git/commit/?id=451d80e52d851432e109771bb8febafca7a5f1f2]
+   CVE: CVE-2015-8370
+   Signed-off-by: Joe Developer <joe.developer@example.com>
diff --git a/poky/documentation/dev-manual/disk-space.rst b/poky/documentation/dev-manual/disk-space.rst
index a84bef4..6d1638a 100644
--- a/poky/documentation/dev-manual/disk-space.rst
+++ b/poky/documentation/dev-manual/disk-space.rst
@@ -23,12 +23,12 @@
 &MIN_DISK_SPACE_RM_WORK; Gbytes of initial free disk space are still needed to
 create temporary files before they can be deleted.
 
-Purging Duplicate Shared State Cache Files
-==========================================
+Purging Obsolete Shared State Cache Files
+=========================================
 
 After multiple build iterations, the Shared State (sstate) cache can contain
-duplicate cache files for a given package, consuming a substantial amount of
-disk space. However, only the most recent cache files are likeky to be reusable.
+multiple cache files for a given package, consuming a substantial amount of
+disk space. However, only the most recent ones are likely to be reused.
 
 The following command is a quick way to purge all the cache files which
 haven't been used for a least a specified number of days::
diff --git a/poky/documentation/dev-manual/licenses.rst b/poky/documentation/dev-manual/licenses.rst
index 9629dc5..3b9190d 100644
--- a/poky/documentation/dev-manual/licenses.rst
+++ b/poky/documentation/dev-manual/licenses.rst
@@ -123,6 +123,13 @@
 
    LICENSE_FLAGS = "license_${PN}_${PV}"
 
+It is possible to give more details about a specific license
+using flags on the :term:`LICENSE_FLAGS_DETAILS` variable::
+
+   LICENSE_FLAGS_DETAILS[my-eula-license] = "For further details, see https://example.com/eula."
+
+If set, this will be displayed to the user if the license hasn't been accepted.
+
 In order for a component restricted by a
 :term:`LICENSE_FLAGS` definition to be enabled and included in an image, it
 needs to have a matching entry in the global
@@ -298,19 +305,34 @@
 methods described in this section (e.g. the mechanism through which
 source code is distributed).
 
-As different organizations have different methods of complying with open
-source licensing, this section is not meant to imply that there is only
-one single way to meet your compliance obligations, but rather to
-describe one method of achieving compliance. The remainder of this
-section describes methods supported to meet the previously mentioned
-three requirements. Once you take steps to meet these requirements, and
-prior to releasing images, sources, and the build system, you should
-audit all artifacts to ensure completeness.
+As different organizations have different ways of releasing software,
+there can be multiple ways of meeting license obligations. At
+least, we describe here two methods for achieving compliance:
+
+-  The first method is to use OpenEmbedded's ability to provide
+   the source code, provide a list of licenses, as well as
+   compilation scripts and source code modifications.
+
+   The remainder of this section describes supported methods to meet
+   the previously mentioned three requirements.
+
+-  The second method is to generate a *Software Bill of Materials*
+   (:term:`SBoM`), as described in the ":doc:`/dev-manual/sbom`" section.
+   Not only do you generate :term:`SPDX` output which can be used meet
+   license compliance requirements (except for sharing the build system
+   and layers sources for the time being), but this output also includes
+   component version and patch information which can be used
+   for vulnerability assessment.
+
+Whatever method you choose, prior to releasing images, sources,
+and the build system, you should audit all artifacts to ensure
+completeness.
 
 .. note::
 
    The Yocto Project generates a license manifest during image creation
-   that is located in ``${DEPLOY_DIR}/licenses/``\ `image_name`\ ``-``\ `datestamp`
+   that is located in
+   ``${DEPLOY_DIR}/licenses/<image-name>-<machine>.rootfs-<datestamp>/``
    to assist with any audits.
 
 Providing the Source Code
@@ -428,7 +450,7 @@
 Providing Compilation Scripts and Source Code Modifications
 -----------------------------------------------------------
 
-At this point, we have addressed all we need to prior to generating the
+At this point, we have addressed all we need prior to generating the
 image. The next two requirements are addressed during the final
 packaging of the release.
 
diff --git a/poky/documentation/dev-manual/new-recipe.rst b/poky/documentation/dev-manual/new-recipe.rst
index cb9533f..02bb084 100644
--- a/poky/documentation/dev-manual/new-recipe.rst
+++ b/poky/documentation/dev-manual/new-recipe.rst
@@ -1036,13 +1036,14 @@
 correctly trigger an upgrade.
 
 In order to ensure the versions compare properly, the recommended
-convention is to set :term:`PV` within the
-recipe to "previous_version+current_version". You can use an additional
-variable so that you can use the current version elsewhere. Here is an
-example::
+convention is to use a tilde (``~``) character as follows::
 
-   REALPV = "0.8.16-rc1"
-   PV = "0.8.15+${REALPV}"
+  PV = 0.8.16~rc1
+
+This way ``0.8.16~rc1`` sorts before ``0.8.16``. See the
+":ref:`contributor-guide/recipe-style-guide:version policy`" section in the
+Yocto Project and OpenEmbedded Contributor Guide for more details about
+versioning code corresponding to a pre-release or to a specific Git commit.
 
 Post-Installation Scripts
 =========================
@@ -1394,9 +1395,9 @@
 Following Recipe Style Guidelines
 =================================
 
-When writing recipes, it is good to conform to existing style
-guidelines. The :oe_wiki:`OpenEmbedded Styleguide </Styleguide>` wiki page
-provides rough guidelines for preferred recipe style.
+When writing recipes, it is good to conform to existing style guidelines.
+See the ":doc:`../contributor-guide/recipe-style-guide`" in the Yocto Project
+and OpenEmbedded Contributor Guide for reference.
 
 It is common for existing recipes to deviate a bit from this style.
 However, aiming for at least a consistent style is a good idea. Some
diff --git a/poky/documentation/migration-guides/release-notes-4.3.rst b/poky/documentation/migration-guides/release-notes-4.3.rst
index c19cf6e..87cd622 100644
--- a/poky/documentation/migration-guides/release-notes-4.3.rst
+++ b/poky/documentation/migration-guides/release-notes-4.3.rst
@@ -10,6 +10,8 @@
 
 -  New variables:
 
+   -  :term:`FILE_LAYERNAME`: bitbake now sets this to the name of the layer containing the recipe
+
    -  :term:`FIT_ADDRESS_CELLS` and :term:`UBOOT_FIT_ADDRESS_CELLS`.
       See details below.
 
@@ -17,7 +19,8 @@
 
    -  :term:`KERNEL_DTBVENDORED`: whether to keep vendor subdirectories.
 
-   -  :term:`FILE_LAYERNAME`: bitbake now sets this to the name of the layer containing the recipe
+   -  :term:`LICENSE_FLAGS_DETAILS`: add extra details about a recipe license
+      in case it is not allowed by :term:`LICENSE_FLAGS_ACCEPTED`.
 
 - Layername functionality available through overrides
 
diff --git a/poky/documentation/ref-manual/qa-checks.rst b/poky/documentation/ref-manual/qa-checks.rst
index 6fdb0fb..4a02e72 100644
--- a/poky/documentation/ref-manual/qa-checks.rst
+++ b/poky/documentation/ref-manual/qa-checks.rst
@@ -754,7 +754,7 @@
 
 - ``Missing Upstream-Status in patch <patchfile> Please add according to <url> [patch-status-core/patch-status-noncore]``
 
-    The Upstream-Status value is missing in the specified patch file's header.
+    The ``Upstream-Status`` value is missing in the specified patch file's header.
     This value is intended to track whether or not the patch has been sent
     upstream, whether or not it has been merged, etc.
 
@@ -762,13 +762,13 @@
     recipes in OE-Core) and ``patch-status-noncore`` (for recipes in any other
     layer).
 
-    For more information on setting Upstream-Status see:
-    https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines#Patch_Header_Recommendations:_Upstream-Status
-
+    For more information, see the
+    ":ref:`contributor-guide/recipe-style-guide:patch upstream status`"
+    section in the Yocto Project and OpenEmbedded Contributor Guide.
 
 - ``Malformed Upstream-Status in patch <patchfile> Please correct according to <url> [patch-status-core/patch-status-noncore]``
 
-    The Upstream-Status value in the specified patch file's header is invalid -
+    The ``Upstream-Status`` value in the specified patch file's header is invalid -
     it must be a specific format. See the "Missing Upstream-Status" entry above
     for more information.
 
diff --git a/poky/documentation/ref-manual/variables.rst b/poky/documentation/ref-manual/variables.rst
index 7a71abc..11523bb 100644
--- a/poky/documentation/ref-manual/variables.rst
+++ b/poky/documentation/ref-manual/variables.rst
@@ -4968,6 +4968,23 @@
       ":ref:`dev-manual/licenses:enabling commercially licensed recipes`"
       section in the Yocto Project Development Tasks Manual.
 
+   :term:`LICENSE_FLAGS_DETAILS`
+      Adds details about a flag in :term:`LICENSE_FLAGS`. This way,
+      if such a flag is not accepted through :term:`LICENSE_FLAGS_ACCEPTED`,
+      the error message will be more informative, containing the specified
+      extra details.
+
+      For example, a recipe with an EULA may set::
+
+         LICENSE_FLAGS = "FooBar-EULA"
+         LICENSE_FLAGS_DETAILS[FooBar-EULA] = "For further details, see https://example.com/eula."
+
+      If ``Foobar-EULA`` isn't in :term:`LICENSE_FLAGS_ACCEPTED`, the
+      error message is more useful::
+
+        Has a restricted license 'FooBar-EULA' which is not listed in your LICENSE_FLAGS_ACCEPTED.
+        For further details, see https://example.com/eula.
+
    :term:`LICENSE_PATH`
       Path to additional licenses used during the build. By default, the
       OpenEmbedded build system uses :term:`COMMON_LICENSE_DIR` to define the
diff --git a/poky/documentation/sdk-manual/extensible.rst b/poky/documentation/sdk-manual/extensible.rst
index 9e08e57..355c6cb 100644
--- a/poky/documentation/sdk-manual/extensible.rst
+++ b/poky/documentation/sdk-manual/extensible.rst
@@ -48,18 +48,20 @@
 their own pros and cons:
 
 #. *Setting up the Extensible SDK environment directly in a Yocto build*. This
-avoids having to produce, test, distribute and maintain separate SDK installer
-archives, which can get very large. There is only one environment for the regular
-Yocto build and the SDK and less code paths where things can go not according to plan.
-It's easier to update the SDK: it simply means updating the Yocto layers with
-git fetch or layer management tooling. The SDK extensibility is better than in the
-second option: just run ``bitbake`` again to add more things to the sysroot, or add layers
-if even more things are required.
+   avoids having to produce, test, distribute and maintain separate SDK
+   installer archives, which can get very large. There is only one environment
+   for the regular Yocto build and the SDK and less code paths where things can
+   go not according to plan. It's easier to update the SDK: it simply means
+   updating the Yocto layers with git fetch or layer management tooling. The
+   SDK extensibility is better than in the second option: just run ``bitbake``
+   again to add more things to the sysroot, or add layers if even more things
+   are required.
 
-#. *Setting up the Extensible SDK from a standalone installer*. This has the benefit of
-having a single, self-contained archive that includes all the needed binary artifacts.
-So nothing needs to be rebuilt, and there is no need to provide a well-functioning
-binary artefact cache over the network for developers with underpowered laptops.
+#. *Setting up the Extensible SDK from a standalone installer*. This has the
+   benefit of having a single, self-contained archive that includes all the
+   needed binary artifacts. So nothing needs to be rebuilt, and there is no
+   need to provide a well-functioning binary artefact cache over the network
+   for developers with underpowered laptops.
 
 Setting up the Extensible SDK environment directly in a Yocto build
 -------------------------------------------------------------------
@@ -67,12 +69,12 @@
 #. Set up all the needed layers and a Yocto :term:`Build Directory`, e.g. a regular Yocto
    build where ``bitbake`` can be executed.
 
-#. Run:
-    $ bitbake meta-ide-support
-    $ bitbake -c populate_sysroot gtk+3
-    (or any other target or native item that the application developer would need)
-    $ bitbake build-sysroots
+#. Run::
 
+      $ bitbake meta-ide-support
+      $ bitbake -c populate_sysroot gtk+3
+      # or any other target or native item that the application developer would need
+      $ bitbake build-sysroots
 
 Setting up the Extensible SDK from a standalone installer
 ---------------------------------------------------------
@@ -194,15 +196,13 @@
    Run devtool --help for further details.
 
 When using the environment script directly in a Yocto build, it can
-be run similarly:
+be run similarly::
 
    $ source tmp/deploy/images/qemux86-64/environment-setup-core2-64-poky-linux
 
-Running the setup script defines many environment variables needed in
-order to use the SDK (e.g. ``PATH``,
-:term:`CC`,
-:term:`LD`, and so forth). If you want to
-see all the environment variables the script exports, examine the
+Running the setup script defines many environment variables needed in order to
+use the SDK (e.g. ``PATH``, :term:`CC`, :term:`LD`, and so forth). If you want
+to see all the environment variables the script exports, examine the
 installation file itself.
 
 Using ``devtool`` in Your SDK Workflow
@@ -216,11 +216,8 @@
 
 .. note::
 
-   The use of
-   devtool
-   is not limited to the extensible SDK. You can use
-   devtool
-   to help you easily develop any project whose build output must be
+   The use of ``devtool`` is not limited to the extensible SDK. You can use
+   ``devtool`` to help you easily develop any project whose build output must be
    part of an image built using the build system.
 
 The ``devtool`` command line is organized similarly to
@@ -230,15 +227,10 @@
 
 .. note::
 
-   See the "
-   devtool
-    Quick Reference
-   " in the Yocto Project Reference Manual for a
-   devtool
-   quick reference.
+   See the ":doc:`/ref-manual/devtool-reference`"
+   section in the Yocto Project Reference Manual.
 
-Three ``devtool`` subcommands provide entry-points into
-development:
+Three ``devtool`` subcommands provide entry-points into development:
 
 -  *devtool add*: Assists in adding new software to be built.
 
@@ -315,9 +307,8 @@
 
       .. note::
 
-         If required,
-         devtool
-         always creates a Git repository locally during the extraction.
+         If required, ``devtool`` always creates a Git repository locally
+         during the extraction.
 
       Furthermore, the first positional argument ``srctree`` in this case
       identifies where the ``devtool add`` command will locate the
@@ -326,8 +317,7 @@
 
          $ devtool add recipe srctree fetchuri
 
-      In summary,
-      the source code is pulled from fetchuri and extracted into the
+      In summary, the source code is pulled from fetchuri and extracted into the
       location defined by ``srctree`` as a local Git repository.
 
       Within workspace, ``devtool`` creates a recipe named recipe along
@@ -358,16 +348,14 @@
 
       $ devtool edit-recipe recipe
 
-   From within the editor, you
-   can make modifications to the recipe that take effect when you build
-   it later.
+   From within the editor, you can make modifications to the recipe that
+   take effect when you build it later.
 
 #. *Build the Recipe or Rebuild the Image*: The next step you take
    depends on what you are going to do with the new code.
 
    If you need to eventually move the build output to the target
-   hardware, use the following ``devtool`` command:
-   :;
+   hardware, use the following ``devtool`` command::
 
       $ devtool build recipe
 
@@ -392,8 +380,11 @@
       development machine.
 
    You can deploy your build output to that target hardware by using the
-   ``devtool deploy-target`` command: $ devtool deploy-target recipe
-   target The target is a live target machine running as an SSH server.
+   ``devtool deploy-target`` command::
+
+      $ devtool deploy-target recipe target
+
+   The target is a live target machine running as an SSH server.
 
    You can, of course, also deploy the image you build to actual
    hardware by using the ``devtool build-image`` command. However,
@@ -422,11 +413,9 @@
 
    .. note::
 
-      You can use the
-      devtool reset
-      command to put things back should you decide you do not want to
-      proceed with your work. If you do use this command, realize that
-      the source tree is preserved.
+      You can use the ``devtool reset`` command to put things back should you
+      decide you do not want to proceed with your work. If you do use this
+      command, realize that the source tree is preserved.
 
 Use ``devtool modify`` to Modify the Source of an Existing Component
 --------------------------------------------------------------------
@@ -473,11 +462,9 @@
 
          $ devtool modify recipe
 
-      Once
-      ``devtool``\ locates the recipe, ``devtool`` uses the recipe's
-      :term:`SRC_URI` statements to
-      locate the source code and any local patch files from other
-      developers.
+      Once ``devtool`` locates the recipe, ``devtool`` uses the recipe's
+      :term:`SRC_URI` statements to locate the source code and any local
+      patch files from other developers.
 
       With this scenario, there is no ``srctree`` argument. Consequently, the
       default behavior of the ``devtool modify`` command is to extract
@@ -513,11 +500,7 @@
 
       .. note::
 
-         You cannot provide a URL for
-         srctree
-         using the
-         devtool
-         command.
+         You cannot provide a URL for ``srctree`` using the ``devtool`` command.
 
       As with all extractions, the command uses the recipe's :term:`SRC_URI`
       statements to locate the source files and any associated patch
@@ -570,7 +553,9 @@
    On the other hand, if you want an image to contain the recipe's
    packages from the workspace for immediate deployment onto a device
    (e.g. for testing purposes), you can use the ``devtool build-image``
-   command: $ devtool build-image image
+   command::
+
+      $ devtool build-image image
 
 #. *Deploy the Build Output*: When you use the ``devtool build`` command
    to build out your recipe, you probably want to see if the resulting
@@ -610,8 +595,7 @@
 
       Any changes you want to turn into patches must be staged and
       committed within the local Git repository before you use the
-      devtool finish
-      command.
+      ``devtool finish`` command.
 
    Because there is no need to move the recipe, ``devtool finish``
    either updates the original recipe in the original layer or the
@@ -626,11 +610,9 @@
 
    .. note::
 
-      You can use the
-      devtool reset
-      command to put things back should you decide you do not want to
-      proceed with your work. If you do use this command, realize that
-      the source tree is preserved.
+      You can use the ``devtool reset`` command to put things back should you
+      decide you do not want to proceed with your work. If you do use this
+      command, realize that the source tree is preserved.
 
 Use ``devtool upgrade`` to Create a Version of the Recipe that Supports a Newer Version of the Software
 -------------------------------------------------------------------------------------------------------
@@ -644,12 +626,11 @@
 
 .. note::
 
-   Several methods exist by which you can upgrade recipes -
-   ``devtool upgrade``
-   happens to be one. You can read about all the methods by which you
-   can upgrade recipes in the
-   :ref:`dev-manual/upgrading-recipes:upgrading recipes` section
-   of the Yocto Project Development Tasks Manual.
+   Several methods exist by which you can upgrade recipes ---
+   ``devtool upgrade`` happens to be one. You can read about all the methods by
+   which you can upgrade recipes in the
+   :ref:`dev-manual/upgrading-recipes:upgrading recipes` section of the Yocto
+   Project Development Tasks Manual.
 
 The ``devtool upgrade`` command is flexible enough to allow you to specify
 source code revision and versioning schemes, extract code into or out of the
@@ -755,8 +736,11 @@
       development machine.
 
    You can deploy your build output to that target hardware by using the
-   ``devtool deploy-target`` command: $ devtool deploy-target recipe
-   target The target is a live target machine running as an SSH server.
+   ``devtool deploy-target`` command::
+
+      $ devtool deploy-target recipe target
+
+   The target is a live target machine running as an SSH server.
 
    You can, of course, also deploy the image you build using the
    ``devtool build-image`` command to actual hardware. However,
@@ -790,11 +774,9 @@
 
    .. note::
 
-      You can use the
-      devtool reset
-      command to put things back should you decide you do not want to
-      proceed with your work. If you do use this command, realize that
-      the source tree is preserved.
+      You can use the ``devtool reset`` command to put things back should you
+      decide you do not want to proceed with your work. If you do use this
+      command, realize that the source tree is preserved.
 
 A Closer Look at ``devtool add``
 ================================
@@ -862,10 +844,9 @@
 Dependency Detection and Mapping
 --------------------------------
 
-The ``devtool add`` command attempts to detect build-time dependencies
-and map them to other recipes in the system. During this mapping, the
-command fills in the names of those recipes as part of the
-:term:`DEPENDS` variable within the
+The ``devtool add`` command attempts to detect build-time dependencies and map
+them to other recipes in the system. During this mapping, the command fills in
+the names of those recipes as part of the :term:`DEPENDS` variable within the
 recipe. If a dependency cannot be mapped, ``devtool`` places a comment
 in the recipe indicating such. The inability to map a dependency can
 result from naming not being recognized or because the dependency simply
@@ -882,10 +863,8 @@
 
 .. note::
 
-   The
-   devtool add
-   command often cannot distinguish between mandatory and optional
-   dependencies. Consequently, some of the detected dependencies might
+   The ``devtool add`` command often cannot distinguish between mandatory and
+   optional dependencies. Consequently, some of the detected dependencies might
    in fact be optional. When in doubt, consult the documentation or the
    configure script for the software the recipe is building for further
    details. In some cases, you might find you can substitute the
@@ -895,16 +874,14 @@
 License Detection
 -----------------
 
-The ``devtool add`` command attempts to determine if the software you
-are adding is able to be distributed under a common, open-source
-license. If so, the command sets the
-:term:`LICENSE` value accordingly.
+The ``devtool add`` command attempts to determine if the software you are
+adding is able to be distributed under a common, open-source license. If
+so, the command sets the :term:`LICENSE` value accordingly.
 You should double-check the value added by the command against the
 documentation or source files for the software you are building and, if
 necessary, update that :term:`LICENSE` value.
 
-The ``devtool add`` command also sets the
-:term:`LIC_FILES_CHKSUM`
+The ``devtool add`` command also sets the :term:`LIC_FILES_CHKSUM`
 value to point to all files that appear to be license-related. Realize
 that license statements often appear in comments at the top of source
 files or within the documentation. In such cases, the command does not
@@ -984,10 +961,9 @@
 Adding Native Tools
 -------------------
 
-Often, you need to build additional tools that run on the :term:`Build
-Host` as opposed to
-the target. You should indicate this requirement by using one of the
-following methods when you run ``devtool add``:
+Often, you need to build additional tools that run on the :term:`Build Host`
+as opposed to the target. You should indicate this requirement by using one of
+the following methods when you run ``devtool add``:
 
 -  Specify the name of the recipe such that it ends with "-native".
    Specifying the name like this produces a recipe that only builds for
@@ -1011,8 +987,7 @@
 ----------------------
 
 You can use the ``devtool add`` command two different ways to add
-Node.js modules: 1) Through ``npm`` and, 2) from a repository or local
-source.
+Node.js modules: through ``npm`` or from a repository or local source.
 
 Use the following form to add Node.js modules through ``npm``::
 
@@ -1027,7 +1002,7 @@
 
 .. note::
 
-   -  You must use quotes around the URL. The ``devtool add`` does not
+   -  You must use quotes around the URL. ``devtool add`` does not
       require the quotes, but the shell considers ";" as a splitter
       between multiple commands. Thus, without the quotes,
       ``devtool add`` does not receive the other parts, which results in
@@ -1042,9 +1017,8 @@
 
    $ devtool add https://github.com/diversario/node-ssdp
 
-In this example, ``devtool``
-fetches the specified Git repository, detects the code as Node.js code,
-fetches dependencies using ``npm``, and sets
+In this example, ``devtool`` fetches the specified Git repository, detects the
+code as Node.js code, fetches dependencies using ``npm``, and sets
 :term:`SRC_URI` accordingly.
 
 Working With Recipes
@@ -1121,18 +1095,13 @@
 
 If the software your recipe is building uses GNU autoconf, then a fixed
 set of arguments is passed to it to enable cross-compilation plus any
-extras specified by
-:term:`EXTRA_OECONF` or
-:term:`PACKAGECONFIG_CONFARGS`
+extras specified by :term:`EXTRA_OECONF` or :term:`PACKAGECONFIG_CONFARGS`
 set within the recipe. If you wish to pass additional options, add them
 to :term:`EXTRA_OECONF` or :term:`PACKAGECONFIG_CONFARGS`. Other supported build
-tools have similar variables (e.g.
-:term:`EXTRA_OECMAKE` for
-CMake, :term:`EXTRA_OESCONS`
-for Scons, and so forth). If you need to pass anything on the ``make``
-command line, you can use :term:`EXTRA_OEMAKE` or the
-:term:`PACKAGECONFIG_CONFARGS`
-variables to do so.
+tools have similar variables (e.g.  :term:`EXTRA_OECMAKE` for CMake,
+:term:`EXTRA_OESCONS` for Scons, and so forth). If you need to pass anything on
+the ``make`` command line, you can use :term:`EXTRA_OEMAKE` or the
+:term:`PACKAGECONFIG_CONFARGS` variables to do so.
 
 You can use the ``devtool configure-help`` command to help you set the
 arguments listed in the previous paragraph. The command determines the
@@ -1156,8 +1125,7 @@
 
 Recipes should never write files directly into the sysroot. Instead,
 files should be installed into standard locations during the
-:ref:`ref-tasks-install` task within
-the ``${``\ :term:`D`\ ``}`` directory. A
+:ref:`ref-tasks-install` task within the ``${``\ :term:`D`\ ``}`` directory. A
 subset of these files automatically goes into the sysroot. The reason
 for this limitation is that almost all files that go into the sysroot
 are cataloged in manifests in order to ensure they can be removed later
@@ -1173,14 +1141,12 @@
 contents of the image are expressed in terms of packages and not
 recipes.
 
-During the :ref:`ref-tasks-package`
-task, files installed during the
-:ref:`ref-tasks-install` task are
-split into one main package, which is almost always named the same as
-the recipe, and into several other packages. This separation exists
-because not all of those installed files are useful in every image. For
-example, you probably do not need any of the documentation installed in
-a production image. Consequently, for each recipe the documentation
+During the :ref:`ref-tasks-package` task, files installed during the
+:ref:`ref-tasks-install` task are split into one main package, which is almost
+always named the same as the recipe, and into several other packages. This
+separation exists because not all of those installed files are useful in every
+image. For example, you probably do not need any of the documentation installed
+in a production image. Consequently, for each recipe the documentation
 files are separated into a ``-doc`` package. Recipes that package
 software containing optional modules or plugins might undergo additional
 package splitting as well.
@@ -1188,8 +1154,7 @@
 After building a recipe, you can see where files have gone by looking in
 the ``oe-workdir/packages-split`` directory, which contains a
 subdirectory for each package. Apart from some advanced cases, the
-:term:`PACKAGES` and
-:term:`FILES` variables controls
+:term:`PACKAGES` and :term:`FILES` variables controls
 splitting. The :term:`PACKAGES` variable lists all of the packages to be
 produced, while the :term:`FILES` variable specifies which files to include
 in each package by using an override to specify the package. For
@@ -1231,16 +1196,11 @@
 
 .. note::
 
-   The
-   devtool deploy-target
-   and
-   devtool undeploy-target
-   commands do not currently interact with any package management system
-   on the target device (e.g. RPM or OPKG). Consequently, you should not
-   intermingle
-   devtool deploy-target
-   and package manager operations on the target device. Doing so could
-   result in a conflicting set of files.
+   The ``devtool deploy-target`` and ``devtool undeploy-target`` commands do
+   not currently interact with any package management system on the target
+   device (e.g. RPM or OPKG). Consequently, you should not intermingle
+   ``devtool deploy-target`` and package manager operations on the target
+   device. Doing so could result in a conflicting set of files.
 
 Installing Additional Items Into the Extensible SDK
 ===================================================
@@ -1264,7 +1224,7 @@
 
 In this scenario, the Yocto build tooling, e.g. ``bitbake``
 is directly accessible to build additional items, and it
-can simply be executed directly:
+can simply be executed directly::
 
    $ bitbake mesa
    $ bitbake build-sysroots
@@ -1272,6 +1232,8 @@
 When using a standalone installer for the Extensible SDK
 --------------------------------------------------------
 
+::
+
    $ devtool sdk-install mesa
 
 By default, the ``devtool sdk-install`` command assumes
@@ -1297,13 +1259,13 @@
 
    $ devtool sdk-update
 
-The previous command assumes your SDK provider has set the
-default update URL for you through the :term:`SDK_UPDATE_URL`
-variable as described in the
+The previous command assumes your SDK provider has set the default update URL
+for you through the :term:`SDK_UPDATE_URL` variable as described in the
 ":ref:`sdk-manual/appendix-customizing:Providing Updates to the Extensible SDK After Installation`"
 section. If the SDK provider has not set that default URL, you need to
-specify it yourself in the command as follows: $ devtool sdk-update
-path_to_update_directory
+specify it yourself in the command as follows::
+
+   $ devtool sdk-update path_to_update_directory
 
 .. note::
 
diff --git a/poky/documentation/template/template.svg b/poky/documentation/template/template.svg
index 43043e3..50715c0 100644
--- a/poky/documentation/template/template.svg
+++ b/poky/documentation/template/template.svg
@@ -1019,7 +1019,7 @@
          id="tspan1183-1-8"
          x="-52.348656"
          y="518.42615"
-         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:37.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none">Objets</tspan></text>
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:37.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:none">Objects</tspan></text>
     <text
        xml:space="preserve"
        style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
diff --git a/poky/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py b/poky/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
index 64a3502..d2f0f88 100644
--- a/poky/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
+++ b/poky/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
@@ -10,7 +10,8 @@
         import tempfile
         cls.temp_dir = tempfile.TemporaryDirectory(prefix="oeqa-remotefeeds-")
         cls.repo_server = HTTPService(os.path.join(cls.tc.td['WORKDIR'], 'oe-rootfs-repo'),
-                                      cls.tc.target.server_ip)
+                                      '0.0.0.0', port=cls.tc.target.server_port,
+                                      logger=cls.tc.logger)
         cls.repo_server.start()
 
     @classmethod
diff --git a/poky/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb b/poky/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
index c5037a4..1a140a5 100644
--- a/poky/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
+++ b/poky/meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
@@ -5,7 +5,6 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=6ddd5335ef96fb858a138230af773710 \
                     file://main.c;beginline=1;endline=17;md5=36d4b85e5ae9028e918d1cc775c2475e"
 
-PR = "r2"
 SRC_URI = "${SAVANNAH_GNU_MIRROR}/ed/ed-${PV}.tar.bz2"
 
 SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
diff --git a/poky/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb b/poky/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb
index a1ad2e8..1fcbbdd 100644
--- a/poky/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb
+++ b/poky/meta-skeleton/recipes-skeleton/libxpm/libxpm_3.5.6.bb
@@ -4,7 +4,6 @@
 LICENSE = "X-BSD"
 LIC_FILES_CHKSUM = "file://COPYING;md5=3e07763d16963c3af12db271a31abaa5"
 DEPENDS += "libxext"
-PR = "r2"
 PE = "1"
 
 XORG_PN = "libXpm"
diff --git a/poky/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb b/poky/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
index d7a5a95..8437a5a 100644
--- a/poky/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
+++ b/poky/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb
@@ -1,7 +1,6 @@
 SUMMARY = "Example recipe for using inherit useradd"
 DESCRIPTION = "This recipe serves as an example for using features from useradd.bbclass"
 SECTION = "examples"
-PR = "r1"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
diff --git a/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf b/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
index 362f6e0..8b67cef 100644
--- a/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
+++ b/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
@@ -3,9 +3,6 @@
 #@DESCRIPTION: Reference machine configuration for http://beagleboard.org/bone and http://beagleboard.org/black boards
 
 PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
-XSERVER ?= "xserver-xorg \
-           xf86-video-modesetting \
-           "
 
 MACHINE_EXTRA_RRECOMMENDS = "kernel-modules kernel-devicetree"
 
diff --git a/poky/meta/classes-global/base.bbclass b/poky/meta/classes-global/base.bbclass
index 7c774d2..f57f9cf 100644
--- a/poky/meta/classes-global/base.bbclass
+++ b/poky/meta/classes-global/base.bbclass
@@ -527,7 +527,7 @@
                 message = "Has a restricted license '%s' which is not listed in your LICENSE_FLAGS_ACCEPTED." % unmatched
                 details = d.getVarFlag("LICENSE_FLAGS_DETAILS", unmatched)
                 if details:
-                    message += details
+                    message += "\n" + details
             bb.debug(1, "Skipping %s: %s" % (pn, message))
             raise bb.parse.SkipRecipe(message)
 
diff --git a/poky/meta/classes-global/insane.bbclass b/poky/meta/classes-global/insane.bbclass
index 2e53778..5743d91 100644
--- a/poky/meta/classes-global/insane.bbclass
+++ b/poky/meta/classes-global/insane.bbclass
@@ -97,9 +97,8 @@
         return
 
     if stanza.startswith(b'#!'):
-        #Shebang not found
         try:
-            stanza = stanza.decode("utf-8")
+            stanza.decode("utf-8")
         except UnicodeDecodeError:
             #If it is not a text file, it is not a script
             return
diff --git a/poky/meta/classes-global/license.bbclass b/poky/meta/classes-global/license.bbclass
index 23625f0..b2e0d3f 100644
--- a/poky/meta/classes-global/license.bbclass
+++ b/poky/meta/classes-global/license.bbclass
@@ -29,7 +29,7 @@
     lic_files_paths = find_license_files(d)
 
     # The base directory we wrangle licenses to
-    destdir = os.path.join(d.getVar('LICSSTATEDIR'), d.getVar('PN'))
+    destdir = os.path.join(d.getVar('LICSSTATEDIR'), d.getVar('SSTATE_PKGARCH'), d.getVar('PN'))
     copy_license_files(lic_files_paths, destdir)
     info = get_recipe_info(d)
     with open(os.path.join(destdir, "recipeinfo"), "w") as f:
diff --git a/poky/meta/classes-global/sstate.bbclass b/poky/meta/classes-global/sstate.bbclass
index c501984..2676f18 100644
--- a/poky/meta/classes-global/sstate.bbclass
+++ b/poky/meta/classes-global/sstate.bbclass
@@ -55,8 +55,6 @@
 SSTATE_EXTRAPATH[vardepvalue] = ""
 SSTATE_EXTRAPATHWILDCARD[vardepvalue] = ""
 
-# For multilib rpm the allarch packagegroup files can overwrite (in theory they're identical)
-SSTATE_ALLOW_OVERLAP_FILES = "${DEPLOY_DIR}/licenses/"
 # Avoid docbook/sgml catalog warnings for now
 SSTATE_ALLOW_OVERLAP_FILES += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
 # sdk-provides-dummy-nativesdk and nativesdk-buildtools-perl-dummy overlap for different SDKMACHINE
@@ -85,14 +83,15 @@
 
 BB_HASHFILENAME = "False ${SSTATE_PKGSPEC} ${SSTATE_SWSPEC}"
 
+SSTATE_ARCHS_TUNEPKG ??= "${TUNE_PKGARCH}"
 SSTATE_ARCHS = " \
     ${BUILD_ARCH} \
     ${BUILD_ARCH}_${ORIGNATIVELSBSTRING} \
     ${BUILD_ARCH}_${SDK_ARCH}_${SDK_OS} \
     ${SDK_ARCH}_${SDK_OS} \
-    ${SDK_ARCH}_${PACKAGE_ARCH} \
+    ${SDK_ARCH}_${SDK_ARCH}-${SDKPKGSUFFIX} \
     allarch \
-    ${PACKAGE_ARCH} \
+    ${SSTATE_ARCHS_TUNEPKG} \
     ${PACKAGE_EXTRA_ARCHS} \
     ${MACHINE_ARCH}"
 SSTATE_ARCHS[vardepsexclude] = "ORIGNATIVELSBSTRING"
@@ -268,7 +267,7 @@
     overlap_allowed = (d.getVar("SSTATE_ALLOW_OVERLAP_FILES") or "").split()
     match = []
     for f in sharedfiles:
-        if os.path.exists(f) and not os.path.islink(f):
+        if os.path.exists(f):
             f = os.path.normpath(f)
             realmatch = True
             for w in overlap_allowed:
@@ -278,36 +277,18 @@
                     break
             if realmatch:
                 match.append(f)
-                sstate_search_cmd = "grep -rlF '%s' %s --exclude=master.list | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
+                sstate_search_cmd = "grep -rlF '%s' %s --exclude=index-* | sed -e 's:^.*/::'" % (f, d.expand("${SSTATE_MANIFESTS}"))
                 search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
                 if search_output:
                     match.append("  (matched in %s)" % search_output.decode('utf-8').rstrip())
                 else:
                     match.append("  (not matched to any task)")
     if match:
-        bb.error("The recipe %s is trying to install files into a shared " \
-          "area when those files already exist. Those files and their manifest " \
-          "location are:\n  %s\nPlease verify which recipe should provide the " \
-          "above files.\n\nThe build has stopped, as continuing in this scenario WILL " \
-          "break things - if not now, possibly in the future (we've seen builds fail " \
-          "several months later). If the system knew how to recover from this " \
-          "automatically it would, however there are several different scenarios " \
-          "which can result in this and we don't know which one this is. It may be " \
-          "you have switched providers of something like virtual/kernel (e.g. from " \
-          "linux-yocto to linux-yocto-dev), in that case you need to execute the " \
-          "clean task for both recipes and it will resolve this error. It may be " \
-          "you changed DISTRO_FEATURES from systemd to udev or vice versa. Cleaning " \
-          "those recipes should again resolve this error, however switching " \
-          "DISTRO_FEATURES on an existing build directory is not supported - you " \
-          "should really clean out tmp and rebuild (reusing sstate should be safe). " \
-          "It could be the overlapping files detected are harmless in which case " \
-          "adding them to SSTATE_ALLOW_OVERLAP_FILES may be the correct solution. It could " \
-          "also be your build is including two different conflicting versions of " \
-          "things (e.g. bluez 4 and bluez 5 and the correct solution for that would " \
-          "be to resolve the conflict. If in doubt, please ask on the mailing list, " \
-          "sharing the error and filelist above." % \
+        bb.fatal("Recipe %s is trying to install files into a shared " \
+          "area when those files already exist. The files and the manifests listing " \
+          "them are:\n  %s\n"
+          "Please adjust the recipes so only one recipe provides a given file. " % \
           (d.getVar('PN'), "\n  ".join(match)))
-        bb.fatal("If the above message is too much, the simpler version is you're advised to wipe out tmp and rebuild (reusing sstate is fine). That will likely fix things in most (but not all) cases.")
 
     if ss['fixmedir'] and os.path.exists(ss['fixmedir'] + "/fixmepath.cmd"):
         sharedfiles.append(ss['fixmedir'] + "/fixmepath.cmd")
diff --git a/poky/meta/classes-global/staging.bbclass b/poky/meta/classes-global/staging.bbclass
index 3a300c3..d229f40 100644
--- a/poky/meta/classes-global/staging.bbclass
+++ b/poky/meta/classes-global/staging.bbclass
@@ -92,7 +92,8 @@
     qa_already_stripped = 'already-stripped' in (d.getVar('INSANE_SKIP:' + pn) or "").split()
     strip_cmd = d.getVar("STRIP")
 
-    oe.package.strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d,
+    max_process = oe.utils.get_bb_number_threads(d)
+    oe.package.strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, max_process,
                            qa_already_stripped=qa_already_stripped)
 }
 
diff --git a/poky/meta/classes-recipe/fontcache.bbclass b/poky/meta/classes-recipe/fontcache.bbclass
index 0d496b7..6f49783 100644
--- a/poky/meta/classes-recipe/fontcache.bbclass
+++ b/poky/meta/classes-recipe/fontcache.bbclass
@@ -13,6 +13,7 @@
 inherit qemu
 
 FONT_PACKAGES ??= "${PN}"
+FONT_PACKAGES:class-native = ""
 FONT_EXTRA_RDEPENDS ?= "${MLPREFIX}fontconfig-utils"
 FONTCONFIG_CACHE_DIR ?= "${localstatedir}/cache/fontconfig"
 FONTCONFIG_CACHE_PARAMS ?= "-v"
diff --git a/poky/meta/classes-recipe/goarch.bbclass b/poky/meta/classes-recipe/goarch.bbclass
index e3555e1..5fb6051 100644
--- a/poky/meta/classes-recipe/goarch.bbclass
+++ b/poky/meta/classes-recipe/goarch.bbclass
@@ -54,6 +54,7 @@
 COMPATIBLE_HOST:powerpc = "null"
 COMPATIBLE_HOST:powerpc64 = "null"
 COMPATIBLE_HOST:mipsarchn32 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
 
 ARM_INSTRUCTION_SET:armv4 = "arm"
 ARM_INSTRUCTION_SET:armv5 = "arm"
diff --git a/poky/meta/classes-recipe/image.bbclass b/poky/meta/classes-recipe/image.bbclass
index 4f00162..7231fad 100644
--- a/poky/meta/classes-recipe/image.bbclass
+++ b/poky/meta/classes-recipe/image.bbclass
@@ -96,6 +96,7 @@
 PID = "${@os.getpid()}"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
+SSTATE_ARCHS_TUNEPKG = "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}"
 
 LDCONFIGDEPEND ?= "ldconfig-native:do_populate_sysroot"
 LDCONFIGDEPEND:libc-musl = ""
diff --git a/poky/meta/classes-recipe/kernel-fitimage.bbclass b/poky/meta/classes-recipe/kernel-fitimage.bbclass
index 13e8947..7e30a5d 100644
--- a/poky/meta/classes-recipe/kernel-fitimage.bbclass
+++ b/poky/meta/classes-recipe/kernel-fitimage.bbclass
@@ -599,6 +599,11 @@
 				DTB_PATH="${KERNEL_OUTPUT_DIR}/$DTB"
 			fi
 
+		        # Strip off the path component from the filename
+			if "${@'false' if oe.types.boolean(d.getVar('KERNEL_DTBVENDORED')) else 'true'}"; then
+			    DTB=`basename $DTB`
+			fi
+
 			# Set the default dtb image if it exists in the devicetree.
 			if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
 				default_dtb_image=$(echo "$DTB" | tr '/' '_')
diff --git a/poky/meta/classes-recipe/license_image.bbclass b/poky/meta/classes-recipe/license_image.bbclass
index fc859c7..19b3dc5 100644
--- a/poky/meta/classes-recipe/license_image.bbclass
+++ b/poky/meta/classes-recipe/license_image.bbclass
@@ -18,7 +18,7 @@
 
 python write_package_manifest() {
     # Get list of installed packages
-    license_image_dir = d.expand('${LICENSE_DIRECTORY}/${IMAGE_NAME}')
+    license_image_dir = d.expand('${LICENSE_DIRECTORY}/${SSTATE_PKGARCH}/${IMAGE_NAME}')
     bb.utils.mkdirhier(license_image_dir)
     from oe.rootfs import image_list_installed_packages
     from oe.utils import format_pkg_list
@@ -49,7 +49,7 @@
             pkg_dic[pkg_name]["LICENSE"] = pkg_dic[pkg_name][pkg_lic_name]
 
     rootfs_license_manifest = os.path.join(d.getVar('LICENSE_DIRECTORY'),
-                        d.getVar('IMAGE_NAME'), 'license.manifest')
+                        d.getVar('SSTATE_PKGARCH'), d.getVar('IMAGE_NAME'), 'license.manifest')
     write_license_files(d, rootfs_license_manifest, pkg_dic, rootfs=True)
 }
 
@@ -59,6 +59,8 @@
 
     bad_licenses = (d.getVar("INCOMPATIBLE_LICENSE") or "").split()
     bad_licenses = expand_wildcard_licenses(d, bad_licenses)
+    pkgarchs = d.getVar("SSTATE_ARCHS").split()
+    pkgarchs.reverse()
 
     exceptions = (d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") or "").split()
     with open(license_manifest, "w") as license_file:
@@ -98,9 +100,13 @@
                 license_file.write("FILES: %s\n\n" % pkg_dic[pkg]["FILES"])
 
             for lic in pkg_dic[pkg]["LICENSES"]:
-                lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY'),
-                                        pkg_dic[pkg]["PN"], "generic_%s" % 
-                                        re.sub(r'\+', '', lic))
+                for pkgarch in pkgarchs:
+                    lic_file = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+                                            pkgarch,
+                                            pkg_dic[pkg]["PN"], "generic_%s" %
+                                            re.sub(r'\+', '', lic))
+                    if os.path.exists(lic_file):
+                        break
                 # add explicity avoid of CLOSED license because isn't generic
                 if lic == "CLOSED":
                    continue
@@ -130,8 +136,13 @@
             for pkg in sorted(pkg_dic):
                 pkg_rootfs_license_dir = os.path.join(rootfs_license_dir, pkg)
                 bb.utils.mkdirhier(pkg_rootfs_license_dir)
-                pkg_license_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
-                                            pkg_dic[pkg]["PN"]) 
+                for pkgarch in pkgarchs:
+                    pkg_license_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+                                                   pkgarch, pkg_dic[pkg]["PN"])
+                    if os.path.exists(pkg_license_dir):
+                        break
+                if not os.path.exists(pkg_license_dir ):
+                    bb.fatal("Couldn't find license information for dependency %s" % pkg)
 
                 pkg_manifest_licenses = [canonical_license(d, lic) \
                         for lic in pkg_dic[pkg]["LICENSES"]]
@@ -183,7 +194,7 @@
                     os.lchown(p, 0, 0)
                     os.chmod(p, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
 
-
+write_license_files[vardepsexclude] = "SSTATE_ARCHS"
 
 def license_deployed_manifest(d):
     """
@@ -195,6 +206,8 @@
     dep_dic = {}
     man_dic = {}
     lic_dir = d.getVar("LICENSE_DIRECTORY")
+    pkgarchs = d.getVar("SSTATE_ARCHS").split()
+    pkgarchs.reverse()
 
     dep_dic = get_deployed_dependencies(d)
     for dep in dep_dic.keys():
@@ -204,12 +217,19 @@
         man_dic[dep]["PN"] = dep
         man_dic[dep]["FILES"] = \
             " ".join(get_deployed_files(dep_dic[dep]))
-        with open(os.path.join(lic_dir, dep, "recipeinfo"), "r") as f:
+
+        for pkgarch in pkgarchs:
+            licfile = os.path.join(lic_dir, pkgarch, dep, "recipeinfo")
+            if os.path.exists(licfile):
+                break
+        if not os.path.exists(licfile):
+            bb.fatal("Couldn't find license information for dependency %s" % dep)
+        with open(licfile, "r") as f:
             for line in f.readlines():
                 key,val = line.split(": ", 1)
                 man_dic[dep][key] = val[:-1]
 
-    lic_manifest_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+    lic_manifest_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'), d.getVar('SSTATE_PKGARCH'),
                                     d.getVar('IMAGE_NAME'))
     bb.utils.mkdirhier(lic_manifest_dir)
     image_license_manifest = os.path.join(lic_manifest_dir, 'image_license.manifest')
@@ -217,7 +237,7 @@
 
     link_name = d.getVar('IMAGE_LINK_NAME')
     if link_name:
-        lic_manifest_symlink_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'),
+        lic_manifest_symlink_dir = os.path.join(d.getVar('LICENSE_DIRECTORY'), d.getVar('SSTATE_PKGARCH'),
                                     link_name)
         # remove old symlink
         if os.path.islink(lic_manifest_symlink_dir):
@@ -227,6 +247,8 @@
         if lic_manifest_dir != lic_manifest_symlink_dir:
             os.symlink(lic_manifest_dir, lic_manifest_symlink_dir)
 
+license_deployed_manifest[vardepsexclude] = "SSTATE_ARCHS"
+
 def get_deployed_dependencies(d):
     """
     Get all the deployed dependencies of an image
@@ -255,7 +277,7 @@
                 break
 
     return deploy
-get_deployed_dependencies[vardepsexclude] = "BB_TASKDEPDATA"
+get_deployed_dependencies[vardepsexclude] = "BB_TASKDEPDATA SSTATE_ARCHS"
 
 def get_deployed_files(man_file):
     """
diff --git a/poky/meta/classes-recipe/multilib_script.bbclass b/poky/meta/classes-recipe/multilib_script.bbclass
index 7011526..e6f0249 100644
--- a/poky/meta/classes-recipe/multilib_script.bbclass
+++ b/poky/meta/classes-recipe/multilib_script.bbclass
@@ -31,10 +31,11 @@
     for entry in (d.getVar("MULTILIB_SCRIPTS", False) or "").split():
         pkg, script = entry.split(":")
         epkg = d.expand(pkg)
-        scriptname = os.path.basename(script)
+        escript = d.expand(script)
+        scriptname = os.path.basename(escript)
         d.appendVar("ALTERNATIVE:" + epkg, " " + scriptname + " ")
-        d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, script)
-        d.setVarFlag("ALTERNATIVE_TARGET", scriptname, script + "-${MULTILIB_SUFFIX}")
-        d.appendVar("multilibscript_rename",  "\n	mv ${PKGD}" + script + " ${PKGD}" + script + "-${MULTILIB_SUFFIX}")
-        d.appendVar("FILES:" + epkg, " " + script + "-${MULTILIB_SUFFIX}")
+        d.setVarFlag("ALTERNATIVE_LINK_NAME", scriptname, escript)
+        d.setVarFlag("ALTERNATIVE_TARGET", scriptname, escript + "-${MULTILIB_SUFFIX}")
+        d.appendVar("multilibscript_rename",  "\n	mv ${PKGD}" + escript + " ${PKGD}" + escript + "-${MULTILIB_SUFFIX}")
+        d.appendVar("FILES:" + epkg, " " + escript + "-${MULTILIB_SUFFIX}")
 }
diff --git a/poky/meta/classes-recipe/pypi.bbclass b/poky/meta/classes-recipe/pypi.bbclass
index f510bfe..b8c18cc 100644
--- a/poky/meta/classes-recipe/pypi.bbclass
+++ b/poky/meta/classes-recipe/pypi.bbclass
@@ -30,7 +30,9 @@
 SRC_URI:prepend = "${PYPI_SRC_URI} "
 S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
 
-UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${PYPI_PACKAGE}/"
-UPSTREAM_CHECK_REGEX ?= "/${PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/"
+# Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions
+UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@d.getVar('PYPI_PACKAGE').replace('_', '-')}"
+UPSTREAM_CHECK_URI ?= "https://pypi.org/project/${UPSTREAM_CHECK_PYPI_PACKAGE}/"
+UPSTREAM_CHECK_REGEX ?= "/${UPSTREAM_CHECK_PYPI_PACKAGE}/(?P<pver>(\d+[\.\-_]*)+)/"
 
 CVE_PRODUCT ?= "python:${PYPI_PACKAGE}"
diff --git a/poky/meta/classes-recipe/systemd-boot-cfg.bbclass b/poky/meta/classes-recipe/systemd-boot-cfg.bbclass
index 366dd23..12da41e 100644
--- a/poky/meta/classes-recipe/systemd-boot-cfg.bbclass
+++ b/poky/meta/classes-recipe/systemd-boot-cfg.bbclass
@@ -35,7 +35,7 @@
         bb.fatal('Unable to open %s' % cfile)
 
     cfgfile.write('# Automatically created by OE\n')
-    cfgfile.write('default %s\n' % (labels.split()[0]))
+    cfgfile.write('default %s.conf\n' % (labels.split()[0]))
     timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT')
     if timeout:
         cfgfile.write('timeout %s\n' % timeout)
diff --git a/poky/meta/classes-recipe/testimage.bbclass b/poky/meta/classes-recipe/testimage.bbclass
index e306834..7c56fe9 100644
--- a/poky/meta/classes-recipe/testimage.bbclass
+++ b/poky/meta/classes-recipe/testimage.bbclass
@@ -322,7 +322,7 @@
     ovmf = d.getVar("QEMU_USE_OVMF")
 
     slirp = False
-    if d.getVar("QEMU_USE_SLIRP"):
+    if bb.utils.contains('TEST_RUNQEMUPARAMS', 'slirp', True, False, d):
         slirp = True
 
     # TODO: We use the current implementation of qemu runner because of
@@ -369,10 +369,21 @@
     # runtime use network for download projects for build
     export_proxies(d)
 
+    if slirp:
+        # Default to 127.0.0.1 and let the runner identify the port forwarding
+        # (as OEQemuTarget does), but allow overriding.
+        target_ip = d.getVar("TEST_TARGET_IP") or "127.0.0.1"
+        # Default to 10.0.2.2 as this is the IP that the guest has with the
+        # default qemu slirp networking configuration, but allow overriding.
+        server_ip = d.getVar("TEST_SERVER_IP") or "10.0.2.2"
+    else:
+        target_ip = d.getVar("TEST_TARGET_IP")
+        server_ip = d.getVar("TEST_SERVER_IP")
+
     # the robot dance
     target = OERuntimeTestContextExecutor.getTarget(
-        d.getVar("TEST_TARGET"), logger, d.getVar("TEST_TARGET_IP"),
-        d.getVar("TEST_SERVER_IP"), **target_kwargs)
+        d.getVar("TEST_TARGET"), logger, target_ip,
+        server_ip, **target_kwargs)
 
     # test context
     tc = OERuntimeTestContext(td, logger, target, image_packages, extract_dir)
diff --git a/poky/meta/classes-recipe/uboot-extlinux-config.bbclass b/poky/meta/classes-recipe/uboot-extlinux-config.bbclass
index 653e583..f752c16 100644
--- a/poky/meta/classes-recipe/uboot-extlinux-config.bbclass
+++ b/poky/meta/classes-recipe/uboot-extlinux-config.bbclass
@@ -6,6 +6,8 @@
 #
 # External variables:
 #
+# UBOOT_EXTLINUX                   - Set to "1" to enable generation
+#                                    of extlinux.conf using this class.
 # UBOOT_EXTLINUX_CONSOLE           - Set to "console=ttyX" to change kernel boot
 #                                    default console.
 # UBOOT_EXTLINUX_LABELS            - A list of targets for the automatic config.
@@ -20,7 +22,8 @@
 # UBOOT_EXTLINUX_TIMEOUT           - Timeout before DEFAULT selection is made.
 #                                    Measured in 1/10 of a second.
 # UBOOT_EXTLINUX_DEFAULT_LABEL     - Target to be selected by default after
-#                                    the timeout period
+#                                    the timeout period.
+# UBOOT_EXTLINUX_CONFIG            - Output file.
 #
 # If there's only one label system will boot automatically and menu won't be
 # created. If you want to use more than one labels, e.g linux and alternate,
diff --git a/poky/meta/classes/create-spdx-2.2.bbclass b/poky/meta/classes/create-spdx-2.2.bbclass
index aed1a94..b0aef80 100644
--- a/poky/meta/classes/create-spdx-2.2.bbclass
+++ b/poky/meta/classes/create-spdx-2.2.bbclass
@@ -302,7 +302,8 @@
             if file_path.lstrip("/") == pkg_file.fileName.lstrip("/"):
                 break
         else:
-            bb.fatal("No package file found for %s" % str(file_path))
+            bb.fatal("No package file found for %s in %s; SPDX found: %s" % (str(file_path), package,
+                " ".join(p.fileName for p in package_files)))
             continue
 
         for debugsrc in file_data["debugsrc"]:
@@ -348,6 +349,8 @@
 
     deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
     spdx_deps_file = Path(d.getVar("SPDXDEPS"))
+    package_archs = d.getVar("SSTATE_ARCHS").split()
+    package_archs.reverse()
 
     dep_recipes = []
 
@@ -355,7 +358,9 @@
         deps = json.load(f)
 
     for dep_pn, dep_hashfn in deps:
-        dep_recipe_path = oe.sbom.doc_path_by_hashfn(deploy_dir_spdx, "recipe-" + dep_pn, dep_hashfn)
+        dep_recipe_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, "recipe-" + dep_pn, dep_hashfn)
+        if not dep_recipe_path:
+            bb.fatal("Cannot find any SPDX file for recipe %s, %s" % (dep_pn, dep_hashfn))
 
         spdx_dep_doc, spdx_dep_sha1 = oe.sbom.read_doc(dep_recipe_path)
 
@@ -384,6 +389,7 @@
 
     return dep_recipes
 
+collect_dep_recipes[vardepsexclude] = "SSTATE_ARCHS"
 
 def collect_dep_sources(d, dep_recipes):
     import oe.sbom
@@ -532,6 +538,7 @@
     include_sources = d.getVar("SPDX_INCLUDE_SOURCES") == "1"
     archive_sources = d.getVar("SPDX_ARCHIVE_SOURCES") == "1"
     archive_packaged = d.getVar("SPDX_ARCHIVE_PACKAGED") == "1"
+    pkg_arch = d.getVar("SSTATE_PKGARCH")
 
     creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
 
@@ -619,7 +626,7 @@
 
     dep_recipes = collect_dep_recipes(d, doc, recipe)
 
-    doc_sha1 = oe.sbom.write_doc(d, doc, d.getVar("SSTATE_PKGARCH"), "recipes", indent=get_json_indent(d))
+    doc_sha1 = oe.sbom.write_doc(d, doc, pkg_arch, "recipes", indent=get_json_indent(d))
     dep_recipes.append(oe.sbom.DepRecipe(doc, doc_sha1, recipe))
 
     recipe_ref = oe.spdx.SPDXExternalDocumentRef()
@@ -684,7 +691,7 @@
 
             add_package_sources_from_debug(d, package_doc, spdx_package, package, package_files, sources)
 
-            oe.sbom.write_doc(d, package_doc, d.getVar("SSTATE_PKGARCH"), "packages", indent=get_json_indent(d))
+            oe.sbom.write_doc(d, package_doc, pkg_arch, "packages", indent=get_json_indent(d))
 }
 do_create_spdx[vardepsexclude] += "BB_NUMBER_THREADS"
 # NOTE: depending on do_unpack is a hack that is necessary to get it's dependencies for archive the source
@@ -755,6 +762,9 @@
     creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
 
     providers = collect_package_providers(d)
+    pkg_arch = d.getVar("SSTATE_PKGARCH")
+    package_archs = d.getVar("SSTATE_ARCHS").split()
+    package_archs.reverse()
 
     if not is_native:
         bb.build.exec_func("read_subpackage_metadata", d)
@@ -771,7 +781,7 @@
             if not oe.packagedata.packaged(package, localdata):
                 continue
 
-            pkg_spdx_path = oe.sbom.doc_path(deploy_dir_spdx, pkg_name, d.getVar("SSTATE_PKGARCH"), "packages")
+            pkg_spdx_path = oe.sbom.doc_path(deploy_dir_spdx, pkg_name, pkg_arch, "packages")
 
             package_doc, package_doc_sha1 = oe.sbom.read_doc(pkg_spdx_path)
 
@@ -826,7 +836,9 @@
                 if dep in dep_package_cache:
                     (dep_spdx_package, dep_package_ref) = dep_package_cache[dep]
                 else:
-                    dep_path = oe.sbom.doc_path_by_hashfn(deploy_dir_spdx, dep_pkg, dep_hashfn)
+                    dep_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, dep_pkg, dep_hashfn)
+                    if not dep_path:
+                        bb.fatal("No SPDX file found for package %s, %s" % (dep_pkg, dep_hashfn))
 
                     spdx_dep_doc, spdx_dep_sha1 = oe.sbom.read_doc(dep_path)
 
@@ -854,10 +866,10 @@
                 )
                 seen_deps.add(dep)
 
-            oe.sbom.write_doc(d, runtime_doc, d.getVar("SSTATE_PKGARCH"), "runtime", spdx_deploy, indent=get_json_indent(d))
+            oe.sbom.write_doc(d, runtime_doc, pkg_arch, "runtime", spdx_deploy, indent=get_json_indent(d))
 }
 
-do_create_runtime_spdx[vardepsexclude] += "OVERRIDES"
+do_create_runtime_spdx[vardepsexclude] += "OVERRIDES SSTATE_ARCHS"
 
 addtask do_create_runtime_spdx after do_create_spdx before do_build do_rm_work
 SSTATETASKS += "do_create_runtime_spdx"
@@ -974,7 +986,7 @@
     from pathlib import Path
     from oe.sdk import sdk_list_installed_packages
 
-    sdk_name = d.getVar("SDK_NAME") + "-" + sdk_type
+    sdk_name = d.getVar("TOOLCHAIN_OUTPUTNAME") + "-" + sdk_type
     sdk_deploydir = Path(d.getVar("SDKDEPLOYDIR"))
     sdk_spdxid = oe.sbom.get_sdk_spdxid(sdk_name)
     sdk_packages = sdk_list_installed_packages(d, sdk_type == "target")
@@ -992,6 +1004,8 @@
     import bb.compress.zstd
 
     providers = collect_package_providers(d)
+    package_archs = d.getVar("SSTATE_ARCHS").split()
+    package_archs.reverse()
 
     creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
     deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
@@ -1017,11 +1031,14 @@
 
     for name in sorted(packages.keys()):
         if name not in providers:
-            bb.fatal("Unable to find provider for '%s'" % name)
+            bb.fatal("Unable to find SPDX provider for '%s'" % name)
 
         pkg_name, pkg_hashfn = providers[name]
 
-        pkg_spdx_path = oe.sbom.doc_path_by_hashfn(deploy_dir_spdx, pkg_name, pkg_hashfn)
+        pkg_spdx_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, pkg_name, pkg_hashfn)
+        if not pkg_spdx_path:
+            bb.fatal("No SPDX file found for package %s, %s" % (pkg_name, pkg_hashfn))
+
         pkg_doc, pkg_doc_sha1 = oe.sbom.read_doc(pkg_spdx_path)
 
         for p in pkg_doc.packages:
@@ -1038,7 +1055,10 @@
         else:
             bb.fatal("Unable to find package with name '%s' in SPDX file %s" % (name, pkg_spdx_path))
 
-        runtime_spdx_path = oe.sbom.doc_path_by_hashfn(deploy_dir_spdx, "runtime-" + name, pkg_hashfn)
+        runtime_spdx_path = oe.sbom.doc_find_by_hashfn(deploy_dir_spdx, package_archs, "runtime-" + name, pkg_hashfn)
+        if not runtime_spdx_path:
+            bb.fatal("No runtime SPDX document found for %s, %s" % (name, pkg_hashfn))
+
         runtime_doc, runtime_doc_sha1 = oe.sbom.read_doc(runtime_spdx_path)
 
         runtime_ref = oe.spdx.SPDXExternalDocumentRef()
@@ -1110,7 +1130,9 @@
                     })
 
                 for ref in doc.externalDocumentRefs:
-                    ref_path = oe.sbom.doc_path_by_namespace(deploy_dir_spdx, ref.spdxDocument)
+                    ref_path = oe.sbom.doc_find_by_namespace(deploy_dir_spdx, package_archs, ref.spdxDocument)
+                    if not ref_path:
+                        bb.fatal("Cannot find any SPDX file for document %s" % ref.spdxDocument)
                     collect_spdx_document(ref_path)
 
             collect_spdx_document(image_spdx_path)
@@ -1133,4 +1155,4 @@
 
             tar.addfile(info, fileobj=index_str)
 
-combine_spdx[vardepsexclude] += "BB_NUMBER_THREADS"
+combine_spdx[vardepsexclude] += "BB_NUMBER_THREADS SSTATE_ARCHS"
diff --git a/poky/meta/classes/cve-check.bbclass b/poky/meta/classes/cve-check.bbclass
index 55ae298..b55f429 100644
--- a/poky/meta/classes/cve-check.bbclass
+++ b/poky/meta/classes/cve-check.bbclass
@@ -32,7 +32,7 @@
 CVE_VERSION ??= "${PV}"
 
 CVE_CHECK_DB_DIR ?= "${DL_DIR}/CVE_CHECK"
-CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_2.db"
+CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_2-1.db"
 CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock"
 
 CVE_CHECK_LOG ?= "${T}/cve.log"
@@ -442,6 +442,7 @@
             cve_data[row[0]]["scorev3"] = row[3]
             cve_data[row[0]]["modified"] = row[4]
             cve_data[row[0]]["vector"] = row[5]
+            cve_data[row[0]]["vectorString"] = row[6]
         cursor.close()
     conn.close()
     return cve_data
@@ -507,6 +508,7 @@
         write_string += "CVSS v2 BASE SCORE: %s\n" % cve_data[cve]["scorev2"]
         write_string += "CVSS v3 BASE SCORE: %s\n" % cve_data[cve]["scorev3"]
         write_string += "VECTOR: %s\n" % cve_data[cve]["vector"]
+        write_string += "VECTORSTRING: %s\n" % cve_data[cve]["vectorString"]
         write_string += "MORE INFORMATION: %s%s\n\n" % (nvd_link, cve)
 
     if unpatched_cves and d.getVar("CVE_CHECK_SHOW_WARNINGS") == "1":
@@ -623,6 +625,7 @@
             "scorev2" : cve_data[cve]["scorev2"],
             "scorev3" : cve_data[cve]["scorev3"],
             "vector" : cve_data[cve]["vector"],
+            "vectorString" : cve_data[cve]["vectorString"],
             "status" : status,
             "link": issue_link
         }
diff --git a/poky/meta/classes/multilib.bbclass b/poky/meta/classes/multilib.bbclass
index 8a1a51a..d80a34c 100644
--- a/poky/meta/classes/multilib.bbclass
+++ b/poky/meta/classes/multilib.bbclass
@@ -30,6 +30,9 @@
         if val:
             e.data.setVar(name + "_MULTILIB_ORIGINAL", val)
 
+    # We nearly don't need this but dependencies on NON_MULTILIB_RECIPES don't work without it
+    d.setVar("SSTATE_ARCHS_TUNEPKG", "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}")
+
     overrides = e.data.getVar("OVERRIDES", False)
     pn = e.data.getVar("PN", False)
     overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn)
diff --git a/poky/meta/conf/bitbake.conf b/poky/meta/conf/bitbake.conf
index 0bcc821..21d6c8b 100644
--- a/poky/meta/conf/bitbake.conf
+++ b/poky/meta/conf/bitbake.conf
@@ -237,7 +237,7 @@
 
 PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"
 PV = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or '1.0'}"
-PR = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[2] or 'r0'}"
+PR = "r0"
 PE = ""
 PF = "${PN}-${EXTENDPE}${PV}-${PR}"
 EXTENDPE = "${@['','${PE}_'][int(d.getVar('PE') or 0) > 0]}"
@@ -459,7 +459,7 @@
 ##################################################################
 
 SDK_NAME_PREFIX ?= "oecore"
-SDK_NAME = "${SDK_NAME_PREFIX}-${SDK_ARCH}-${TUNE_PKGARCH}"
+SDK_NAME = "${SDK_NAME_PREFIX}-${IMAGE_BASENAME}-${SDK_ARCH}-${TUNE_PKGARCH}-${MACHINE}"
 SDKPATH = "/usr/local/oe-sdk-hardcoded-buildpath"
 SDKPATHNATIVE = "${SDKPATH}/sysroots/${SDK_SYS}"
 # The path to default to installing the SDK to
@@ -975,5 +975,6 @@
 oe.sstatesig.find_sstate_manifest[vardepsexclude] = "BBEXTENDCURR BBEXTENDVARIANT OVERRIDES PACKAGE_EXTRA_ARCHS"
 oe.utils.get_multilib_datastore[vardepsexclude] = "DEFAULTTUNE_MULTILIB_ORIGINAL OVERRIDES"
 oe.path.format_display[vardepsexclude] = "TOPDIR"
-oe.utils.multiprocess_launch[vardepsexclude] = "BB_NUMBER_THREADS"
+oe.utils.get_bb_number_threads[vardepsexclude] = "BB_NUMBER_THREADS"
 oe.packagedata.emit_pkgdata[vardepsexclude] = "BB_NUMBER_THREADS"
+oe.packagedata.read_subpkgdata_extended[vardepsexclude] = "BB_NUMBER_THREADS"
diff --git a/poky/meta/conf/distro/defaultsetup.conf b/poky/meta/conf/distro/defaultsetup.conf
index 1abb509..90b6805 100644
--- a/poky/meta/conf/distro/defaultsetup.conf
+++ b/poky/meta/conf/distro/defaultsetup.conf
@@ -14,7 +14,7 @@
 
 USER_CLASSES ?= ""
 PACKAGE_CLASSES ?= "package_ipk"
-INHERIT_DISTRO ?= "debian devshell sstate license remove-libtool"
+INHERIT_DISTRO ?= "debian devshell sstate license remove-libtool create-spdx"
 INHERIT += "${PACKAGE_CLASSES} ${USER_CLASSES} ${INHERIT_DISTRO}"
 
 INIT_MANAGER ??= "none"
diff --git a/poky/meta/conf/distro/include/maintainers.inc b/poky/meta/conf/distro/include/maintainers.inc
index 3619588..dcc507b 100644
--- a/poky/meta/conf/distro/include/maintainers.inc
+++ b/poky/meta/conf/distro/include/maintainers.inc
@@ -38,6 +38,7 @@
 RECIPE_MAINTAINER:pn-alsa-topology-conf = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
 RECIPE_MAINTAINER:pn-alsa-ucm-conf = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
 RECIPE_MAINTAINER:pn-alsa-utils = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
+RECIPE_MAINTAINER:pn-appstream = "Markus Volk <f_l_k@t-online.de>"
 RECIPE_MAINTAINER:pn-apr = "Hongxu Jia <hongxu.jia@windriver.com>"
 RECIPE_MAINTAINER:pn-apr-util = "Hongxu Jia <hongxu.jia@windriver.com>"
 RECIPE_MAINTAINER:pn-apt = "Unassigned <unassigned@yoctoproject.org>"
@@ -172,7 +173,7 @@
 RECIPE_MAINTAINER:pn-ffmpeg = "Alexander Kanavin <alex.kanavin@gmail.com>"
 RECIPE_MAINTAINER:pn-file = "Yi Zhao <yi.zhao@windriver.com>"
 RECIPE_MAINTAINER:pn-findutils = "Chen Qi <Qi.Chen@windriver.com>"
-RECIPE_MAINTAINER:pn-flac = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-flac = "Michael Opdenacker <michael.opdenacker@bootlin.com>"
 RECIPE_MAINTAINER:pn-flex = "Chen Qi <Qi.Chen@windriver.com>"
 RECIPE_MAINTAINER:pn-font-alias = "Unassigned <unassigned@yoctoproject.org>"
 RECIPE_MAINTAINER:pn-font-util = "Unassigned <unassigned@yoctoproject.org>"
@@ -208,7 +209,7 @@
 RECIPE_MAINTAINER:pn-glibc-locale = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-glibc-mtrace = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-glibc-scripts = "Khem Raj <raj.khem@gmail.com>"
-RECIPE_MAINTAINER:pn-glibc-tests = "Lukasz Majewski <lukma@denx.de>"
+RECIPE_MAINTAINER:pn-glibc-y2038-tests = "Lukasz Majewski <lukma@denx.de>"
 RECIPE_MAINTAINER:pn-glibc-testsuite = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-gmp = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-glslang = "Jose Quaresma <quaresma.jose@gmail.com>"
@@ -447,6 +448,7 @@
 RECIPE_MAINTAINER:pn-libxml-sax-perl = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-libxml-simple-perl = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-libxml2 = "Hongxu Jia <hongxu.jia@windriver.com>"
+RECIPE_MAINTAINER:pn-libxmlb = "Markus Volk <f_l_k@t-online.de>"
 RECIPE_MAINTAINER:pn-libxmu = "Unassigned <unassigned@yoctoproject.org>"
 RECIPE_MAINTAINER:pn-libxpm = "Unassigned <unassigned@yoctoproject.org>"
 RECIPE_MAINTAINER:pn-libxrandr = "Unassigned <unassigned@yoctoproject.org>"
@@ -529,6 +531,7 @@
 RECIPE_MAINTAINER:pn-mtdev = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-mtools = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-musl = "Khem Raj <raj.khem@gmail.com>"
+RECIPE_MAINTAINER:pn-musl-legacy-error = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-musl-locales = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-musl-obstack = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-musl-utils = "Khem Raj <raj.khem@gmail.com>"
@@ -604,11 +607,14 @@
 RECIPE_MAINTAINER:pn-python3-attrs = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-babel = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-bcrypt = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-beartype = "Marta Rybczynska <mrybczynska@syslinbit.com>"
+RECIPE_MAINTAINER:pn-python3-booleanpy = "zhengrq.fnst <zhengrq.fnst@fujitsu.com>"
 RECIPE_MAINTAINER:pn-python3-build = "Ross Burton <ross.burton@arm.com>"
 RECIPE_MAINTAINER:pn-python3-calver = "Trevor Gamblin <tgamblin@baylibre.com>"
 RECIPE_MAINTAINER:pn-python3-certifi = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-cffi = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-chardet = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-click = "Wang Mingyu <wangmy@fujitsu.com>"
 RECIPE_MAINTAINER:pn-python3-cryptography = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-cryptography-vectors = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-cython = "Trevor Gamblin <tgamblin@baylibre.com>"
@@ -636,10 +642,12 @@
 RECIPE_MAINTAINER:pn-python3-iniconfig = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-iniparse = "Trevor Gamblin <tgamblin@baylibre.com>"
 RECIPE_MAINTAINER:pn-python3-iso8601 = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-isodate = "Leon Anavi <leon.anavi@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-installer = "Ross Burton <ross.burton@arm.com>"
 RECIPE_MAINTAINER:pn-python3-jinja2 = "Richard Purdie <richard.purdie@linuxfoundation.org>"
 RECIPE_MAINTAINER:pn-python3-jsonpointer = "Bruce Ashfield <bruce.ashfield@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-jsonschema = "Bruce Ashfield <bruce.ashfield@gmail.com>"
+RECIPE_MAINTAINER:pn-python3-license-expression = "Wang Mingyu <wangmy@fujitsu.com>"
 RECIPE_MAINTAINER:pn-python3-libarchive-c = "Joshua Watt <JPEWhacker@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-lxml = "Khem Raj <raj.khem@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-magic = "Joshua Watt <JPEWhacker@gmail.com>"
@@ -675,6 +683,7 @@
 RECIPE_MAINTAINER:pn-python3-pytest-subtests = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-pytz = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-pyyaml = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-rdflib = "Wang Mingyu <wangmy@fujitsu.com>"
 RECIPE_MAINTAINER:pn-python3-requests = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-rfc3339-validator = "Bruce Ashfield <bruce.ashfield@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-rfc3986-validator = "Bruce Ashfield <bruce.ashfield@gmail.com>"
@@ -690,6 +699,7 @@
 RECIPE_MAINTAINER:pn-python3-smmap = "Unassigned <unassigned@yoctoproject.org>"
 RECIPE_MAINTAINER:pn-python3-snowballstemmer = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-sortedcontainers = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-spdx-tools = "Marta Rybczynska <mrybczynska@syslinbit.com>"
 RECIPE_MAINTAINER:pn-python3-sphinx = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-sphinxcontrib-qthelp = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-sphinxcontrib-devhelp = "Tim Orling <tim.orling@konsulko.com>"
@@ -706,11 +716,13 @@
 RECIPE_MAINTAINER:pn-python3-typing-extensions = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-typogrify = "Alexander Kanavin <alex.kanavin@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-unittest-automake-output = "Ross Burton <ross.burton@arm.com>"
+RECIPE_MAINTAINER:pn-python3-uritools = "Marta Rybczynska <mrybczynska@syslinbit.com>"
 RECIPE_MAINTAINER:pn-python3-urllib3 = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-vcversioner = "Bruce Ashfield <bruce.ashfield@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-wcwidth = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-webcolors = "Bruce Ashfield <bruce.ashfield@gmail.com>"
 RECIPE_MAINTAINER:pn-python3-wheel = "Tim Orling <tim.orling@konsulko.com>"
+RECIPE_MAINTAINER:pn-python3-xmltodict = "Leon Anavi <leon.anavi@konsulko.com>"
 RECIPE_MAINTAINER:pn-python3-zipp = "Tim Orling <tim.orling@konsulko.com>"
 RECIPE_MAINTAINER:pn-qemu = "Richard Purdie <richard.purdie@linuxfoundation.org>"
 RECIPE_MAINTAINER:pn-qemu-helper-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
diff --git a/poky/meta/conf/distro/include/ptest-packagelists.inc b/poky/meta/conf/distro/include/ptest-packagelists.inc
index 9160103..fc42f95 100644
--- a/poky/meta/conf/distro/include/ptest-packagelists.inc
+++ b/poky/meta/conf/distro/include/ptest-packagelists.inc
@@ -47,6 +47,7 @@
     libxml-sax-base-perl \
     libxml-simple-perl \
     libxml2 \
+    libxmlb \
     logrotate \
     lua \
     lzo \
@@ -77,8 +78,8 @@
     zlib \
     libexif \
 "
-PTESTS_FAST:append:libc-glibc = " glibc-tests"
-PTESTS_PROBLEMS:remove:libc-glibc = "glibc-tests"
+PTESTS_FAST:append:libc-glibc = " glibc-y2038-tests"
+PTESTS_PROBLEMS:remove:libc-glibc = "glibc-y2038-tests"
 PTESTS_FAST:remove:mips64 = "qemu"
 PTESTS_PROBLEMS:append:mips64 = " qemu"
 PTESTS_FAST:remove:riscv32 = "qemu"
@@ -108,7 +109,10 @@
     perl \
     python3-cryptography \
     python3 \
+    python3-click \
+    python3-xmltodict \
     strace \
+    tar \
     tcl \
     util-linux \
     valgrind \
@@ -140,5 +144,6 @@
     libpam \
     libseccomp \
     numactl \
+    python3-license-expression \
     python3-numpy \
 "
diff --git a/poky/meta/conf/distro/include/tcmode-default.inc b/poky/meta/conf/distro/include/tcmode-default.inc
index 69280fd..707402e 100644
--- a/poky/meta/conf/distro/include/tcmode-default.inc
+++ b/poky/meta/conf/distro/include/tcmode-default.inc
@@ -21,10 +21,10 @@
 BINUVERSION ?= "2.41%"
 GDBVERSION ?= "13.%"
 GLIBCVERSION ?= "2.38%"
-LINUXLIBCVERSION ?= "6.4%"
+LINUXLIBCVERSION ?= "6.5%"
 QEMUVERSION ?= "8.1%"
 GOVERSION ?= "1.20%"
-LLVMVERSION ?= "16.%"
+LLVMVERSION ?= "17.%"
 RUSTVERSION ?= "1.70%"
 
 PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
diff --git a/poky/meta/conf/distro/include/time64.inc b/poky/meta/conf/distro/include/time64.inc
index bc0c722..2e85753 100644
--- a/poky/meta/conf/distro/include/time64.inc
+++ b/poky/meta/conf/distro/include/time64.inc
@@ -19,7 +19,7 @@
 TARGET_CC_ARCH:append:x86 = "${@bb.utils.contains('TUNE_FEATURES', 'm32', '${GLIBC_64BIT_TIME_FLAGS}', '', d)}"
 
 GLIBC_64BIT_TIME_FLAGS:pn-glibc = ""
-GLIBC_64BIT_TIME_FLAGS:pn-glibc-tests = ""
+GLIBC_64BIT_TIME_FLAGS:pn-glibc-y2038-tests = ""
 GLIBC_64BIT_TIME_FLAGS:pn-glibc-testsuite = ""
 # pipewire-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
 # both 32 and 64 bit file APIs.  But it does not handle the time side?
@@ -32,13 +32,11 @@
 # Undefines _FILE_OFFSET_BITS on purpose in
 # libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
 GLIBC_64BIT_TIME_FLAGS:pn-gcc-sanitizers = ""
-# https://github.com/strace/strace/issues/250
-GLIBC_64BIT_TIME_FLAGS:pn-strace = ""
 
 # Caused by the flags exceptions above
 INSANE_SKIP:append:pn-gcc-sanitizers = " 32bit-time"
 INSANE_SKIP:append:pn-glibc = " 32bit-time"
-INSANE_SKIP:append:pn-glibc-tests = " 32bit-time"
+INSANE_SKIP:append:pn-glibc-y2038-tests = " 32bit-time"
 INSANE_SKIP:append:pn-pulseaudio = " 32bit-time"
 
 # Strace has tests that call 32 bit API directly, which is fair enough, e.g.
diff --git a/poky/meta/conf/machine/include/qemu.inc b/poky/meta/conf/machine/include/qemu.inc
index 0d71bcb..14feb86 100644
--- a/poky/meta/conf/machine/include/qemu.inc
+++ b/poky/meta/conf/machine/include/qemu.inc
@@ -8,6 +8,7 @@
 XSERVER ?= "xserver-xorg \
             ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-swrast xserver-xorg-extension-glx', '', d)} \
             xf86-video-fbdev \
+            xf86-video-modesetting \
             "
 
 MACHINE_FEATURES = "alsa bluetooth usbgadget screen vfat"
diff --git a/poky/meta/lib/oe/__init__.py b/poky/meta/lib/oe/__init__.py
index 47be7b5..da7cbab 100644
--- a/poky/meta/lib/oe/__init__.py
+++ b/poky/meta/lib/oe/__init__.py
@@ -7,6 +7,6 @@
 from pkgutil import extend_path
 __path__ = extend_path(__path__, __name__)
 
-BBIMPORTS = ["data", "path", "utils", "types", "package", \
+BBIMPORTS = ["data", "path", "utils", "types", "package", "packagedata", \
              "packagegroup", "sstatesig", "lsb", "cachedpath", "license", \
              "qa", "reproducible", "rust", "buildcfg"]
diff --git a/poky/meta/lib/oe/package.py b/poky/meta/lib/oe/package.py
index 9d70925..1dd20f8 100644
--- a/poky/meta/lib/oe/package.py
+++ b/poky/meta/lib/oe/package.py
@@ -114,7 +114,7 @@
             return start == magic
     return False
 
-def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, d, qa_already_stripped=False):
+def strip_execs(pn, dstdir, strip_cmd, libdir, base_libdir, max_process, qa_already_stripped=False):
     """
     Strip executable code (like executables, shared libraries) _in_place_
     - Based on sysroot_strip in staging.bbclass
@@ -122,6 +122,7 @@
     :param strip_cmd: Strip command (usually ${STRIP})
     :param libdir: ${libdir} - strip .so files in this directory
     :param base_libdir: ${base_libdir} - strip .so files in this directory
+    :param max_process: number of stripping processes started in parallel
     :param qa_already_stripped: Set to True if already-stripped' in ${INSANE_SKIP}
     This is for proper logging and messages only.
     """
@@ -164,7 +165,7 @@
                 # ...but is it ELF, and is it already stripped?
                 checkelf.append(file)
                 inodecache[file] = s.st_ino
-    results = oe.utils.multiprocess_launch(is_elf, checkelf, d)
+    results = oe.utils.multiprocess_launch_mp(is_elf, checkelf, max_process)
     for (file, elf_file) in results:
                 #elf_file = is_elf(file)
                 if elf_file & 1:
@@ -192,7 +193,7 @@
         elf_file = int(elffiles[file])
         sfiles.append((file, elf_file, strip_cmd))
 
-    oe.utils.multiprocess_launch(runstrip, sfiles, d)
+    oe.utils.multiprocess_launch_mp(runstrip, sfiles, max_process)
 
 
 def file_translate(file):
diff --git a/poky/meta/lib/oe/package_manager/deb/sdk.py b/poky/meta/lib/oe/package_manager/deb/sdk.py
index 653e42a..6f30050 100644
--- a/poky/meta/lib/oe/package_manager/deb/sdk.py
+++ b/poky/meta/lib/oe/package_manager/deb/sdk.py
@@ -69,7 +69,12 @@
 
         self.target_pm.run_pre_post_installs()
 
+        env_bkp = os.environ.copy()
+        os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+                             os.pathsep + os.environ["PATH"]
+
         self.target_pm.run_intercepts(populate_sdk='target')
+        os.environ.update(env_bkp)
 
         execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
 
diff --git a/poky/meta/lib/oe/package_manager/ipk/sdk.py b/poky/meta/lib/oe/package_manager/ipk/sdk.py
index 6a1f167..cc7a7ed 100644
--- a/poky/meta/lib/oe/package_manager/ipk/sdk.py
+++ b/poky/meta/lib/oe/package_manager/ipk/sdk.py
@@ -63,7 +63,12 @@
 
         self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY'))
 
+        env_bkp = os.environ.copy()
+        os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+                             os.pathsep + os.environ["PATH"]
+
         self.target_pm.run_intercepts(populate_sdk='target')
+        os.environ.update(env_bkp)
 
         execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
 
diff --git a/poky/meta/lib/oe/package_manager/rpm/sdk.py b/poky/meta/lib/oe/package_manager/rpm/sdk.py
index 85df6e9..ea79fe0 100644
--- a/poky/meta/lib/oe/package_manager/rpm/sdk.py
+++ b/poky/meta/lib/oe/package_manager/rpm/sdk.py
@@ -67,7 +67,12 @@
 
         self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY'))
 
+        env_bkp = os.environ.copy()
+        os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \
+                             os.pathsep + os.environ["PATH"]
+
         self.target_pm.run_intercepts(populate_sdk='target')
+        os.environ.update(env_bkp)
 
         execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND"))
 
diff --git a/poky/meta/lib/oe/qa.py b/poky/meta/lib/oe/qa.py
index de98063..f8ae3c7 100644
--- a/poky/meta/lib/oe/qa.py
+++ b/poky/meta/lib/oe/qa.py
@@ -216,8 +216,8 @@
 def check_upstream_status(fullpath):
     import re
     kinda_status_re = re.compile(r"^.*upstream.*status.*$", re.IGNORECASE | re.MULTILINE)
-    strict_status_re = re.compile(r"^Upstream-Status: (Pending|Submitted|Denied|Accepted|Inappropriate|Backport|Inactive-Upstream)( .+)?$", re.MULTILINE)
-    guidelines = "https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines#Patch_Header_Recommendations:_Upstream-Status"
+    strict_status_re = re.compile(r"^Upstream-Status: (Pending|Submitted|Denied|Inappropriate|Backport|Inactive-Upstream)( .+)?$", re.MULTILINE)
+    guidelines = "https://docs.yoctoproject.org/contributor-guide/recipe-style-guide.html#patch-upstream-status"
 
     with open(fullpath, encoding='utf-8', errors='ignore') as f:
         file_content = f.read()
diff --git a/poky/meta/lib/oe/sbom.py b/poky/meta/lib/oe/sbom.py
index 1130fa6..fd4b689 100644
--- a/poky/meta/lib/oe/sbom.py
+++ b/poky/meta/lib/oe/sbom.py
@@ -38,16 +38,34 @@
     return "SPDXRef-SDK-%s" % sdk
 
 
-def doc_path_by_namespace(spdx_deploy, doc_namespace):
-    return spdx_deploy / "by-namespace" / doc_namespace.replace("/", "_")
+def _doc_path_by_namespace(spdx_deploy, arch, doc_namespace):
+    return spdx_deploy / "by-namespace" / arch / doc_namespace.replace("/", "_")
 
 
-def doc_path_by_hashfn(spdx_deploy, doc_name, hashfn):
-    return spdx_deploy / "by-hash" / hashfn.split()[1] / (doc_name + ".spdx.json")
+def doc_find_by_namespace(spdx_deploy, search_arches, doc_namespace):
+    for pkgarch in search_arches:
+        p = _doc_path_by_namespace(spdx_deploy, pkgarch, doc_namespace)
+        if os.path.exists(p):
+            return p
+    return None
+
+
+def _doc_path_by_hashfn(spdx_deploy, arch, doc_name, hashfn):
+    return (
+        spdx_deploy / "by-hash" / arch / hashfn.split()[1] / (doc_name + ".spdx.json")
+    )
+
+
+def doc_find_by_hashfn(spdx_deploy, search_arches, doc_name, hashfn):
+    for pkgarch in search_arches:
+        p = _doc_path_by_hashfn(spdx_deploy, pkgarch, doc_name, hashfn)
+        if os.path.exists(p):
+            return p
+    return None
 
 
 def doc_path(spdx_deploy, doc_name, arch, subdir):
-    return spdx_deploy / arch/ subdir / (doc_name + ".spdx.json")
+    return spdx_deploy / arch / subdir / (doc_name + ".spdx.json")
 
 
 def write_doc(d, spdx_doc, arch, subdir, spdx_deploy=None, indent=None):
@@ -61,11 +79,13 @@
     with dest.open("wb") as f:
         doc_sha1 = spdx_doc.to_json(f, sort_keys=True, indent=indent)
 
-    l = doc_path_by_namespace(spdx_deploy, spdx_doc.documentNamespace)
+    l = _doc_path_by_namespace(spdx_deploy, arch, spdx_doc.documentNamespace)
     l.parent.mkdir(exist_ok=True, parents=True)
     l.symlink_to(os.path.relpath(dest, l.parent))
 
-    l = doc_path_by_hashfn(spdx_deploy, spdx_doc.name, d.getVar("BB_HASHFILENAME"))
+    l = _doc_path_by_hashfn(
+        spdx_deploy, arch, spdx_doc.name, d.getVar("BB_HASHFILENAME")
+    )
     l.parent.mkdir(exist_ok=True, parents=True)
     l.symlink_to(os.path.relpath(dest, l.parent))
 
diff --git a/poky/meta/lib/oe/utils.py b/poky/meta/lib/oe/utils.py
index 1658f35..a3b1bb1 100644
--- a/poky/meta/lib/oe/utils.py
+++ b/poky/meta/lib/oe/utils.py
@@ -264,10 +264,17 @@
         bb.note("Executing %s ..." % cmd)
         bb.build.exec_func(cmd, d)
 
-# For each item in items, call the function 'target' with item as the first 
+def get_bb_number_threads(d):
+    return int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1)
+
+def multiprocess_launch(target, items, d, extraargs=None):
+    max_process = get_bb_number_threads(d)
+    return multiprocess_launch_mp(target, items, max_process, extraargs)
+
+# For each item in items, call the function 'target' with item as the first
 # argument, extraargs as the other arguments and handle any exceptions in the
 # parent thread
-def multiprocess_launch(target, items, d, extraargs=None):
+def multiprocess_launch_mp(target, items, max_process, extraargs=None):
 
     class ProcessLaunch(multiprocessing.Process):
         def __init__(self, *args, **kwargs):
@@ -302,7 +309,6 @@
             self.update()
             return self._result
 
-    max_process = int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1)
     launched = []
     errors = []
     results = []
diff --git a/poky/meta/lib/oeqa/core/runner.py b/poky/meta/lib/oeqa/core/runner.py
index 5077eb8..a86a706 100644
--- a/poky/meta/lib/oeqa/core/runner.py
+++ b/poky/meta/lib/oeqa/core/runner.py
@@ -44,6 +44,7 @@
         self.endtime = {}
         self.progressinfo = {}
         self.extraresults = {}
+        self.shownmsg = []
 
         # Inject into tc so that TestDepends decorator can see results
         tc.results = self
@@ -74,6 +75,7 @@
             for (scase, msg) in getattr(self, t):
                 if test.id() == scase.id():
                     self.tc.logger.info(str(msg))
+                    self.shownmsg.append(test.id())
                     break
 
     def logSummary(self, component, context_msg=''):
@@ -169,7 +171,6 @@
 
     def logDetails(self, json_file_dir=None, configuration=None, result_id=None,
             dump_streams=False):
-        self.tc.logger.info("RESULTS:")
 
         result = self.extraresults
         logs = {}
@@ -193,6 +194,10 @@
             report = {'status': status}
             if log:
                 report['log'] = log
+                # Class setup failures wouldn't enter stopTest so would never display
+                if case.id() not in self.shownmsg:
+                    self.tc.logger.info("Failure (%s) for %s:\n" % (status, case.id()) + log)
+
             if duration:
                 report['duration'] = duration
 
@@ -215,6 +220,7 @@
                 report['stderr'] = stderr
             result[case.id()] = report
 
+        self.tc.logger.info("RESULTS:")
         for i in ['PASSED', 'SKIPPED', 'EXPECTEDFAIL', 'ERROR', 'FAILED', 'UNKNOWN']:
             if i not in logs:
                 continue
diff --git a/poky/meta/lib/oeqa/core/utils/concurrencytest.py b/poky/meta/lib/oeqa/core/utils/concurrencytest.py
index 4f77589..5e20b0e 100644
--- a/poky/meta/lib/oeqa/core/utils/concurrencytest.py
+++ b/poky/meta/lib/oeqa/core/utils/concurrencytest.py
@@ -193,11 +193,12 @@
 #
 class ConcurrentTestSuite(unittest.TestSuite):
 
-    def __init__(self, suite, processes, setupfunc, removefunc):
+    def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
         super(ConcurrentTestSuite, self).__init__([suite])
         self.processes = processes
         self.setupfunc = setupfunc
         self.removefunc = removefunc
+        self.bb_vars = bb_vars
 
     def run(self, result):
         testservers, totaltests = fork_for_tests(self.processes, self)
@@ -243,7 +244,7 @@
 def fork_for_tests(concurrency_num, suite):
     testservers = []
     if 'BUILDDIR' in os.environ:
-        selftestdir = get_test_layer()
+        selftestdir = get_test_layer(suite.bb_vars['BBLAYERS'])
 
     test_blocks = partition_tests(suite, concurrency_num)
     # Clear the tests from the original suite so it doesn't keep them alive
diff --git a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
index 3728855..ce122eb 100644
--- a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
+++ b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
@@ -14,7 +14,7 @@
 
     @classmethod
     def setUpClass(cls):
-        uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.13.tar.gz'
+        uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.14.tar.gz'
         cls.project = TargetBuildProject(cls.tc.target,
                                          uri,
                                          dl_dir = cls.tc.td['DL_DIR'])
diff --git a/poky/meta/lib/oeqa/runtime/cases/go.py b/poky/meta/lib/oeqa/runtime/cases/go.py
index 7514d10..39a80f4 100644
--- a/poky/meta/lib/oeqa/runtime/cases/go.py
+++ b/poky/meta/lib/oeqa/runtime/cases/go.py
@@ -18,4 +18,4 @@
         self.assertEqual(status, 0, msg=msg)
 
         msg = 'Incorrect output: %s' % output
-        self.assertEqual(output, "Hello, Go examples!", msg=msg)
+        self.assertEqual(output, "Hello, world!", msg=msg)
diff --git a/poky/meta/lib/oeqa/runtime/cases/parselogs.py b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
index e67d375..a805edd 100644
--- a/poky/meta/lib/oeqa/runtime/cases/parselogs.py
+++ b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
@@ -4,17 +4,12 @@
 # SPDX-License-Identifier: MIT
 #
 
+import collections
 import os
 
-from subprocess import check_output
 from shutil import rmtree
 from oeqa.runtime.case import OERuntimeTestCase
 from oeqa.core.decorator.depends import OETestDepends
-from oeqa.core.decorator.data import skipIfDataVar
-from oeqa.runtime.decorator.package import OEHasPackage
-
-#in the future these lists could be moved outside of module
-errors = ["error", "cannot", "can\'t", "failed"]
 
 common_errors = [
     "(WW) warning, (EE) error, (NI) not implemented, (??) unknown.",
@@ -69,11 +64,9 @@
     "xf86OpenConsole: Switching VT failed",
     "Failed to read LoaderConfigTimeoutOneShot variable, ignoring: Operation not supported",
     "Failed to read LoaderEntryOneShot variable, ignoring: Operation not supported",
+    "invalid BAR (can't size)",
     ]
 
-video_related = [
-]
-
 x86_common = [
     '[drm:psb_do_init] *ERROR* Debug is',
     'wrong ELF class',
@@ -105,16 +98,13 @@
     'default' : common_errors,
     'qemux86' : [
         'Failed to access perfctr msr (MSR',
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         ] + qemux86_common,
     'qemux86-64' : qemux86_common,
     'qemumips' : [
         'Failed to load module "glx"',
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         'cacheinfo: Failed to find cpu0 device node',
         ] + common_errors,
     'qemumips64' : [
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         'cacheinfo: Failed to find cpu0 device node',
          ] + common_errors,
     'qemuppc' : [
@@ -206,17 +196,19 @@
         ] + common_errors,
 }
 
-log_locations = ["/var/log/","/var/log/dmesg", "/tmp/dmesg_output.log"]
-
 class ParseLogsTest(OERuntimeTestCase):
 
+    # Which log files should be collected
+    log_locations = ["/var/log/", "/var/log/dmesg", "/tmp/dmesg_output.log"]
+
+    # The keywords that identify error messages in the log files
+    errors = ["error", "cannot", "can't", "failed"]
+
     @classmethod
     def setUpClass(cls):
-        cls.errors = errors
-
         # When systemd is enabled we need to notice errors on
         # circular dependencies in units.
-        if 'systemd' in cls.td.get('DISTRO_FEATURES', ''):
+        if 'systemd' in cls.td.get('DISTRO_FEATURES'):
             cls.errors.extend([
                 'Found ordering cycle on',
                 'Breaking ordering cycle by deleting job',
@@ -224,48 +216,13 @@
                 'Ordering cycle found, skipping',
                 ])
 
-        cls.ignore_errors = ignore_errors
-        cls.log_locations = log_locations
-        cls.msg = ''
-        is_lsb, _ = cls.tc.target.run("which LSB_Test.sh")
-        if is_lsb == 0:
-            for machine in cls.ignore_errors:
-                cls.ignore_errors[machine] = cls.ignore_errors[machine] \
-                                             + video_related
+        cls.errors = [s.casefold() for s in cls.errors]
 
-    def getMachine(self):
-        return self.td.get('MACHINE', '')
-
-    def getWorkdir(self):
-        return self.td.get('WORKDIR', '')
-
-    # Get some information on the CPU of the machine to display at the
-    # beginning of the output. This info might be useful in some cases.
-    def getHardwareInfo(self):
-        hwi = ""
-        cmd = ('cat /proc/cpuinfo | grep "model name" | head -n1 | '
-               " awk 'BEGIN{FS=\":\"}{print $2}'")
-        _, cpu_name = self.target.run(cmd)
-
-        cmd = ('cat /proc/cpuinfo | grep "cpu cores" | head -n1 | '
-               "awk {'print $4'}")
-        _, cpu_physical_cores = self.target.run(cmd)
-
-        cmd = 'cat /proc/cpuinfo | grep "processor" | wc -l'
-        _, cpu_logical_cores = self.target.run(cmd)
-
-        _, cpu_arch = self.target.run('uname -m')
-
-        hwi += 'Machine information: \n'
-        hwi += '*******************************\n'
-        hwi += 'Machine name: ' + self.getMachine() + '\n'
-        hwi += 'CPU: ' + str(cpu_name) + '\n'
-        hwi += 'Arch: ' + str(cpu_arch)+ '\n'
-        hwi += 'Physical cores: ' + str(cpu_physical_cores) + '\n'
-        hwi += 'Logical cores: ' + str(cpu_logical_cores) + '\n'
-        hwi += '*******************************\n'
-
-        return hwi
+        try:
+            cls.ignore_errors = [s.casefold() for s in ignore_errors[cls.td.get('MACHINE')]]
+        except KeyError:
+            cls.logger.info('No ignore list found for this machine, using default')
+            cls.ignore_errors = [s.casefold() for s in ignore_errors['default']]
 
     # Go through the log locations provided and if it's a folder
     # create a list with all the .log files in it, if it's a file
@@ -273,23 +230,23 @@
     def getLogList(self, log_locations):
         logs = []
         for location in log_locations:
-            status, _ = self.target.run('test -f ' + str(location))
+            status, _ = self.target.run('test -f %s' % location)
             if status == 0:
-                logs.append(str(location))
+                logs.append(location)
             else:
-                status, _ = self.target.run('test -d ' + str(location))
+                status, _ = self.target.run('test -d %s' % location)
                 if status == 0:
-                    cmd = 'find ' + str(location) + '/*.log -maxdepth 1 -type f'
+                    cmd = 'find %s -name \\*.log -maxdepth 1 -type f' % location
                     status, output = self.target.run(cmd)
                     if status == 0:
                         output = output.splitlines()
                         for logfile in output:
-                            logs.append(os.path.join(location, str(logfile)))
+                            logs.append(os.path.join(location, logfile))
         return logs
 
     # Copy the log files to be parsed locally
     def transfer_logs(self, log_list):
-        workdir = self.getWorkdir()
+        workdir = self.td.get('WORKDIR')
         self.target_logs = workdir + '/' + 'target_logs'
         target_logs = self.target_logs
         if os.path.exists(target_logs):
@@ -306,65 +263,55 @@
         logs = [f for f in dir_files if os.path.isfile(f)]
         return logs
 
-    # Build the grep command to be used with filters and exclusions
-    def build_grepcmd(self, errors, ignore_errors, log):
-        grepcmd = 'grep '
-        grepcmd += '-Ei "'
-        for error in errors:
-            grepcmd += r'\<' + error + r'\>' + '|'
-        grepcmd = grepcmd[:-1]
-        grepcmd += '" ' + str(log) + " | grep -Eiv \'"
+    def get_context(self, lines, index, before=6, after=3):
+        """
+        Given a set of lines and the index of the line that is important, return
+        a number of lines surrounding that line.
+        """
+        last = len(lines)
 
-        try:
-            errorlist = ignore_errors[self.getMachine()]
-        except KeyError:
-            self.msg += 'No ignore list found for this machine, using default\n'
-            errorlist = ignore_errors['default']
+        start = index - before
+        end = index + after + 1
 
-        for ignore_error in errorlist:
-            ignore_error = ignore_error.replace('(', r'\(')
-            ignore_error = ignore_error.replace(')', r'\)')
-            ignore_error = ignore_error.replace("'", '.')
-            ignore_error = ignore_error.replace('?', r'\?')
-            ignore_error = ignore_error.replace('[', r'\[')
-            ignore_error = ignore_error.replace(']', r'\]')
-            ignore_error = ignore_error.replace('*', r'\*')
-            ignore_error = ignore_error.replace('0-9', '[0-9]')
-            grepcmd += ignore_error + '|'
-        grepcmd = grepcmd[:-1]
-        grepcmd += "\'"
+        if start < 0:
+            end -= start
+            start = 0
+        if end > last:
+            start -= end - last
+            end = last
 
-        return grepcmd
+        return lines[start:end]
 
-    # Grep only the errors so that their context could be collected.
-    # Default context is 10 lines before and after the error itself
-    def parse_logs(self, errors, ignore_errors, logs,
-                   lines_before = 10, lines_after = 10):
-        results = {}
-        rez = []
-        grep_output = ''
+    def test_get_context(self):
+        """
+        A test case for the test case.
+        """
+        lines = list(range(0,10))
+        self.assertEqual(self.get_context(lines, 0, 2, 1), [0, 1, 2, 3])
+        self.assertEqual(self.get_context(lines, 5, 2, 1), [3, 4, 5, 6])
+        self.assertEqual(self.get_context(lines, 9, 2, 1), [6, 7, 8, 9])
+
+    def parse_logs(self, logs, lines_before=10, lines_after=10):
+        """
+        Search the log files @logs looking for error lines (marked by
+        @self.errors), ignoring anything listed in @self.ignore_errors.
+
+        Returns a dictionary of log filenames to a dictionary of error lines to
+        the error context (controlled by @lines_before and @lines_after).
+        """
+        results = collections.defaultdict(dict)
 
         for log in logs:
-            result = None
-            thegrep = self.build_grepcmd(errors, ignore_errors, log)
+            with open(log) as f:
+                lines = f.readlines()
 
-            try:
-                result = check_output(thegrep, shell=True).decode('utf-8')
-            except:
-                pass
+            for i, line in enumerate(lines):
+                line = line.strip()
+                line_lower = line.casefold()
 
-            if result is not None:
-                results[log] = {}
-                rez = result.splitlines()
-
-                for xrez in rez:
-                    try:
-                        cmd = ['grep', '-F', xrez, '-B', str(lines_before)]
-                        cmd += ['-A', str(lines_after), log]
-                        grep_output = check_output(cmd).decode('utf-8')
-                    except:
-                        pass
-                    results[log][xrez]=grep_output
+                if any(keyword in line_lower for keyword in self.errors):
+                    if not any(ignore in line_lower for ignore in self.ignore_errors):
+                        results[log][line] = "".join(self.get_context(lines, i, lines_before, lines_after))
 
         return results
 
@@ -377,17 +324,18 @@
     def test_parselogs(self):
         self.write_dmesg()
         log_list = self.get_local_log_list(self.log_locations)
-        result = self.parse_logs(self.errors, self.ignore_errors, log_list)
-        print(self.getHardwareInfo())
+        result = self.parse_logs(log_list)
+
         errcount = 0
+        self.msg = ""
         for log in result:
             self.msg += 'Log: ' + log + '\n'
             self.msg += '-----------------------\n'
             for error in result[log]:
                 errcount += 1
-                self.msg += 'Central error: ' + str(error) + '\n'
+                self.msg += 'Central error: ' + error + '\n'
                 self.msg +=  '***********************\n'
-                self.msg +=  result[str(log)][str(error)] + '\n'
+                self.msg +=  result[log][error] + '\n'
                 self.msg +=  '***********************\n'
         self.msg += '%s errors found in logs.' % errcount
         self.assertEqual(errcount, 0, msg=self.msg)
diff --git a/poky/meta/lib/oeqa/runtime/cases/ptest.py b/poky/meta/lib/oeqa/runtime/cases/ptest.py
index 23a71ea..fbaeb84 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ptest.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ptest.py
@@ -96,7 +96,7 @@
         failed_tests = {}
 
         for section in sections:
-            if 'exitcode' in sections[section].keys():
+            if 'exitcode' in sections[section].keys() or 'timeout' in sections[section].keys():
                 failed_tests[section] = sections[section]["log"]
 
         for section in results:
diff --git a/poky/meta/lib/oeqa/sdk/cases/buildcpio.py b/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
index c42c670..33b946f 100644
--- a/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
+++ b/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
@@ -19,10 +19,10 @@
     """
     def test_cpio(self):
         with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir:
-            tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz")
+            tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.14.tar.gz")
 
             dirs = {}
-            dirs["source"] = os.path.join(testdir, "cpio-2.13")
+            dirs["source"] = os.path.join(testdir, "cpio-2.14")
             dirs["build"] = os.path.join(testdir, "build")
             dirs["install"] = os.path.join(testdir, "install")
 
diff --git a/poky/meta/lib/oeqa/selftest/cases/bbtests.py b/poky/meta/lib/oeqa/selftest/cases/bbtests.py
index 31aa568..d242352 100644
--- a/poky/meta/lib/oeqa/selftest/cases/bbtests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/bbtests.py
@@ -236,8 +236,11 @@
         result = bitbake('selftest-ed', ignore_status=True)
         self.assertEqual(result.status, 0, "Bitbake failed, exit code %s, output %s" % (result.status, result.output))
         lic_dir = get_bb_var('LICENSE_DIRECTORY')
-        self.assertFalse(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPL-3.0-or-later')))
-        self.assertTrue(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPL-2.0-or-later')))
+        arch = get_bb_var('SSTATE_PKGARCH')
+        filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-3.0-or-later')
+        self.assertFalse(os.path.isfile(filename), msg="License file %s exists and shouldn't" % filename)
+        filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-2.0-or-later')
+        self.assertTrue(os.path.isfile(filename), msg="License file %s doesn't exist" % filename)
 
     def test_setscene_only(self):
         """ Bitbake option to restore from sstate only within a build (i.e. execute no real tasks, only setscene)"""
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index a2b77e5..b577f6d 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -256,6 +256,31 @@
         if remaining_removelines:
             self.fail('Expected removed lines not found: %s' % remaining_removelines)
 
+    def _check_runqemu_prerequisites(self):
+        """Check runqemu is available
+
+        Whilst some tests would seemingly be better placed as a runtime test,
+        unfortunately the runtime tests run under bitbake and you can't run
+        devtool within bitbake (since devtool needs to run bitbake itself).
+        Additionally we are testing build-time functionality as well, so
+        really this has to be done as an oe-selftest test.
+        """
+        machine = get_bb_var('MACHINE')
+        if not machine.startswith('qemu'):
+            self.skipTest('This test only works with qemu machines')
+        if not os.path.exists('/etc/runqemu-nosudo'):
+            self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+        result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
+        if result.status != 0:
+            result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
+            if result.status != 0:
+                self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
+        for line in result.output.splitlines():
+            if line.startswith('tap'):
+                break
+        else:
+            self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+
     def _test_devtool_add_git_url(self, git_url, version, pn, resulting_src_uri):
         self.track_for_cleanup(self.workspacedir)
         self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
@@ -1616,28 +1641,7 @@
 
     @OETestTag("runqemu")
     def test_devtool_deploy_target(self):
-        # NOTE: Whilst this test would seemingly be better placed as a runtime test,
-        # unfortunately the runtime tests run under bitbake and you can't run
-        # devtool within bitbake (since devtool needs to run bitbake itself).
-        # Additionally we are testing build-time functionality as well, so
-        # really this has to be done as an oe-selftest test.
-        #
-        # Check preconditions
-        machine = get_bb_var('MACHINE')
-        if not machine.startswith('qemu'):
-            self.skipTest('This test only works with qemu machines')
-        if not os.path.exists('/etc/runqemu-nosudo'):
-            self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
-        result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
-        if result.status != 0:
-            result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
-            if result.status != 0:
-                self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
-        for line in result.output.splitlines():
-            if line.startswith('tap'):
-                break
-        else:
-            self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+        self._check_runqemu_prerequisites()
         self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
         # Definitions
         testrecipe = 'mdadm'
diff --git a/poky/meta/lib/oeqa/selftest/cases/meta_ide.py b/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
index 59270fb..e446d93 100644
--- a/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
+++ b/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
@@ -44,7 +44,7 @@
     def test_meta_ide_can_build_cpio_project(self):
         dl_dir = self.td.get('DL_DIR', None)
         self.project = SDKBuildProject(self.tmpdir_metaideQA + "/cpio/", self.environment_script_path,
-                        "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz",
+                        "https://ftp.gnu.org/gnu/cpio/cpio-2.14.tar.gz",
                         self.tmpdir_metaideQA, self.td['DATETIME'], dl_dir=dl_dir)
         self.project.download_archive()
         self.assertEqual(self.project.run_configure('$CONFIGURE_FLAGS --disable-maintainer-mode','sed -i -e "/char \*program_name/d" src/global.c;'), 0,
diff --git a/poky/meta/lib/oeqa/selftest/cases/oescripts.py b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
index 7d3a00e..f69efcc 100644
--- a/poky/meta/lib/oeqa/selftest/cases/oescripts.py
+++ b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
@@ -36,18 +36,16 @@
         if expected_endlines:
             self.fail('Missing expected line endings:\n  %s' % '\n  '.join(expected_endlines))
 
-class OEScriptTests(OESelftestTestCase):
-    scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
-
 @unittest.skipUnless(importlib.util.find_spec("cairo"), "Python cairo module is not present")
-class OEPybootchartguyTests(OEScriptTests):
+class OEPybootchartguyTests(OESelftestTestCase):
 
     @classmethod
     def setUpClass(cls):
-        super(OEScriptTests, cls).setUpClass()
+        super().setUpClass()
         bitbake("core-image-minimal -c rootfs -f")
         cls.tmpdir = get_bb_var('TMPDIR')
         cls.buildstats = cls.tmpdir + "/buildstats/" + sorted(os.listdir(cls.tmpdir + "/buildstats"))[-1]
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
 
     def test_pybootchartguy_help(self):
         runCmd('%s/pybootchartgui/pybootchartgui.py  --help' % self.scripts_dir)
@@ -65,7 +63,12 @@
         self.assertTrue(os.path.exists(self.tmpdir + "/charts.pdf"))
 
 
-class OEGitproxyTests(OEScriptTests):
+class OEGitproxyTests(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
 
     def test_oegitproxy_help(self):
         try:
@@ -126,7 +129,13 @@
         result = runCmd("oe-run-native qemu-helper-native qemu-oe-bridge-helper --help")
         self.assertIn("Helper function to find and exec qemu-bridge-helper", result.output)
 
-class OEListPackageconfigTests(OEScriptTests):
+class OEListPackageconfigTests(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
+
     #oe-core.scripts.List_all_the_PACKAGECONFIG's_flags
     def check_endlines(self, results,  expected_endlines): 
         for line in results.output.splitlines():
diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
index 4c6ed4e..84c6c3a 100644
--- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -128,23 +128,17 @@
 class ReproducibleTests(OESelftestTestCase):
     # Test the reproducibility of whatever is built between sstate_targets and targets
 
-    package_classes = get_bb_var("OEQA_REPRODUCIBLE_TEST_PACKAGE")
-    if package_classes:
-        package_classes = package_classes.split()
-    else:
-        package_classes = ['deb', 'ipk', 'rpm']
+    package_classes = ['deb', 'ipk', 'rpm']
 
     # Maximum report size, in bytes
     max_report_size = 250 * 1024 * 1024
 
     # targets are the things we want to test the reproducibility of
-    targets = get_bb_var("OEQA_REPRODUCIBLE_TEST_TARGET")
-    if targets:
-        targets = targets.split()
-    else:
-        targets = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world']
+    targets = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world']
+
     # sstate targets are things to pull from sstate to potentially cut build/debugging time
-    sstate_targets = (get_bb_var("OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS") or "").split()
+    sstate_targets = []
+
     save_results = False
     if 'OEQA_DEBUGGING_SAVED_OUTPUT' in os.environ:
         save_results = os.environ['OEQA_DEBUGGING_SAVED_OUTPUT']
@@ -159,11 +153,20 @@
 
     def setUpLocal(self):
         super().setUpLocal()
-        needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS', 'BB_HASHSERVE']
+        needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS', 'BB_HASHSERVE', 'OEQA_REPRODUCIBLE_TEST_PACKAGE', 'OEQA_REPRODUCIBLE_TEST_TARGET', 'OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']
         bb_vars = get_bb_vars(needed_vars)
         for v in needed_vars:
             setattr(self, v.lower(), bb_vars[v])
 
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE']:
+            self.package_classes = bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE'].split()
+
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET']:
+            self.targets = bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET'].split()
+
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']:
+            self.sstate_targets = bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS'].split()
+
         self.extraresults = {}
         self.extraresults.setdefault('reproducible.rawlogs', {})['log'] = ''
         self.extraresults.setdefault('reproducible', {}).setdefault('files', {})
diff --git a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
index 463679d..12000aa 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -129,6 +129,22 @@
         bitbake('core-image-full-cmdline socat')
         bitbake('-c testimage core-image-full-cmdline')
 
+    def test_testimage_slirp(self):
+        """
+        Summary: Check basic testimage functionality with qemu and slirp networking.
+        """
+
+        features = '''
+IMAGE_CLASSES:append = " testimage"
+IMAGE_FEATURES:append = " ssh-server-dropbear"
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("IMAGE_CLASSES", "testimage", " + 5120", "", d)}"
+TEST_RUNQEMUPARAMS += " slirp"
+'''
+        self.write_config(features)
+
+        bitbake('core-image-minimal')
+        bitbake('-c testimage core-image-minimal')
+
     def test_testimage_dnf(self):
         """
         Summary: Check package feeds functionality for dnf
@@ -236,11 +252,11 @@
         features += 'TEST_SUITES = "ping ssh virgl"\n'
         features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
         features += 'IMAGE_INSTALL:append = " kmscube"\n'
-        features_gtk = features + 'TEST_RUNQEMUPARAMS = "gtk gl"\n'
+        features_gtk = features + 'TEST_RUNQEMUPARAMS += " gtk gl"\n'
         self.write_config(features_gtk)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
-        features_sdl = features + 'TEST_RUNQEMUPARAMS = "sdl gl"\n'
+        features_sdl = features + 'TEST_RUNQEMUPARAMS += " sdl gl"\n'
         self.write_config(features_sdl)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
@@ -268,7 +284,7 @@
         features += 'TEST_SUITES = "ping ssh virgl"\n'
         features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
         features += 'IMAGE_INSTALL:append = " kmscube"\n'
-        features += 'TEST_RUNQEMUPARAMS = "egl-headless"\n'
+        features += 'TEST_RUNQEMUPARAMS += " egl-headless"\n'
         self.write_config(features)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
diff --git a/poky/meta/lib/oeqa/selftest/cases/spdx.py b/poky/meta/lib/oeqa/selftest/cases/spdx.py
new file mode 100644
index 0000000..05fc4e3
--- /dev/null
+++ b/poky/meta/lib/oeqa/selftest/cases/spdx.py
@@ -0,0 +1,54 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import json
+import os
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, runCmd
+
+class SPDXCheck(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super(SPDXCheck, cls).setUpClass()
+        bitbake("python3-spdx-tools-native")
+        bitbake("-c addto_recipe_sysroot python3-spdx-tools-native")
+
+    def check_recipe_spdx(self, high_level_dir, spdx_file, target_name):
+        config = """
+INHERIT += "create-spdx"
+"""
+        self.write_config(config)
+
+        deploy_dir = get_bb_var("DEPLOY_DIR")
+        machine_var = get_bb_var("MACHINE")
+        # qemux86-64 creates the directory qemux86_64
+        machine_dir = machine_var.replace("-", "_")
+
+        full_file_path = os.path.join(deploy_dir, "spdx", machine_dir, high_level_dir, spdx_file)
+
+        try:
+            os.remove(full_file_path)
+        except FileNotFoundError:
+            pass
+
+        bitbake("%s -c create_spdx" % target_name)
+
+        def check_spdx_json(filename):
+            with open(filename) as f:
+                report = json.load(f)
+                self.assertNotEqual(report, None)
+                self.assertNotEqual(report["SPDXID"], None)
+
+            python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'nativepython3')
+            validator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'pyspdxtools')
+            result = runCmd("{} {} -i {}".format(python, validator, filename))
+
+        self.assertExists(full_file_path)
+        result = check_spdx_json(full_file_path)
+
+    def test_spdx_base_files(self):
+        self.check_recipe_spdx("packages", "base-files.spdx.json", "base-files")
diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py
index aa61349..b4866bc 100644
--- a/poky/meta/lib/oeqa/selftest/cases/wic.py
+++ b/poky/meta/lib/oeqa/selftest/cases/wic.py
@@ -729,7 +729,7 @@
         wicout = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
         self.assertEqual(1, len(wicout))
         size = os.path.getsize(wicout[0])
-        self.assertTrue(size > extraspace)
+        self.assertTrue(size > extraspace, msg="Extra space not present (%s vs %s)" % (size, extraspace))
 
     def test_no_table(self):
         """Test --no-table wks option."""
@@ -773,7 +773,7 @@
         basename = bb_vars['IMAGE_BASENAME']
         self.assertEqual(basename, image)
         path = os.path.join(imgdatadir, basename) + '.env'
-        self.assertTrue(os.path.isfile(path))
+        self.assertTrue(os.path.isfile(path), msg="File %s wasn't generated as expected" % path)
 
         wicvars = set(bb_vars['WICVARS'].split())
         # filter out optional variables
@@ -786,7 +786,7 @@
             # test if variables used by wic present in the .env file
             for var in wicvars:
                 self.assertTrue(var in content, "%s is not in .env file" % var)
-                self.assertTrue(content[var])
+                self.assertTrue(content[var], "%s doesn't have a value (%s)" % (var, content[var]))
 
     def test_image_vars_dir_short(self):
         """Test image vars directory selection -v option"""
@@ -833,8 +833,8 @@
         # pointing to existing files
         for suffix in ('wic', 'manifest'):
             path = prefix + suffix
-            self.assertTrue(os.path.islink(path))
-            self.assertTrue(os.path.isfile(os.path.realpath(path)))
+            self.assertTrue(os.path.islink(path), msg="Link %s wasn't generated as expected" % path)
+            self.assertTrue(os.path.isfile(os.path.realpath(path)), msg="File linked to by %s wasn't generated as expected" % path)
 
     # TODO this should work on aarch64
     @skipIfNotArch(['i586', 'i686', 'x86_64'])
@@ -1104,7 +1104,7 @@
         self.remove_config(config)
         bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
         image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.wic' % bb_vars['IMAGE_LINK_NAME'])
-        self.assertTrue(os.path.exists(image_path))
+        self.assertTrue(os.path.exists(image_path), msg="Image file %s wasn't generated as expected" % image_path)
 
         sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
 
@@ -1345,11 +1345,11 @@
             orig_sizes = [int(line.split()[3]) for line in orig.output.split('\n')[1:]]
             exp_sizes = [int(line.split()[3]) for line in exp.output.split('\n')[1:]]
             self.assertEqual(orig_sizes[0], exp_sizes[0]) # first partition is not resized
-            self.assertTrue(orig_sizes[1] < exp_sizes[1])
+            self.assertTrue(orig_sizes[1] < exp_sizes[1], msg="Parition size wasn't enlarged (%s vs %s)" % (orig_sizes[1], exp_sizes[1]))
 
             # Check if all free space is partitioned
             result = runCmd("%s/usr/sbin/sfdisk -F %s" % (sysroot, new_image_path))
-            self.assertTrue("0 B, 0 bytes, 0 sectors" in result.output)
+            self.assertIn("0 B, 0 bytes, 0 sectors", result.output)
 
             os.rename(image_path, image_path + '.bak')
             os.rename(new_image_path, image_path)
@@ -1433,7 +1433,7 @@
             # check if file is there
             result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
             self.assertEqual(7, len(result.output.split('\n')))
-            self.assertTrue(os.path.basename(testfile.name) in result.output)
+            self.assertIn(os.path.basename(testfile.name), result.output)
 
             # prepare directory
             testdir = os.path.join(self.resultdir, 'wic-test-cp-dir')
@@ -1447,13 +1447,13 @@
             # check if directory is there
             result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
             self.assertEqual(8, len(result.output.split('\n')))
-            self.assertTrue(os.path.basename(testdir) in result.output)
+            self.assertIn(os.path.basename(testdir), result.output)
 
             # copy the file from the partition and check if it success
             dest = '%s-cp' % testfile.name
             runCmd("wic cp %s:1/%s %s -n %s" % (images[0],
                     os.path.basename(testfile.name), dest, sysroot))
-            self.assertTrue(os.path.exists(dest))
+            self.assertTrue(os.path.exists(dest), msg="File %s wasn't generated as expected" % dest)
 
 
     def test_wic_rm(self):
@@ -1497,7 +1497,7 @@
         # list directory content of the second ext4 partition
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
         self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(
-                            set(line.split()[-1] for line in result.output.split('\n') if line)))
+                            set(line.split()[-1] for line in result.output.split('\n') if line)), msg="Expected directories not present %s" % result.output)
 
     def test_wic_cp_ext(self):
         """Test copy files and directories to the ext partition."""
@@ -1512,7 +1512,7 @@
         # list directory content of the ext4 partition
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
         dirs = set(line.split()[-1] for line in result.output.split('\n') if line)
-        self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs))
+        self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs), msg="Expected directories not present %s" % dirs)
 
         with NamedTemporaryFile("w", suffix=".wic-cp") as testfile:
             testfile.write("test")
@@ -1527,12 +1527,12 @@
 
             # check if the file to copy is in the partition
             result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-            self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+            self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
             # copy file from the partition, replace the temporary file content with it and
             # check for the file size to validate the copy
             runCmd("wic cp %s:2/etc/fstab %s -n %s" % (images[0], testfile.name, sysroot))
-            self.assertTrue(os.stat(testfile.name).st_size > 0)
+            self.assertTrue(os.stat(testfile.name).st_size > 0, msg="Filesize not as expected %s" % os.stat(testfile.name).st_size)
 
 
     def test_wic_rm_ext(self):
@@ -1547,18 +1547,18 @@
 
         # list directory content of the /etc directory on ext4 partition
         result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-        self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
         # remove file
         runCmd("wic rm %s:2/etc/fstab -n %s" % (images[0], sysroot))
 
         # check if it's removed
         result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-        self.assertTrue('fstab' not in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertNotIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
         # remove non-empty directory
         runCmd("wic rm -r %s:2/etc/ -n %s" % (images[0], sysroot))
 
         # check if it's removed
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
-        self.assertTrue('etc' not in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertNotIn('etc', [line.split()[-1] for line in result.output.split('\n') if line])
diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py
index bd03e76..5a09aee 100644
--- a/poky/meta/lib/oeqa/selftest/context.py
+++ b/poky/meta/lib/oeqa/selftest/context.py
@@ -35,12 +35,13 @@
     return result
 
 class NonConcurrentTestSuite(unittest.TestSuite):
-    def __init__(self, suite, processes, setupfunc, removefunc):
+    def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
         super().__init__([suite])
         self.processes = processes
         self.suite = suite
         self.setupfunc = setupfunc
         self.removefunc = removefunc
+        self.bb_vars = bb_vars
 
     def run(self, result):
         (builddir, newbuilddir) = self.setupfunc("-st", None, self.suite)
@@ -79,16 +80,15 @@
         else:
             self.removebuilddir = removebuilddir
 
+    def set_variables(self, vars):
+        self.bb_vars = vars
+
     def setup_builddir(self, suffix, selftestdir, suite):
-        # Get SSTATE_DIR from the parent build dir
-        with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
-            tinfoil.prepare(quiet=2, config_only=True)
-            d = tinfoil.config_data
-            sstatedir = str(d.getVar('SSTATE_DIR'))
+        sstatedir = self.bb_vars['SSTATE_DIR']
 
         builddir = os.environ['BUILDDIR']
         if not selftestdir:
-            selftestdir = get_test_layer()
+            selftestdir = get_test_layer(self.bb_vars['BBLAYERS'])
         if self.newbuilddir:
             newbuilddir = os.path.join(self.newbuilddir, 'build' + suffix)
         else:
@@ -104,7 +104,7 @@
         oe.path.copytree(builddir + "/cache", newbuilddir + "/cache")
         oe.path.copytree(selftestdir, newselftestdir)
 
-        subprocess.check_output("git init; git add *; git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
+        subprocess.check_output("git init && git add * && git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
 
         # Tried to used bitbake-layers add/remove but it requires recipe parsing and hence is too slow
         subprocess.check_output("sed %s/conf/bblayers.conf -i -e 's#%s#%s#g'" % (newbuilddir, selftestdir, newselftestdir), cwd=newbuilddir, shell=True)
@@ -155,9 +155,9 @@
         if processes:
             from oeqa.core.utils.concurrencytest import ConcurrentTestSuite
 
-            return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir)
+            return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
         else:
-            return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir)
+            return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
 
     def runTests(self, processes=None, machine=None, skips=[]):
         if machine:
@@ -270,7 +270,7 @@
 
         builddir = os.environ.get("BUILDDIR")
         self.tc_kwargs['init']['config_paths'] = {}
-        self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer()
+        self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer(bbvars["BBLAYERS"])
         self.tc_kwargs['init']['config_paths']['builddir'] = builddir
         self.tc_kwargs['init']['config_paths']['localconf'] = os.path.join(builddir, "conf/local.conf")
         self.tc_kwargs['init']['config_paths']['bblayers'] = os.path.join(builddir, "conf/bblayers.conf")
@@ -310,10 +310,10 @@
                 meta_selftestdir = os.path.join(
                     self.tc.td["BBLAYERS_FETCH_DIR"], 'meta-selftest')
                 if os.path.isdir(meta_selftestdir):
-                    runCmd("bitbake-layers add-layer %s" %meta_selftestdir)
+                    runCmd("bitbake-layers add-layer %s" % meta_selftestdir)
                     # reload data is needed because a meta-selftest layer was add
                     self.tc.td = get_bb_vars()
-                    self.tc.config_paths['testlayer_path'] = get_test_layer()
+                    self.tc.config_paths['testlayer_path'] = get_test_layer(self.tc.td["BBLAYERS"])
                 else:
                     self.tc.logger.error("could not locate meta-selftest in:\n%s" % meta_selftestdir)
                     raise OEQAPreRun
@@ -351,8 +351,15 @@
 
         _add_layer_libs()
 
-        self.tc.logger.info("Running bitbake -e to test the configuration is valid/parsable")
-        runCmd("bitbake -e")
+        self.tc.logger.info("Checking base configuration is valid/parsable")
+
+        with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+            tinfoil.prepare(quiet=2, config_only=True)
+            d = tinfoil.config_data
+            vars = {}
+            vars['SSTATE_DIR'] = str(d.getVar('SSTATE_DIR'))
+            vars['BBLAYERS'] = str(d.getVar('BBLAYERS'))
+        self.tc.set_variables(vars)
 
     def get_json_result_dir(self, args):
         json_result_dir = os.path.join(self.tc.td["LOG_DIR"], 'oeqa')
@@ -437,7 +444,7 @@
             output_link = os.path.join(os.path.dirname(args.output_log),
                     "%s-results.log" % self.name)
             if os.path.lexists(output_link):
-                os.remove(output_link)
+                os.unlink(output_link)
             os.symlink(args.output_log, output_link)
 
         return rc
diff --git a/poky/meta/lib/oeqa/utils/commands.py b/poky/meta/lib/oeqa/utils/commands.py
index c1f5338..575e380 100644
--- a/poky/meta/lib/oeqa/utils/commands.py
+++ b/poky/meta/lib/oeqa/utils/commands.py
@@ -285,8 +285,10 @@
 def get_bb_var(var, target=None, postconfig=None):
     return get_bb_vars([var], target, postconfig)[var]
 
-def get_test_layer():
-    layers = get_bb_var("BBLAYERS").split()
+def get_test_layer(bblayers=None):
+    if bblayers is None:
+        bblayers = get_bb_var("BBLAYERS")
+    layers = bblayers.split()
     testlayer = None
     for l in layers:
         if '~' in l:
diff --git a/poky/meta/lib/oeqa/utils/gitarchive.py b/poky/meta/lib/oeqa/utils/gitarchive.py
index 64448f4..f9c1526 100644
--- a/poky/meta/lib/oeqa/utils/gitarchive.py
+++ b/poky/meta/lib/oeqa/utils/gitarchive.py
@@ -255,7 +255,15 @@
         if not commit in revs:
             revs[commit] = TestedRev(commit, commit_num, [tag])
         else:
-            assert commit_num == revs[commit].commit_number, "Commit numbers do not match"
+            if commit_num != revs[commit].commit_number:
+                # Historically we have incorrect commit counts of '1' in the repo so fix these up
+                if int(revs[commit].commit_number) < 5:
+                    tags = revs[commit].tags
+                    revs[commit] = TestedRev(commit, commit_num, [tags])
+                elif int(commit_num) < 5:
+                    pass
+                else:
+                    sys.exit("Commit numbers for commit %s don't match (%s vs %s)" % (commit, commit_num, revs[commit].commit_number))
             revs[commit].tags.append(tag)
 
     # Return in sorted table
diff --git a/poky/meta/lib/patchtest/README.md b/poky/meta/lib/patchtest/README.md
new file mode 100644
index 0000000..f66613c
--- /dev/null
+++ b/poky/meta/lib/patchtest/README.md
@@ -0,0 +1,20 @@
+# patchtest selftests for openembedded-core
+
+This directory provides a test suite and selftest script for use with the
+patchtest repository: https://git.yoctoproject.org/patchtest/
+
+To setup for use:
+
+1. Clone https://git.openembedded.org/openembedded-core (this repo) and https://git.openembedded.org/bitbake/
+2. Clone https://git.yoctoproject.org/patchtest
+3. Install the necessary Python modules: in meta/lib/patchtest or the patchtest
+   repo, do `pip install -r requirements.txt`
+4. Add patchtest to PATH: `export PATH=/path/to/patchtest/repo:$PATH`
+5. Initialize the environment: `source oe-init-build-env`
+6. Add meta-selftest to bblayers.conf: `bitbake-layers add-layer
+   /path/to/meta-selftest/` (the selftests use this layer's recipes as test
+   targets)
+7. Finally, run the selftest script: `./meta/lib/patchtest/selftest/selftest`
+
+For more information on using patchtest, see the patchtest repo at
+https://git.yoctoproject.org/patchtest/.
diff --git a/poky/meta/lib/patchtest/requirements.txt b/poky/meta/lib/patchtest/requirements.txt
new file mode 100644
index 0000000..785aa46
--- /dev/null
+++ b/poky/meta/lib/patchtest/requirements.txt
@@ -0,0 +1,4 @@
+jinja2
+pylint
+pyparsing>=3.0.9
+unidiff
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail
new file mode 100644
index 0000000..0c40cdc
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail
@@ -0,0 +1,32 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <first.last@example.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should fail the selftests because the author address is from the
+invalid "example.com".
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb          | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass
new file mode 100644
index 0000000..cbb8ef2
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <first.last@address.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should pass the selftests because the author address is in a valid format.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb          | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail
new file mode 100644
index 0000000..3e2b81b
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: Upgrade Helper <auh@auh.yoctoproject.org>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should fail the selftests because AUH is an invalid sender.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb          | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass
new file mode 100644
index 0000000..f84e126
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass
@@ -0,0 +1,31 @@
+From 1fbb446d1849b1208012cbdae5d85d228cdbe4a6 Mon Sep 17 00:00:00 2001
+From: First Last <averylongemailaddressthatishardtoread.from@address.com>
+Date: Tue, 29 Aug 2023 13:32:24 -0400
+Subject: [PATCH] selftest-hello: add a summary
+
+This patch should pass the selftests because the author address is in a valid format.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb          | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..491f0a3df7 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "A cool sample"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail b/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail
new file mode 100644
index 0000000..80f409e
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail
@@ -0,0 +1,25 @@
+From fdfd605e565d874502522c4b70b786c8c5aa0bad Mon Sep 17 00:00:00 2001
+From: name@somedomain.com <email@address.com>
+Date: Fri, 17 Feb 2017 16:29:21 -0600
+Subject: [PATCH] README: adds 'foo' to the header
+
+This test patch adds 'foo' to the header
+
+[YOCTO 1234]
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ README | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README b/README
+index 521916cd4f..cdf29dcea3 100644
+--- a/README
++++ b/README
+@@ -1,3 +1,4 @@
++**** FOO ****
+ OpenEmbedded-Core
+ =================
+
+--
+2.11.0
diff --git a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass b/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass
new file mode 100644
index 0000000..2648b03
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass
@@ -0,0 +1,25 @@
+From fdfd605e565d874502522c4b70b786c8c5aa0bad Mon Sep 17 00:00:00 2001
+From: name@somedomain.com <email@address.com>
+Date: Fri, 17 Feb 2017 16:29:21 -0600
+Subject: [PATCH] README: adds 'foo' to the header
+
+This test patch adds 'foo' to the header
+
+[YOCTO #1234]
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ README | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README b/README
+index 521916cd4f..cdf29dcea3 100644
+--- a/README
++++ b/README
+@@ -1,3 +1,4 @@
++**** FOO ****
+ OpenEmbedded-Core
+ =================
+
+--
+2.11.0
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail
new file mode 100644
index 0000000..d40b8a9
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+This patch should fail the test for CVE presence in the mbox commit message.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass
new file mode 100644
index 0000000..433c7a4
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass
@@ -0,0 +1,74 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+This test should pass the mbox cve tag test.
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail
new file mode 100644
index 0000000..c763a75
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-BAD-FORMAT
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-BAD-FORMAT
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass
new file mode 100644
index 0000000..ef60170
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail b/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail
new file mode 100644
index 0000000..93ca0f9
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail
@@ -0,0 +1,22 @@
+From 0a52a62c9430c05d22cb7f46380488f2280b69bb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 1 Sep 2023 08:56:14 -0400
+Subject: [PATCH] README.OE-Core.md: add foo
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ README.OE-Core.md | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README.OE-Core.md b/README.OE-Core.md
+index 2f2127fb03..48464252c8 100644
+--- a/README.OE-Core.md
++++ b/README.OE-Core.md
+@@ -1,3 +1,4 @@
++** FOO **
+ OpenEmbedded-Core
+ =================
+ 
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass b/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass
new file mode 100644
index 0000000..5e3dcbd
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass
@@ -0,0 +1,24 @@
+From 0a52a62c9430c05d22cb7f46380488f2280b69bb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 1 Sep 2023 08:56:14 -0400
+Subject: [PATCH] README.OE-Core.md: add foo
+
+This is a commit message
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ README.OE-Core.md | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/README.OE-Core.md b/README.OE-Core.md
+index 2f2127fb03..48464252c8 100644
+--- a/README.OE-Core.md
++++ b/README.OE-Core.md
+@@ -1,3 +1,4 @@
++** FOO **
+ OpenEmbedded-Core
+ =================
+ 
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail
new file mode 100644
index 0000000..ab6c52c
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail
@@ -0,0 +1,37 @@
+From f89919ea86d38404dd621521680a0162367bb965 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 6 Sep 2023 09:09:27 -0400
+Subject: [PATCH] selftest-hello: update LIC_FILES_CHKSUM
+
+This test should fail the
+test_metadata_lic_files_chksum.LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..65dda40aba 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,7 +1,7 @@
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f303"
+ 
+ SRC_URI = "file://helloworld.c"
+ 
+@@ -16,4 +16,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass
new file mode 100644
index 0000000..99d9f14
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass
@@ -0,0 +1,39 @@
+From f89919ea86d38404dd621521680a0162367bb965 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 6 Sep 2023 09:09:27 -0400
+Subject: [PATCH] selftest-hello: update LIC_FILES_CHKSUM
+
+License-Update: Fix checksum
+
+This test should pass the
+test_metadata_lic_files_chksum.LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb         | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..65dda40aba 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -1,7 +1,7 @@
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f303"
+ 
+ SRC_URI = "file://helloworld.c"
+ 
+@@ -16,4 +16,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail
new file mode 100644
index 0000000..e14d644
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail
@@ -0,0 +1,53 @@
+From 66430e7c6fbd5187b66560909a510e136fed91c0 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c      |  5 +++++
+ .../hello-world/hello-world_1.0.bb             | 18 ++++++++++++++++++
+ 2 files changed, 23 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++    printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..3c990c108a
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,18 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "MIT"
++
++SRC_URI += "file://hello_world.c"
++
++SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
++SRC_URI[sha256sum] = "edef2bbde0fbf0d88232782a0eded323f483a0519d6fde9a3b1809056fd35f3e"
++
++do_compile(){
++    ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++    install -d ${D}${bindir}
++    install -m +x hello_world ${D}${bindir}/hello_world
++}
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass
new file mode 100644
index 0000000..b8da16d
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass
@@ -0,0 +1,54 @@
+From 5144d2ba1aa763312c047dd5f8901368cff79da6 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c     |  5 +++++
+ .../hello-world/hello-world_1.0.bb            | 19 +++++++++++++++++++
+ 2 files changed, 24 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++    printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..44d888c82a
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,19 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "MIT"
++LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
++
++SRC_URI += "file://hello_world.c"
++
++SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
++SRC_URI[sha256sum] = "edef2bbde0fbf0d88232782a0eded323f483a0519d6fde9a3b1809056fd35f3e"
++
++do_compile(){
++    ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++    install -d ${D}${bindir}
++    install -m +x hello_world ${D}${bindir}/hello_world
++}
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail
new file mode 100644
index 0000000..9cc4aab
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail
@@ -0,0 +1,36 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This test should fail the mbox formatting test and the merge on head
+test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb}           | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
+%+SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail
new file mode 100644
index 0000000..eca1c60
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail
@@ -0,0 +1,35 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This test should fail the merge-on-head and mbox formatting tests.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb}           | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
+%+SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass
new file mode 100644
index 0000000..33940ad
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass
@@ -0,0 +1,33 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb}           | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail b/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail
new file mode 100644
index 0000000..49bd1f8
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail
@@ -0,0 +1,41 @@
+From 55208224f492af0ad929555ffc9b95ff1d301c5f Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Thu, 17 Aug 2023 15:02:38 -0400
+Subject: [PATCH] python3-dtc: upgrade 1.6.1 -> 1.7.0
+
+Changelog: https://kernel.googlesource.com/pub/scm/utils/dtc/dtc/+log/039a99414e778332d8f9c04cbd3072e1dcc62798
+
+Remove custom PV from the recipe since the relevant functionality is in
+1.7.0:
+
+[tgamblin@megalith dtc]$ git tag --contains c001fc01a43e7a06447c06ea3d50bd60641322b8
+v1.7.0
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ .../python/{python3-dtc_1.6.1.bb => python3-dtc_1.7.0.bb}      | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+ rename meta/recipes-devtools/python/{python3-dtc_1.6.1.bb => python3-dtc_1.7.0.bb} (92%)
+
+diff --git a/meta/recipes-devtools/python/python3-dtc_1.6.1.bb b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+similarity index 92%
+rename from meta/recipes-devtools/python/python3-dtc_1.6.1.bb
+rename to meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+index 95ab0be474..85e48d4694 100644
+--- a/meta/recipes-devtools/python/python3-dtc_1.6.1.bb
++++ b/meta/recipes-devtools/python/python3-dtc_1.7.0.bb
+@@ -14,9 +14,8 @@ UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+ 
+ LIC_FILES_CHKSUM = "file://pylibfdt/libfdt.i;beginline=1;endline=6;md5=afda088c974174a29108c8d80b5dce90"
+ 
+-SRCREV = "c001fc01a43e7a06447c06ea3d50bd60641322b8"
++SRCREV = "039a99414e778332d8f9c04cbd3072e1dcc62798"
+ 
+-PV = "1.6.1+git"
+ S = "${WORKDIR}/git"
+ 
+ PYPA_WHEEL = "${S}/dist/libfdt-1.6.2*.whl"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass b/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass
new file mode 100644
index 0000000..2a72457
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass
@@ -0,0 +1,35 @@
+From d12db4cfa913b0e7a4b5bd858d3019acc53ce426 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Wed, 30 Aug 2023 12:15:00 -0400
+Subject: [PATCH] selftest-hello: upgrade 1.0 -> 1.1
+
+This file should pass the test_series_merge_on_head test.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../{selftest-hello_1.0.bb => selftest-hello_1.1.bb}           | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+ rename meta-selftest/recipes-test/selftest-hello/{selftest-hello_1.0.bb => selftest-hello_1.1.bb} (88%)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+similarity index 88%
+rename from meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+rename to meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+index 547587bef4..acc388ec2c 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.1.bb
+@@ -1,3 +1,4 @@
++SUMMARY = "Hello!"
+ DESCRIPTION = "Simple helloworld application -- selftest variant"
+ SECTION = "examples"
+ LICENSE = "MIT"
+@@ -16,4 +17,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail b/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail
new file mode 100644
index 0000000..ce8bf7b
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail
@@ -0,0 +1,71 @@
+From 5a2d0ac780a0f4c046fb1a3c3463d3e726f191cb Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 26 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..92a5b65a53
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,26 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass b/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass
new file mode 100644
index 0000000..ea34c76
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail
new file mode 100644
index 0000000..cdbbc61
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello% fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass
new file mode 100644
index 0000000..ef60170
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail
new file mode 100644
index 0000000..247b2a8
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: this is a very long commit shortlog with way too many words included in it to pass the test
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass
new file mode 100644
index 0000000..ef60170
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass
@@ -0,0 +1,73 @@
+From 35ccee3cee96fb29514475279248078d88907231 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../files/0001-Fix-CVE-1234-56789.patch       | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..9219b8db62
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/0001-Fix-CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
++
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail
new file mode 100644
index 0000000..35d92ae
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail
@@ -0,0 +1,71 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail
new file mode 100644
index 0000000..68f38de
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Approved: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass
new file mode 100644
index 0000000..ea34c76
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass
@@ -0,0 +1,72 @@
+From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Tue, 29 Aug 2023 14:12:27 -0400
+Subject: [PATCH] selftest-hello: fix CVE-1234-56789
+
+CVE: CVE-1234-56789
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
+ .../selftest-hello/selftest-hello_1.0.bb      |  6 +++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+ create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+new file mode 100644
+index 0000000000..869cfb6fe5
+--- /dev/null
++++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
+@@ -0,0 +1,27 @@
++From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
++From: Trevor Gamblin <tgamblin@baylibre.com>
++Date: Tue, 29 Aug 2023 14:08:20 -0400
++Subject: [PATCH] Fix CVE-NOT-REAL
++
++CVE: CVE-1234-56789
++Upstream-Status: Backport(http://example.com/example)
++
++Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
++---
++ strlen.c | 1 +
++ 1 file changed, 1 insertion(+)
++
++diff --git a/strlen.c b/strlen.c
++index 1788f38..83d7918 100644
++--- a/strlen.c
+++++ b/strlen.c
++@@ -8,6 +8,7 @@ int main() {
++ 
++ 	printf("%d\n", str_len(string1));
++ 	printf("%d\n", str_len(string2));
+++	printf("CVE FIXED!!!\n");
++ 
++ 	return 0;
++ }
++-- 
++2.41.0
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..76975a6729 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,7 +3,9 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
++SRC_URI = "file://helloworld.c \
++           file://CVE-1234-56789.patch \
++           "
+ 
+ S = "${WORKDIR}"
+ 
+@@ -16,4 +18,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail b/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail
new file mode 100644
index 0000000..983b6e0
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail
@@ -0,0 +1,35 @@
+From 4ab06b5f81455249cd5e89d2cce9863803b5ecb5 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 8 Sep 2023 14:41:00 -0400
+Subject: [PATCH] selftest-hello: remove helloworld.c
+
+This should fail the test_src_uri_left_files selftest.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb         | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..f6817f05bc 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,8 +3,6 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
+-
+ S = "${WORKDIR}"
+ 
+ do_compile() {
+@@ -16,4 +14,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass b/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass
new file mode 100644
index 0000000..1f1a77e
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass
@@ -0,0 +1,51 @@
+From 6c7ac367a873bf827c19b81085c943eace917a99 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 8 Sep 2023 14:41:00 -0400
+Subject: [PATCH] selftest-hello: remove helloworld.c
+
+This should pass the test_src_uri_left_files selftest.
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ .../recipes-test/selftest-hello/files/helloworld.c        | 8 --------
+ .../recipes-test/selftest-hello/selftest-hello_1.0.bb     | 4 +---
+ 2 files changed, 1 insertion(+), 11 deletions(-)
+ delete mode 100644 meta-selftest/recipes-test/selftest-hello/files/helloworld.c
+
+diff --git a/meta-selftest/recipes-test/selftest-hello/files/helloworld.c b/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
+deleted file mode 100644
+index fc7169b7b8..0000000000
+--- a/meta-selftest/recipes-test/selftest-hello/files/helloworld.c
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#include <stdio.h>
+-
+-int main(void)
+-{
+-	printf("Hello world!\n");
+-
+-	return 0;
+-}
+diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+index 547587bef4..f6817f05bc 100644
+--- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
++++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
+@@ -3,8 +3,6 @@ SECTION = "examples"
+ LICENSE = "MIT"
+ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+-SRC_URI = "file://helloworld.c"
+-
+ S = "${WORKDIR}"
+ 
+ do_compile() {
+@@ -16,4 +14,4 @@ do_install() {
+ 	install -m 0755 helloworld ${D}${bindir}
+ }
+ 
+-BBCLASSEXTEND = "native nativesdk"
+\ No newline at end of file
++BBCLASSEXTEND = "native nativesdk"
+-- 
+2.41.0
+
diff --git a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail b/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail
new file mode 100644
index 0000000..2d2b4e6
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail
@@ -0,0 +1,46 @@
+From e29da5faa74409be394caa09d9f3b7b60f8592b9 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ meta/recipes-devtools/hello-world/hello-world/hello_world.c |  5 +++++
+ meta/recipes-devtools/hello-world/hello-world_1.0.bb        | 12 ++++++++++++
+ 2 files changed, 17 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++    printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..c4e1359217
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,12 @@
++LICENSE = "CLOSED"
++
++SRC_URI += "file://hello_world.c"
++
++do_compile(){
++    ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++    install -d ${D}${bindir}
++    install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.11.0
diff --git a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass b/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass
new file mode 100644
index 0000000..55f0309
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass
@@ -0,0 +1,49 @@
+From 0cd2fed12ce4b7b071edde12aec4481ad7a6f107 Mon Sep 17 00:00:00 2001
+From: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+Date: Thu, 23 Feb 2017 10:34:27 -0600
+Subject: [PATCH] meta: adding hello-yocto recipe
+
+This is a sample recipe
+
+Signed-off-by: Daniela Plascencia <daniela.plascencia@linux.intel.com>
+---
+ .../hello-world/hello-world/hello_world.c                 |  5 +++++
+ meta/recipes-devtools/hello-world/hello-world_1.0.bb      | 15 +++++++++++++++
+ 2 files changed, 20 insertions(+)
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world/hello_world.c
+ create mode 100644 meta/recipes-devtools/hello-world/hello-world_1.0.bb
+
+diff --git a/meta/recipes-devtools/hello-world/hello-world/hello_world.c b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+new file mode 100644
+index 0000000000..0d59f57d4c
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world/hello_world.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++
++int main(){
++    printf("Hello World\n");
++}
+diff --git a/meta/recipes-devtools/hello-world/hello-world_1.0.bb b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+new file mode 100644
+index 0000000000..c54283eece
+--- /dev/null
++++ b/meta/recipes-devtools/hello-world/hello-world_1.0.bb
+@@ -0,0 +1,15 @@
++SUMMARY = "This is a sample summary"
++DESCRIPTION = "This is a sample description"
++HOMEPAGE = "https://sample.com/this-is-a-sample"
++LICENSE = "CLOSED"
++
++SRC_URI += "file://hello_world.c"
++
++do_compile(){
++    ${CC} -o hello_world ../hello_world.c
++}
++
++do_install(){
++    install -d ${D}${bindir}
++    install -m +x hello_world ${D}${bindir}/hello_world
++}
+--
+2.11.0
diff --git a/poky/meta/lib/patchtest/selftest/selftest b/poky/meta/lib/patchtest/selftest/selftest
new file mode 100755
index 0000000..d2b61e9
--- /dev/null
+++ b/poky/meta/lib/patchtest/selftest/selftest
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+
+# Test every patch from files folder and output error on failure
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import os
+import subprocess
+import sys
+
+currentdir = os.path.dirname(os.path.abspath(__file__))
+patchesdir = os.path.join(currentdir, 'files')
+topdir     = os.path.dirname(currentdir)
+parentdir  = os.path.dirname(topdir)
+
+# path to the repo root
+repodir = os.path.dirname(os.path.dirname(parentdir))
+
+def print_results(passcount, skipcount, failcount, xpasscount, xfailcount, errorcount):
+    total = passcount + skipcount + failcount + xpasscount + xfailcount + errorcount
+    print("============================================================================")
+    print("Testsuite summary for %s" % os.path.basename(topdir))
+    print("============================================================================")
+    print("# TOTAL: %s" % str(total))
+    print("# XPASS: %s" % str(xpasscount))
+    print("# XFAIL: %s" % str(xfailcount))
+    print("# PASS: %s" % str(passcount))
+    print("# FAIL: %s" % str(failcount))
+    print("# SKIP: %s" % str(skipcount))
+    print("# ERROR: %s" % str(errorcount))
+    print("============================================================================")
+
+# Once the tests are in oe-core, we can remove the testdir param and use os.path.dirname to get relative paths
+def test(root, patch):
+    res = True
+    patchpath = os.path.abspath(os.path.join(root, patch))
+    
+    cmd     = 'patchtest %s %s/tests --patch %s' % (repodir, topdir, patchpath)
+    results = subprocess.check_output(cmd, stderr=subprocess.STDOUT, universal_newlines=True, shell=True)
+
+    return results
+
+if __name__ == '__main__':
+    passcount = 0
+    failcount = 0
+    skipcount = 0
+    xpasscount = 0
+    xfailcount = 0
+    errorcount = 0
+
+    results = None
+        
+    for root, dirs, patches in os.walk(patchesdir):
+        for patch in patches:
+            results = test(root, patch)
+
+            a = patch.split('.')
+            klass, testname = a[0], a[1]
+            expected_result = a[-1]
+            testid          = ".%s.%s" % (klass,testname)
+
+            for resultline in results.splitlines():
+                if testid in resultline:
+                    result, _ = resultline.split(' ', 1)
+
+                    if expected_result.upper() == "FAIL" and result.upper() == "FAIL":
+                        xfailcount = xfailcount + 1
+                        print("XFAIL: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+                    elif expected_result.upper() == "PASS" and result.upper() == "PASS":
+                        xpasscount = xpasscount + 1
+                        print("XPASS: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+                    else:
+                        print("%s: %s (%s)" % (result.upper(), testid.strip("."), os.path.basename(patch)))
+                        if result.upper() == "PASS":
+                            passcount = passcount + 1
+                        elif result.upper() == "FAIL":
+                            failcount = failcount + 1
+                        elif result.upper() == "SKIP":
+                            skipcount = skipcount + 1
+                        else:
+                            print("Bad result on test %s against %s" % (testid.strip("."), os.path.basename(patch)))
+                            errorcount = errorcount + 1
+                    break
+            else:
+                print ("No test for=%s" % patch)
+
+    print_results(passcount, skipcount, failcount, xpasscount, xfailcount, errorcount)
diff --git a/poky/meta/lib/patchtest/tests/__init__.py b/poky/meta/lib/patchtest/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/__init__.py
diff --git a/poky/meta/lib/patchtest/tests/base.py b/poky/meta/lib/patchtest/tests/base.py
new file mode 100644
index 0000000..27db380
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/base.py
@@ -0,0 +1,239 @@
+# Base class to be used by all test cases defined in the suite
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import unittest
+import logging
+import json
+import unidiff
+from data import PatchTestInput
+import mailbox
+import collections
+import sys
+import os
+import re
+
+sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pyparsing'))
+
+logger = logging.getLogger('patchtest')
+debug=logger.debug
+info=logger.info
+warn=logger.warn
+error=logger.error
+
+Commit = collections.namedtuple('Commit', ['author', 'subject', 'commit_message', 'shortlog', 'payload'])
+
+class PatchtestOEError(Exception):
+    """Exception for handling patchtest-oe errors"""
+    def __init__(self, message, exitcode=1):
+        super().__init__(message)
+        self.exitcode = exitcode
+
+class Base(unittest.TestCase):
+    # if unit test fails, fail message will throw at least the following JSON: {"id": <testid>}
+
+    endcommit_messages_regex = re.compile('\(From \w+-\w+ rev:|(?<!\S)Signed-off-by|(?<!\S)---\n')
+    patchmetadata_regex   = re.compile('-{3} \S+|\+{3} \S+|@{2} -\d+,\d+ \+\d+,\d+ @{2} \S+')
+
+
+    @staticmethod
+    def msg_to_commit(msg):
+        payload = msg.get_payload()
+        return Commit(subject=msg['subject'].replace('\n', ' ').replace('  ', ' '),
+                      author=msg.get('From'),
+                      shortlog=Base.shortlog(msg['subject']),
+                      commit_message=Base.commit_message(payload),
+                      payload=payload)
+
+    @staticmethod
+    def commit_message(payload):
+        commit_message = payload.__str__()
+        match = Base.endcommit_messages_regex.search(payload)
+        if match:
+            commit_message = payload[:match.start()]
+        return commit_message
+
+    @staticmethod
+    def shortlog(shlog):
+        # remove possible prefix (between brackets) before colon
+        start = shlog.find(']', 0, shlog.find(':'))
+        # remove also newlines and spaces at both sides
+        return shlog[start + 1:].replace('\n', '').strip()
+
+    @classmethod
+    def setUpClass(cls):
+
+        # General objects: mailbox.mbox and patchset
+        cls.mbox = mailbox.mbox(PatchTestInput.repo.patch)
+
+        # Patch may be malformed, so try parsing it
+        cls.unidiff_parse_error = ''
+        cls.patchset = None
+        try:
+            cls.patchset = unidiff.PatchSet.from_filename(PatchTestInput.repo.patch, encoding=u'UTF-8')
+        except unidiff.UnidiffParseError as upe:
+            cls.patchset = []
+            cls.unidiff_parse_error = str(upe)
+
+        # Easy to iterate list of commits
+        cls.commits = []
+        for msg in cls.mbox:
+            if msg['subject'] and msg.get_payload():
+                cls.commits.append(Base.msg_to_commit(msg))
+
+        cls.setUpClassLocal()
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.tearDownClassLocal()
+
+    @classmethod
+    def setUpClassLocal(cls):
+        pass
+
+    @classmethod
+    def tearDownClassLocal(cls):
+        pass
+
+    def fail(self, issue, fix=None, commit=None, data=None):
+        """ Convert to a JSON string failure data"""
+        value = {'id': self.id(),
+                 'issue': issue}
+
+        if fix:
+            value['fix'] = fix
+        if commit:
+            value['commit'] = {'subject': commit.subject,
+                               'shortlog': commit.shortlog}
+
+        # extend return value with other useful info
+        if data:
+            value['data'] = data
+
+        return super(Base, self).fail(json.dumps(value))
+
+    def skip(self, issue, data=None):
+        """ Convert the skip string to JSON"""
+        value = {'id': self.id(),
+                 'issue': issue}
+
+        # extend return value with other useful info
+        if data:
+            value['data'] = data
+
+        return super(Base, self).skipTest(json.dumps(value))
+
+    def shortid(self):
+        return self.id().split('.')[-1]
+
+    def __str__(self):
+        return json.dumps({'id': self.id()})
+
+class Metadata(Base):
+    @classmethod
+    def setUpClassLocal(cls):
+        cls.tinfoil = cls.setup_tinfoil()
+
+        # get info about added/modified/remove recipes
+        cls.added, cls.modified, cls.removed = cls.get_metadata_stats(cls.patchset)
+
+    @classmethod
+    def tearDownClassLocal(cls):
+        cls.tinfoil.shutdown()
+
+    @classmethod
+    def setup_tinfoil(cls, config_only=False):
+        """Initialize tinfoil api from bitbake"""
+
+        # import relevant libraries
+        try:
+            scripts_path = os.path.join(PatchTestInput.repodir, 'scripts', 'lib')
+            if scripts_path not in sys.path:
+                sys.path.insert(0, scripts_path)
+            import scriptpath
+            scriptpath.add_bitbake_lib_path()
+            import bb.tinfoil
+        except ImportError:
+            raise PatchtestOEError('Could not import tinfoil module')
+
+        orig_cwd = os.path.abspath(os.curdir)
+
+        # Load tinfoil
+        tinfoil = None
+        try:
+            builddir = os.environ.get('BUILDDIR')
+            if not builddir:
+                logger.warn('Bitbake environment not loaded?')
+                return tinfoil
+            os.chdir(builddir)
+            tinfoil = bb.tinfoil.Tinfoil()
+            tinfoil.prepare(config_only=config_only)
+        except bb.tinfoil.TinfoilUIException as te:
+            if tinfoil:
+                tinfoil.shutdown()
+            raise PatchtestOEError('Could not prepare properly tinfoil (TinfoilUIException)')
+        except Exception as e:
+            if tinfoil:
+                tinfoil.shutdown()
+            raise e
+        finally:
+            os.chdir(orig_cwd)
+
+        return tinfoil
+
+    @classmethod
+    def get_metadata_stats(cls, patchset):
+        """Get lists of added, modified and removed metadata files"""
+
+        def find_pn(data, path):
+            """Find the PN from data"""
+            pn = None
+            pn_native = None
+            for _path, _pn in data:
+                if path in _path:
+                    if 'native' in _pn:
+                        # store the native PN but look for the non-native one first
+                        pn_native = _pn
+                    else:
+                        pn = _pn
+                        break
+            else:
+                # sent the native PN if found previously
+                if pn_native:
+                    return pn_native
+
+                # on renames (usually upgrades), we need to check (FILE) base names
+                # because the unidiff library does not provided the new filename, just the modified one
+                # and tinfoil datastore, once the patch is merged, will contain the new filename
+                path_basename = path.split('_')[0]
+                for _path, _pn in data:
+                    _path_basename = _path.split('_')[0]
+                    if path_basename == _path_basename:
+                        pn = _pn
+            return pn
+
+        if not cls.tinfoil:
+            cls.tinfoil = cls.setup_tinfoil()
+
+        added_paths, modified_paths, removed_paths = [], [], []
+        added, modified, removed = [], [], []
+
+        # get metadata filename additions, modification and removals
+        for patch in patchset:
+            if patch.path.endswith('.bb') or patch.path.endswith('.bbappend') or patch.path.endswith('.inc'):
+                if patch.is_added_file:
+                    added_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+                elif patch.is_modified_file:
+                    modified_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+                elif patch.is_removed_file:
+                    removed_paths.append(os.path.join(os.path.abspath(PatchTestInput.repodir), patch.path))
+
+        data = cls.tinfoil.cooker.recipecaches[''].pkg_fn.items()
+
+        added = [find_pn(data,path) for path in added_paths]
+        modified = [find_pn(data,path) for path in modified_paths]
+        removed = [find_pn(data,path) for path in removed_paths]
+
+        return [a for a in added if a], [m for m in modified if m], [r for r in removed if r]
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/common.py b/poky/meta/lib/patchtest/tests/pyparsing/common.py
new file mode 100644
index 0000000..9d37b04
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/pyparsing/common.py
@@ -0,0 +1,26 @@
+# common pyparsing variables
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import pyparsing
+
+# general
+colon = pyparsing.Literal(":")
+start = pyparsing.LineStart()
+end   = pyparsing.LineEnd()
+at = pyparsing.Literal("@")
+lessthan = pyparsing.Literal("<")
+greaterthan = pyparsing.Literal(">")
+opensquare = pyparsing.Literal("[")
+closesquare = pyparsing.Literal("]")
+inappropriate = pyparsing.CaselessLiteral("Inappropriate")
+submitted = pyparsing.CaselessLiteral("Submitted")
+
+# word related
+nestexpr = pyparsing.nestedExpr(opener='[', closer=']')
+inappropriateinfo = pyparsing.Literal("Inappropriate") + nestexpr
+submittedinfo = pyparsing.Literal("Submitted") + nestexpr
+word = pyparsing.Word(pyparsing.alphas)
+worddot = pyparsing.Word(pyparsing.alphas+".")
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
new file mode 100644
index 0000000..dd7131a
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
@@ -0,0 +1,18 @@
+# signed-off-by pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+
+import pyparsing
+import common
+
+name = pyparsing.Regex('\S+.*(?= <)')
+username = pyparsing.OneOrMore(common.worddot)
+domain = pyparsing.OneOrMore(common.worddot)
+cve = pyparsing.Regex('CVE\-\d{4}\-\d+')
+cve_mark = pyparsing.Literal("CVE:")
+
+cve_tag = pyparsing.AtLineStart(cve_mark + cve)
+patch_cve_tag = pyparsing.AtLineStart("+" + cve_mark + cve)
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
new file mode 100644
index 0000000..26e9612
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
@@ -0,0 +1,14 @@
+# subject pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+# NOTE:This is an oversimplified syntax of the mbox's summary
+
+import pyparsing
+import common
+
+target        = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables.replace(':','')))
+summary       = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables))
+shortlog       = common.start + target + common.colon + summary + common.end
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
new file mode 100644
index 0000000..c8a4351
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
@@ -0,0 +1,22 @@
+# signed-off-by pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+
+import pyparsing
+import common
+
+name = pyparsing.Regex('\S+.*(?= <)')
+username = pyparsing.OneOrMore(common.worddot)
+domain = pyparsing.OneOrMore(common.worddot)
+
+# taken from https://pyparsing-public.wikispaces.com/Helpful+Expressions
+email = pyparsing.Regex(r"(?P<user>[A-Za-z0-9._%+-]+)@(?P<hostname>[A-Za-z0-9.-]+)\.(?P<domain>[A-Za-z]{2,})")
+
+email_enclosed = common.lessthan + email + common.greaterthan
+
+signed_off_by_mark = pyparsing.Literal("Signed-off-by:")
+signed_off_by = pyparsing.AtLineStart(signed_off_by_mark + name + email_enclosed)
+patch_signed_off_by = pyparsing.AtLineStart("+" + signed_off_by_mark + name + email_enclosed)
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
new file mode 100644
index 0000000..d63567e
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
@@ -0,0 +1,24 @@
+# upstream-status pyparsing definition
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+
+import common
+import pyparsing
+
+upstream_status_literal_valid_status = ["Pending", "Backport", "Denied", "Inappropriate", "Submitted"]
+upstream_status_nonliteral_valid_status = ["Pending", "Backport", "Denied", "Inappropriate [reason]", "Submitted [where]"]
+
+upstream_status_valid_status = pyparsing.Or(
+    [pyparsing.Literal(status) for status in upstream_status_literal_valid_status]
+)
+
+upstream_status_mark         = pyparsing.Literal("Upstream-Status")
+inappropriate_status_mark    = common.inappropriate
+submitted_status_mark        = common.submitted
+
+upstream_status              = common.start + upstream_status_mark + common.colon + upstream_status_valid_status
+upstream_status_inappropriate_info = common.start + upstream_status_mark + common.colon + common.inappropriateinfo
+upstream_status_submitted_info = common.start + upstream_status_mark + common.colon + common.submittedinfo
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_author.py b/poky/meta/lib/patchtest/tests/test_mbox_author.py
new file mode 100644
index 0000000..6c79f16
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_author.py
@@ -0,0 +1,29 @@
+# Checks related to the patch's author
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import re
+
+class Author(base.Base):
+
+    auh_email = '<auh@auh.yoctoproject.org>'
+
+    invalids = [re.compile("^Upgrade Helper.+"),
+                re.compile(re.escape(auh_email)),
+                re.compile("uh@not\.set"),
+                re.compile("\S+@example\.com")]
+
+
+    def test_author_valid(self):
+        for commit in self.commits:
+            for invalid in self.invalids:
+                if invalid.search(commit.author):
+                    self.fail('Invalid author %s' % commit.author, 'Resend the series with a valid patch\'s author', commit)
+
+    def test_non_auh_upgrade(self):
+        for commit in self.commits:
+            if self.auh_email in commit.payload:
+                self.fail('Invalid author %s in commit message' % self.auh_email, 'Resend the series with a valid patch\'s author', commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py b/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py
new file mode 100644
index 0000000..e8de48b
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py
@@ -0,0 +1,22 @@
+# Checks related to the patch's bugzilla tag
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import re
+import base
+
+class Bugzilla(base.Base):
+    rexp_detect     = re.compile("\[\s?YOCTO.*\]", re.IGNORECASE)
+    rexp_validation = re.compile("\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]", re.IGNORECASE)
+
+    def test_bugzilla_entry_format(self):
+        for commit in Bugzilla.commits:
+            for line in commit.commit_message.splitlines():
+                if self.rexp_detect.match(line):
+                    if not self.rexp_validation.match(line):
+                        self.fail('Yocto Project bugzilla tag is not correctly formatted',
+                                  'Specify bugzilla ID in commit description with format: "[YOCTO #<bugzilla ID>]"',
+                                  commit)
+
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_cve.py b/poky/meta/lib/patchtest/tests/test_mbox_cve.py
new file mode 100644
index 0000000..f99194c
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_cve.py
@@ -0,0 +1,49 @@
+# Checks related to the patch's CVE lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import base
+import os
+import parse_cve_tags
+import re
+
+class CVE(base.Base):
+
+    revert_shortlog_regex = re.compile('Revert\s+".*"')
+    prog = parse_cve_tags.cve_tag
+
+    def setUp(self):
+        if self.unidiff_parse_error:
+            self.skip('Parse error %s' % self.unidiff_parse_error)
+
+        # we are just interested in series that introduce CVE patches, thus discard other
+        # possibilities: modification to current CVEs, patch directly introduced into the
+        # recipe, upgrades already including the CVE, etc.
+        new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
+        if not new_cves:
+            self.skip('No new CVE patches introduced')
+
+    def test_cve_presence_in_commit_message(self):
+        for commit in CVE.commits:
+            # skip those patches that revert older commits, these do not required the tag presence
+            if self.revert_shortlog_regex.match(commit.shortlog):
+                continue
+            if not self.prog.search_string(commit.payload):
+                self.fail('Missing or incorrectly formatted CVE tag in mbox',
+                          'Correct or include the CVE tag in the mbox with format: "CVE: CVE-YYYY-XXXX"',
+                          commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_description.py b/poky/meta/lib/patchtest/tests/test_mbox_description.py
new file mode 100644
index 0000000..7addc6b
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_description.py
@@ -0,0 +1,17 @@
+# Checks related to the patch's commit_message
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+
+class CommitMessage(base.Base):
+
+    def test_commit_message_presence(self):
+        for commit in CommitMessage.commits:
+            if not commit.commit_message.strip():
+                self.fail('Patch is missing a descriptive commit message',
+                          'Please include a commit message on your patch explaining the change (most importantly why the change is being made)',
+                          commit)
+
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_format.py b/poky/meta/lib/patchtest/tests/test_mbox_format.py
new file mode 100644
index 0000000..85c452c
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_format.py
@@ -0,0 +1,16 @@
+# Checks correct parsing of mboxes
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import re
+
+class MboxFormat(base.Base):
+
+    def test_mbox_format(self):
+        if self.unidiff_parse_error:
+            self.fail('Series cannot be parsed correctly due to malformed diff lines',
+                      'Create the series again using git-format-patch and ensure it can be applied using git am',
+                      data=[('Diff line', re.sub('^.+:\s(?<!$)','',self.unidiff_parse_error))])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py b/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py
new file mode 100644
index 0000000..de38e20
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py
@@ -0,0 +1,64 @@
+# Check if the series was intended for other project (not OE-Core)
+#
+# Copyright (C) 2017 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import subprocess
+import collections
+import base
+import re
+from data import PatchTestInput
+
+class MailingList(base.Base):
+
+    # base paths of main yocto project sub-projects
+    paths = {
+        'oe-core': ['meta-selftest', 'meta-skeleton', 'meta', 'scripts'],
+        'bitbake': ['bitbake'],
+        'documentation': ['documentation'],
+        'poky': ['meta-poky','meta-yocto-bsp'],
+        'oe': ['meta-gpe', 'meta-gnome', 'meta-efl', 'meta-networking', 'meta-multimedia','meta-initramfs', 'meta-ruby', 'contrib', 'meta-xfce', 'meta-filesystems', 'meta-perl', 'meta-webserver', 'meta-systemd', 'meta-oe', 'meta-python']
+        }
+
+    # scripts folder is a mix of oe-core and poky, most is oe-core code except:
+    poky_scripts = ['scripts/yocto-bsp', 'scripts/yocto-kernel', 'scripts/yocto-layer', 'scripts/lib/bsp']
+
+    Project = collections.namedtuple('Project', ['name', 'listemail', 'gitrepo', 'paths'])
+
+    bitbake = Project(name='Bitbake', listemail='bitbake-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/bitbake/', paths=paths['bitbake'])
+    doc     = Project(name='Documentantion', listemail='yocto@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/yocto-docs/', paths=paths['documentation'])
+    poky    = Project(name='Poky', listemail='poky@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/poky/', paths=paths['poky'])
+    oe      = Project(name='oe', listemail='openembedded-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/meta-openembedded/', paths=paths['oe'])
+
+
+    def test_target_mailing_list(self):
+        """In case of merge failure, check for other targeted projects"""
+        if PatchTestInput.repo.ismerged:
+            self.skip('Series merged, no reason to check other mailing lists')
+
+        # a meta project may be indicted in the message subject, if this is the case, just fail
+        # TODO: there may be other project with no-meta prefix, we also need to detect these
+        project_regex = re.compile("\[(?P<project>meta-.+)\]")
+        for commit in MailingList.commits:
+            match = project_regex.match(commit.subject)
+            if match:
+                self.fail('Series sent to the wrong mailing list',
+                          'Check the project\'s README (%s) and send the patch to the indicated list' % match.group('project'),
+                          commit)
+
+        for patch in self.patchset:
+            folders = patch.path.split('/')
+            base_path = folders[0]
+            for project in [self.bitbake, self.doc, self.oe, self.poky]:
+                if base_path in  project.paths:
+                    self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
+                              data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)),
+                                    ('Patch\'s path:', patch.path)])
+
+            # check for poky's scripts code
+            if base_path.startswith('scripts'):
+                for poky_file in self.poky_scripts:
+                    if patch.path.startswith(poky_file):
+                        self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
+                                  data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_merge.py b/poky/meta/lib/patchtest/tests/test_mbox_merge.py
new file mode 100644
index 0000000..c8b6718
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_merge.py
@@ -0,0 +1,25 @@
+# Check if mbox was merged by patchtest
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import subprocess
+import base
+from data import PatchTestInput
+
+def headlog():
+    output = subprocess.check_output(
+        "cd %s; git log --pretty='%%h#%%aN#%%cD:#%%s' -1" % PatchTestInput.repodir,
+        universal_newlines=True,
+        shell=True
+        )
+    return output.split('#')
+
+class Merge(base.Base):
+    def test_series_merge_on_head(self):
+        if not PatchTestInput.repo.ismerged:
+            commithash, author, date, shortlog = headlog()
+            self.fail('Series does not apply on top of target branch',
+                      'Rebase your series on top of targeted branch',
+                      data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py b/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py
new file mode 100644
index 0000000..b6c2a20
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py
@@ -0,0 +1,41 @@
+# Checks related to the patch's  summary
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import parse_shortlog
+import pyparsing
+
+maxlength = 90
+
+class Shortlog(base.Base):
+
+    def test_shortlog_format(self):
+        for commit in Shortlog.commits:
+            shortlog = commit.shortlog
+            if not shortlog.strip():
+                self.skip('Empty shortlog, no reason to execute shortlog format test')
+            else:
+                # no reason to re-check on revert shortlogs
+                if shortlog.startswith('Revert "'):
+                    continue
+                try:
+                    parse_shortlog.shortlog.parseString(shortlog)
+                except pyparsing.ParseException as pe:
+                    self.fail('Shortlog does not follow expected format',
+                              'Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
+                              commit)
+
+    def test_shortlog_length(self):
+        for commit in Shortlog.commits:
+            # no reason to re-check on revert shortlogs
+            shortlog = commit.shortlog
+            if shortlog.startswith('Revert "'):
+                continue
+            l = len(shortlog)
+            if l > maxlength:
+                self.fail('Commit shortlog is too long',
+                          'Edit shortlog so that it is %d characters or less (currently %d characters)' % (maxlength, l),
+                          commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py
new file mode 100644
index 0000000..6458951
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py
@@ -0,0 +1,28 @@
+# Checks related to the patch's signed-off-by lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import parse_signed_off_by
+import re
+
+class SignedOffBy(base.Base):
+
+    revert_shortlog_regex = re.compile('Revert\s+".*"')
+
+    @classmethod
+    def setUpClassLocal(cls):
+        # match self.mark with no '+' preceding it
+        cls.prog = parse_signed_off_by.signed_off_by
+
+    def test_signed_off_by_presence(self):
+        for commit in SignedOffBy.commits:
+            # skip those patches that revert older commits, these do not required the tag presence
+            if self.revert_shortlog_regex.match(commit.shortlog):
+                continue
+            if not SignedOffBy.prog.search_string(commit.payload):
+                self.fail('Patch is missing Signed-off-by',
+                          'Sign off the patch (either manually or with "git commit --amend -s")',
+                          commit)
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py b/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py
new file mode 100644
index 0000000..e9a5b6b
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py
@@ -0,0 +1,82 @@
+# Checks related to the patch's LIC_FILES_CHKSUM  metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import re
+from data import PatchTestInput, PatchTestDataStore
+
+class LicFilesChkSum(base.Metadata):
+    metadata = 'LIC_FILES_CHKSUM'
+    license  = 'LICENSE'
+    closed   = 'CLOSED'
+    lictag   = 'License-Update'
+    lictag_re  = re.compile("^%s:" % lictag, re.MULTILINE)
+
+    def setUp(self):
+        # these tests just make sense on patches that can be merged
+        if not PatchTestInput.repo.canbemerged:
+            self.skip('Patch cannot be merged')
+
+    def test_lic_files_chksum_presence(self):
+        if not self.added:
+            self.skip('No added recipes, skipping test')
+
+        for pn in self.added:
+            rd = self.tinfoil.parse_recipe(pn)
+            pathname = rd.getVar('FILE')
+            # we are not interested in images
+            if '/images/' in pathname:
+                continue
+            lic_files_chksum = rd.getVar(self.metadata)
+            if rd.getVar(self.license) == self.closed:
+                continue
+            if not lic_files_chksum:
+                self.fail('%s is missing in newly added recipe' % self.metadata,
+                          'Specify the variable %s in %s' % (self.metadata, pn))
+
+    def pretest_lic_files_chksum_modified_not_mentioned(self):
+        if not self.modified:
+            self.skip('No modified recipes, skipping pretest')
+        # get the proper metadata values
+        for pn in self.modified:
+            rd = self.tinfoil.parse_recipe(pn)
+            pathname = rd.getVar('FILE')
+            # we are not interested in images
+            if '/images/' in pathname:
+                continue
+            PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata)
+
+    def test_lic_files_chksum_modified_not_mentioned(self):
+        if not self.modified:
+            self.skip('No modified recipes, skipping test')
+
+        # get the proper metadata values
+        for pn in self.modified:
+            rd = self.tinfoil.parse_recipe(pn)
+            pathname = rd.getVar('FILE')
+            # we are not interested in images
+            if '/images/' in pathname:
+                continue
+            PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata)
+        # compare if there were changes between pre-merge and merge
+        for pn in self.modified:
+            pretest = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(),self.metadata, pn)]
+            test    = PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata, pn)]
+
+            # TODO: this is workaround to avoid false-positives when pretest metadata is empty (not reason found yet)
+            # For more info, check bug 12284
+            if not pretest:
+                return
+
+            if pretest != test:
+                # if any patch on the series contain reference on the metadata, fail
+                for commit in self.commits:
+                    if self.lictag_re.search(commit.commit_message):
+                       break
+                else:
+                    self.fail('LIC_FILES_CHKSUM changed on target %s but there is no "%s" tag in commit message' % (pn, self.lictag),
+                              'Include "%s: <description>" into the commit message with a brief description' % self.lictag,
+                              data=[('Current checksum', pretest), ('New checksum', test)])
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_license.py b/poky/meta/lib/patchtest/tests/test_metadata_license.py
new file mode 100644
index 0000000..16604db
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata_license.py
@@ -0,0 +1,55 @@
+# Checks related to the patch's LIC_FILES_CHKSUM  metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import os
+from data import PatchTestInput
+
+class License(base.Metadata):
+    metadata = 'LICENSE'
+    invalid_license = 'PATCHTESTINVALID'
+
+    def setUp(self):
+        # these tests just make sense on patches that can be merged
+        if not PatchTestInput.repo.canbemerged:
+            self.skip('Patch cannot be merged')
+
+    def test_license_presence(self):
+        if not self.added:
+            self.skip('No added recipes, skipping test')
+
+        # TODO: this is a workaround so we can parse the recipe not
+        # containing the LICENSE var: add some default license instead
+        # of INVALID into auto.conf, then remove this line at the end
+        auto_conf = os.path.join(os.environ.get('BUILDDIR'), 'conf', 'auto.conf')
+        open_flag = 'w'
+        if os.path.exists(auto_conf):
+            open_flag = 'a'
+        with open(auto_conf, open_flag) as fd:
+            for pn in self.added:
+                fd.write('LICENSE ??= "%s"\n' % self.invalid_license)
+
+        no_license = False
+        for pn in self.added:
+            rd = self.tinfoil.parse_recipe(pn)
+            license = rd.getVar(self.metadata)
+            if license == self.invalid_license:
+                no_license = True
+                break
+
+        # remove auto.conf line or the file itself
+        if open_flag == 'w':
+            os.remove(auto_conf)
+        else:
+            fd = open(auto_conf, 'r')
+            lines = fd.readlines()
+            fd.close()
+            with open(auto_conf, 'w') as fd:
+                fd.write(''.join(lines[:-1]))
+
+        if no_license:
+            self.fail('Recipe does not have the LICENSE field set', 'Include a LICENSE into the new recipe')
+
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_max_length.py b/poky/meta/lib/patchtest/tests/test_metadata_max_length.py
new file mode 100644
index 0000000..04a5e23
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata_max_length.py
@@ -0,0 +1,26 @@
+# Checks related to patch line lengths
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import re
+
+class MaxLength(base.Base):
+    add_mark = re.compile('\+ ')
+    max_length = 200
+
+    def test_max_line_length(self):
+        for patch in self.patchset:
+            # for the moment, we are just interested in metadata
+            if patch.path.endswith('.patch'):
+                continue
+            payload = str(patch)
+            for line in payload.splitlines():
+                if self.add_mark.match(line):
+                    current_line_length = len(line[1:])
+                    if current_line_length > self.max_length:
+                        self.fail('Patch line too long (current length %s)' % current_line_length,
+                                  'Shorten the corresponding patch line (max length supported %s)' % self.max_length,
+                                  data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])])
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py b/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py
new file mode 100644
index 0000000..718229d
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py
@@ -0,0 +1,75 @@
+# Checks related to the patch's SRC_URI metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import subprocess
+import base
+import re
+import os
+from data import PatchTestInput, PatchTestDataStore
+
+class SrcUri(base.Metadata):
+
+    metadata  = 'SRC_URI'
+    md5sum    = 'md5sum'
+    sha256sum = 'sha256sum'
+    git_regex = re.compile('^git\:\/\/.*')
+
+    def setUp(self):
+        # these tests just make sense on patches that can be merged
+        if not PatchTestInput.repo.canbemerged:
+            self.skip('Patch cannot be merged')
+
+    def pretest_src_uri_left_files(self):
+        if not self.modified:
+            self.skip('No modified recipes, skipping pretest')
+
+        # get the proper metadata values
+        for pn in self.modified:
+            # we are not interested in images
+            if 'core-image' in pn:
+                continue
+            rd = self.tinfoil.parse_recipe(pn)
+            PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
+
+    def test_src_uri_left_files(self):
+        if not self.modified:
+            self.skip('No modified recipes, skipping pretest')
+
+        # get the proper metadata values
+        for pn in self.modified:
+            # we are not interested in images
+            if 'core-image' in pn:
+                continue
+            rd = self.tinfoil.parse_recipe(pn)
+            PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
+
+        for pn in self.modified:
+            pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
+            test_src_uri    = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
+
+            pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')])
+            test_files    = set([os.path.basename(patch) for patch in test_src_uri    if patch.startswith('file://')])
+
+            # check if files were removed
+            if len(test_files) < len(pretest_files):
+
+                # get removals from patchset
+                filesremoved_from_patchset = set()
+                for patch in self.patchset:
+                    if patch.is_removed_file:
+                        filesremoved_from_patchset.add(os.path.basename(patch.path))
+
+                # get the deleted files from the SRC_URI
+                filesremoved_from_usr_uri = pretest_files - test_files
+
+                # finally, get those patches removed at SRC_URI and not removed from the patchset
+                # TODO: we are not taking into account  renames, so test may raise false positives
+                not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset
+                if not_removed:
+                    self.fail('Patches not removed from tree',
+                              'Amend the patch containing the software patch file removal',
+                              data=[('Patch', f) for f in not_removed])
+
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_summary.py b/poky/meta/lib/patchtest/tests/test_metadata_summary.py
new file mode 100644
index 0000000..931b267
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata_summary.py
@@ -0,0 +1,32 @@
+# Checks related to the patch's summary metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+from data import PatchTestInput
+
+class Summary(base.Metadata):
+    metadata = 'SUMMARY'
+
+    def setUp(self):
+        # these tests just make sense on patches that can be merged
+        if not PatchTestInput.repo.canbemerged:
+            self.skip('Patch cannot be merged')
+
+    def test_summary_presence(self):
+        if not self.added:
+            self.skip('No added recipes, skipping test')
+
+        for pn in self.added:
+            # we are not interested in images
+            if 'core-image' in pn:
+                continue
+            rd = self.tinfoil.parse_recipe(pn)
+            summary = rd.getVar(self.metadata)
+
+            # "${PN} version ${PN}-${PR}" is the default, so fail if default
+            if summary.startswith('%s version' % pn):
+                self.fail('%s is missing in newly added recipe' % self.metadata,
+                          'Specify the variable %s in %s' % (self.metadata, pn))
diff --git a/poky/meta/lib/patchtest/tests/test_patch_cve.py b/poky/meta/lib/patchtest/tests/test_patch_cve.py
new file mode 100644
index 0000000..46ed9ef
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_patch_cve.py
@@ -0,0 +1,51 @@
+# Checks related to the patch's CVE lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import base
+import os
+import re
+
+class CVE(base.Base):
+
+    re_cve_pattern = re.compile("CVE\-\d{4}\-\d+", re.IGNORECASE)
+    re_cve_payload_tag     = re.compile("\+CVE:(\s+CVE\-\d{4}\-\d+)+")
+
+    def setUp(self):
+        if self.unidiff_parse_error:
+            self.skip('Parse error %s' % self.unidiff_parse_error)
+
+        # we are just interested in series that introduce CVE patches, thus discard other
+        # possibilities: modification to current CVEs, patch directly introduced into the
+        # recipe, upgrades already including the CVE, etc.
+        new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
+        if not new_cves:
+            self.skip('No new CVE patches introduced')
+
+    def test_cve_tag_format(self):
+        for commit in CVE.commits:
+            if self.re_cve_pattern.search(commit.shortlog) or self.re_cve_pattern.search(commit.commit_message):
+                tag_found = False
+                for line in commit.payload.splitlines():
+                    if self.re_cve_payload_tag.match(line):
+                        tag_found = True
+                        break
+                if not tag_found:
+                    self.fail('Missing or incorrectly formatted CVE tag in included patch file',
+                              'Correct or include the CVE tag on cve patch with format: "CVE: CVE-YYYY-XXXX"',
+                              commit)
diff --git a/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py
new file mode 100644
index 0000000..4855d6d
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py
@@ -0,0 +1,43 @@
+# Checks related to the patch's signed-off-by lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import parse_signed_off_by
+import re
+
+class PatchSignedOffBy(base.Base):
+
+    @classmethod
+    def setUpClassLocal(cls):
+        cls.newpatches = []
+        # get just those relevant patches: new software patches
+        for patch in cls.patchset:
+            if patch.path.endswith('.patch') and patch.is_added_file:
+                cls.newpatches.append(patch)
+
+        cls.mark = str(parse_signed_off_by.signed_off_by_mark).strip('"')
+
+        # match PatchSignedOffBy.mark with '+' preceding it
+        cls.prog = parse_signed_off_by.patch_signed_off_by
+
+    def setUp(self):
+        if self.unidiff_parse_error:
+            self.skip('Parse error %s' % self.unidiff_parse_error)
+
+    def test_signed_off_by_presence(self):
+        if not PatchSignedOffBy.newpatches:
+            self.skip("There are no new software patches, no reason to test %s presence" % PatchSignedOffBy.mark)
+
+        for newpatch in PatchSignedOffBy.newpatches:
+            payload = newpatch.__str__()
+            for line in payload.splitlines():
+                if self.patchmetadata_regex.match(line):
+                    continue
+                if PatchSignedOffBy.prog.search_string(payload):
+                    break
+            else:
+                self.fail('A patch file has been added, but does not have a Signed-off-by tag',
+                          'Sign off the added patch file (%s)' % newpatch.path)
diff --git a/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py b/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py
new file mode 100644
index 0000000..eda5353
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py
@@ -0,0 +1,64 @@
+# Checks related to the patch's upstream-status lines
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+import parse_upstream_status
+import pyparsing
+import os
+
+class PatchUpstreamStatus(base.Base):
+
+    upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status")
+
+    @classmethod
+    def setUpClassLocal(cls):
+        cls.newpatches = []
+        # get just those relevant patches: new software patches
+        for patch in cls.patchset:
+            if patch.path.endswith('.patch') and patch.is_added_file:
+                cls.newpatches.append(patch)
+
+    def setUp(self):
+        if self.unidiff_parse_error:
+            self.skip('Python-unidiff parse error')
+        self.valid_status    = ', '.join(parse_upstream_status.upstream_status_nonliteral_valid_status)
+        self.standard_format = 'Upstream-Status: <Valid status>'
+
+    def test_upstream_status_presence_format(self):
+        if not PatchUpstreamStatus.newpatches:
+            self.skip("There are no new software patches, no reason to test Upstream-Status presence/format")
+
+        for newpatch in PatchUpstreamStatus.newpatches:
+            payload = newpatch.__str__()
+            if not self.upstream_status_regex.search_string(payload):
+                self.fail('Added patch file is missing Upstream-Status in the header',
+                          'Add Upstream-Status: <Valid status> to the header of %s' % newpatch.path,
+                          data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)])
+            for line in payload.splitlines():
+                if self.patchmetadata_regex.match(line):
+                    continue
+                if self.upstream_status_regex.search_string(line):
+                        if parse_upstream_status.inappropriate_status_mark.searchString(line):
+                            try:
+                                parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+'))
+                            except pyparsing.ParseException as pe:
+                                self.fail('Upstream-Status is Inappropriate, but no reason was provided',
+                                          'Include a brief reason why %s is inappropriate' % os.path.basename(newpatch.path),
+                                          data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')])
+                        elif parse_upstream_status.submitted_status_mark.searchString(line):
+                            try:
+                                parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+'))
+                            except pyparsing.ParseException as pe:
+                                self.fail('Upstream-Status is Submitted, but it is not mentioned where',
+                                          'Include where %s was submitted' % os.path.basename(newpatch.path),
+                                          data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')])
+                        else:
+                            try:
+                                parse_upstream_status.upstream_status.parseString(line.lstrip('+'))
+                            except pyparsing.ParseException as pe:
+                                self.fail('Upstream-Status is in incorrect format',
+                                          'Fix Upstream-Status format in %s' % os.path.basename(newpatch.path),
+                                          data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)])
diff --git a/poky/meta/lib/patchtest/tests/test_python_pylint.py b/poky/meta/lib/patchtest/tests/test_python_pylint.py
new file mode 100644
index 0000000..ea8efb7
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_python_pylint.py
@@ -0,0 +1,61 @@
+# Checks related to the python code done with pylint
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import base
+from data import PatchTestInput
+import pylint.epylint as lint
+
+class PyLint(base.Base):
+    pythonpatches  = []
+    pylint_pretest = {}
+    pylint_test    = {}
+    pylint_options = " -E --disable='E0611, E1101, F0401, E0602' --msg-template='L:{line} F:{module} I:{msg}'"
+
+    @classmethod
+    def setUpClassLocal(cls):
+        # get just those patches touching python files
+        cls.pythonpatches = []
+        for patch in cls.patchset:
+            if patch.path.endswith('.py'):
+                if not patch.is_removed_file:
+                    cls.pythonpatches.append(patch)
+
+    def setUp(self):
+        if self.unidiff_parse_error:
+            self.skip('Python-unidiff parse error')
+        if not PatchTestInput.repo.canbemerged:
+            self.skip('Patch cannot be merged, no reason to execute the test method')
+        if not PyLint.pythonpatches:
+            self.skip('No python related patches, skipping test')
+
+    def pretest_pylint(self):
+        for pythonpatch in self.pythonpatches:
+            if pythonpatch.is_modified_file:
+                (pylint_stdout, pylint_stderr) = lint.py_run(command_options = pythonpatch.path + self.pylint_options, return_std=True)
+                for line in pylint_stdout.readlines():
+                    if not '*' in line:
+                        if line.strip():
+                            self.pylint_pretest[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
+
+    def test_pylint(self):
+        for pythonpatch in self.pythonpatches:
+            # a condition checking whether a file is renamed or not
+            # unidiff doesn't support this yet
+            if pythonpatch.target_file is not pythonpatch.path:
+                path = pythonpatch.target_file[2:]
+            else:
+                path = pythonpatch.path
+            (pylint_stdout, pylint_stderr) = lint.py_run(command_options = path + self.pylint_options, return_std=True)
+            for line in pylint_stdout.readlines():
+                    if not '*' in line:
+                        if line.strip():
+                            self.pylint_test[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
+
+        for issue in self.pylint_test:
+             if self.pylint_test[issue] not in self.pylint_pretest.values():
+                 self.fail('Errors in your Python code were encountered',
+                           'Correct the lines introduced by your patch',
+                           data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])])
diff --git a/poky/meta/recipes-bsp/alsa-state/alsa-state.bb b/poky/meta/recipes-bsp/alsa-state/alsa-state.bb
index 27b2ecc..bd7f610 100644
--- a/poky/meta/recipes-bsp/alsa-state/alsa-state.bb
+++ b/poky/meta/recipes-bsp/alsa-state/alsa-state.bb
@@ -14,7 +14,6 @@
     file://alsa-state-init;beginline=3;endline=4;md5=3ff7ecbf534d7d503941abe8e268ef50 \
 "
 PV = "0.2.0"
-PR = "r5"
 
 SRC_URI = "\
   file://asound.conf \
diff --git a/poky/meta/recipes-bsp/formfactor/formfactor_0.0.bb b/poky/meta/recipes-bsp/formfactor/formfactor_0.0.bb
index ea1fa4c..1eaf307 100644
--- a/poky/meta/recipes-bsp/formfactor/formfactor_0.0.bb
+++ b/poky/meta/recipes-bsp/formfactor/formfactor_0.0.bb
@@ -5,7 +5,6 @@
 SECTION = "base"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r45"
 
 SRC_URI = "file://config file://machconfig"
 S = "${WORKDIR}"
diff --git a/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb b/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
index 84d09cb..3d5d127 100644
--- a/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
+++ b/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
@@ -7,7 +7,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://keymap.sh;beginline=5;endline=5;md5=829e563511c9a1d6d41f17a7a4989d6a"
 PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r31"
 
 INHIBIT_DEFAULT_DEPS = "1"
 
diff --git a/poky/meta/recipes-bsp/libacpi/libacpi_0.2.bb b/poky/meta/recipes-bsp/libacpi/libacpi_0.2.bb
index 6d4be76..6aae34b 100644
--- a/poky/meta/recipes-bsp/libacpi/libacpi_0.2.bb
+++ b/poky/meta/recipes-bsp/libacpi/libacpi_0.2.bb
@@ -5,7 +5,6 @@
 HOMEPAGE = "http://www.ngolde.de/libacpi.html"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=fec17f82f16630adf2dfb7d2a46f21c5"
-PR = "r6"
 
 SRC_URI = "http://www.ngolde.de/download/libacpi-${PV}.tar.gz \
 	   file://makefile-fix.patch \
diff --git a/poky/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb b/poky/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
index a34fb4e..63edcbd 100644
--- a/poky/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
+++ b/poky/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
@@ -10,7 +10,6 @@
 			file://src/lrz.c;beginline=1;endline=10;md5=5276956373ff7d8758837f6399a1045f"
 SECTION = "console/network"
 DEPENDS = ""
-PR = "r6"
 
 SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
            file://autotools-update.patch \
diff --git a/poky/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb b/poky/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
index 2c3ade9..c7b95e5 100644
--- a/poky/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
+++ b/poky/meta/recipes-bsp/pm-utils/pm-utils_1.4.1.bb
@@ -6,7 +6,6 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
                     file://src/pm-pmu.c;beginline=1;endline=22;md5=3c1ddbc54e735fb4a0386e14c78a3147"
 
-PR = "r1"
 
 SRC_URI = "http://pm-utils.freedesktop.org/releases/pm-utils-${PV}.tar.gz"
 
diff --git a/poky/meta/recipes-bsp/setserial/setserial_2.17.bb b/poky/meta/recipes-bsp/setserial/setserial_2.17.bb
index 8e4bb62..98ab451 100644
--- a/poky/meta/recipes-bsp/setserial/setserial_2.17.bb
+++ b/poky/meta/recipes-bsp/setserial/setserial_2.17.bb
@@ -5,7 +5,6 @@
 
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://version.h;beginline=1;endline=6;md5=2e7c59cb9e57e356ae81f50f4e4dfd99"
-PR = "r3"
 
 DEPENDS += "groff-native"
 
diff --git a/poky/meta/recipes-bsp/usbinit/usbinit.bb b/poky/meta/recipes-bsp/usbinit/usbinit.bb
index ffaca4b..3a50b83 100644
--- a/poky/meta/recipes-bsp/usbinit/usbinit.bb
+++ b/poky/meta/recipes-bsp/usbinit/usbinit.bb
@@ -7,7 +7,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
 
-PR = "r3"
 
 SRC_URI = "file://usb-gether \
            file://COPYING.GPL"
diff --git a/poky/meta/recipes-bsp/v86d/v86d_0.1.10.bb b/poky/meta/recipes-bsp/v86d/v86d_0.1.10.bb
index b4fe362..6151f0a 100644
--- a/poky/meta/recipes-bsp/v86d/v86d_0.1.10.bb
+++ b/poky/meta/recipes-bsp/v86d/v86d_0.1.10.bb
@@ -7,7 +7,6 @@
 LIC_FILES_CHKSUM = "file://README;md5=94ac1971e4f2309dc322d598e7b1f7dd"
 
 RRECOMMENDS:${PN} = "kernel-module-uvesafb"
-PR = "r2"
 
 SRC_URI = "http://snapshot.debian.org/archive/debian/20110427T035506Z/pool/main/v/${BPN}/${BPN}_${PV}.orig.tar.gz \
            file://Update-x86emu-from-X.org.patch \
diff --git a/poky/meta/recipes-connectivity/bind/bind_9.18.18.bb b/poky/meta/recipes-connectivity/bind/bind_9.18.18.bb
deleted file mode 100644
index e74e685..0000000
--- a/poky/meta/recipes-connectivity/bind/bind_9.18.18.bb
+++ /dev/null
@@ -1,113 +0,0 @@
-SUMMARY = "ISC Internet Domain Name Server"
-HOMEPAGE = "https://www.isc.org/bind/"
-DESCRIPTION = "BIND 9 provides a full-featured Domain Name Server system"
-SECTION = "console/network"
-
-LICENSE = "MPL-2.0"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=c7a0b6d9a1b692a5da9af9d503671f43"
-
-DEPENDS = "openssl libcap zlib libuv"
-
-SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.xz \
-           file://conf.patch \
-           file://named.service \
-           file://bind9 \
-           file://generate-rndc-key.sh \
-           file://make-etc-initd-bind-stop-work.patch \
-           file://init.d-add-support-for-read-only-rootfs.patch \
-           file://bind-ensure-searching-for-json-headers-searches-sysr.patch \
-           file://0001-named-lwresd-V-and-start-log-hide-build-options.patch \
-           file://0001-avoid-start-failure-with-bind-user.patch \
-           "
-
-SRC_URI[sha256sum] = "d735cdc127a6c5709bde475b5bf16fa2133f36fdba202f7c3c37d134e5192160"
-
-UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
-# follow the ESV versions divisible by 2
-UPSTREAM_CHECK_REGEX = "(?P<pver>9.(\d*[02468])+(\.\d+)+(-P\d+)*)/"
-
-# Issue only affects dhcpd with recent bind versions. We don't ship dhcpd anymore
-# so the issue doesn't affect us.
-CVE_STATUS[CVE-2019-6470] = "not-applicable-config: Issue only affects dhcpd with recent bind versions and we don't ship dhcpd anymore."
-
-inherit autotools update-rc.d systemd useradd pkgconfig multilib_header update-alternatives
-
-# PACKAGECONFIGs readline and libedit should NOT be set at same time
-PACKAGECONFIG ?= "readline"
-PACKAGECONFIG[httpstats] = "--with-libxml2=${STAGING_DIR_HOST}${prefix},--without-libxml2,libxml2"
-PACKAGECONFIG[readline] = "--with-readline=readline,,readline"
-PACKAGECONFIG[libedit] = "--with-readline=libedit,,libedit"
-PACKAGECONFIG[dns-over-http] = "--enable-doh,--disable-doh,nghttp2"
-
-EXTRA_OECONF = " --disable-auto-validation \
-                 --with-gssapi=no --with-lmdb=no --with-zlib \
-                 --sysconfdir=${sysconfdir}/bind \
-                 --with-openssl=${STAGING_DIR_HOST}${prefix} \
-               "
-LDFLAGS:append = " -lz"
-
-# dhcp needs .la so keep them
-REMOVE_LIBTOOL_LA = "0"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM:${PN} = "--system --home ${localstatedir}/cache/bind --no-create-home \
-                       --user-group bind"
-
-INITSCRIPT_NAME = "bind"
-INITSCRIPT_PARAMS = "defaults"
-
-SYSTEMD_SERVICE:${PN} = "named.service"
-
-do_install:append() {
-
-	install -d -o bind "${D}${localstatedir}/cache/bind"
-	install -d "${D}${sysconfdir}/bind"
-	install -d "${D}${sysconfdir}/init.d"
-	install -m 644 ${S}/conf/* "${D}${sysconfdir}/bind/"
-	install -m 755 "${S}/init.d" "${D}${sysconfdir}/init.d/bind"
-
-	# Install systemd related files
-	install -d ${D}${sbindir}
-	install -m 755 ${WORKDIR}/generate-rndc-key.sh ${D}${sbindir}
-	install -d ${D}${systemd_system_unitdir}
-	install -m 0644 ${WORKDIR}/named.service ${D}${systemd_system_unitdir}
-	sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
-	       -e 's,@SBINDIR@,${sbindir},g' \
-	       ${D}${systemd_system_unitdir}/named.service
-
-	install -d ${D}${sysconfdir}/default
-	install -m 0644 ${WORKDIR}/bind9 ${D}${sysconfdir}/default
-
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-		install -d ${D}${sysconfdir}/tmpfiles.d
-		echo "d /run/named 0755 bind bind - -" > ${D}${sysconfdir}/tmpfiles.d/bind.conf
-	fi
-}
-
-CONFFILES:${PN} = " \
-	${sysconfdir}/bind/named.conf \
-	${sysconfdir}/bind/named.conf.local \
-	${sysconfdir}/bind/named.conf.options \
-	${sysconfdir}/bind/db.0 \
-	${sysconfdir}/bind/db.127 \
-	${sysconfdir}/bind/db.empty \
-	${sysconfdir}/bind/db.local \
-	${sysconfdir}/bind/db.root \
-	"
-
-ALTERNATIVE:${PN}-utils = "nslookup"
-ALTERNATIVE_LINK_NAME[nslookup] = "${bindir}/nslookup"
-ALTERNATIVE_PRIORITY = "100"
-
-PACKAGE_BEFORE_PN += "${PN}-utils"
-FILES:${PN}-utils = "${bindir}/host ${bindir}/dig ${bindir}/mdig ${bindir}/nslookup ${bindir}/nsupdate"
-FILES:${PN}-dev += "${bindir}/isc-config.h"
-FILES:${PN} += "${sbindir}/generate-rndc-key.sh"
-
-PACKAGE_BEFORE_PN += "${PN}-libs"
-# special arrangement below due to
-# https://github.com/isc-projects/bind9/commit/0e25af628cd776f98c04fc4cc59048f5448f6c88
-FILES_SOLIBSDEV = "${libdir}/*[!0-9].so ${libdir}/libbind9.so"
-FILES:${PN}-libs = "${libdir}/named/*.so* ${libdir}/*-${PV}.so"
-
-DEV_PKG_DEPENDENCY = ""
diff --git a/poky/meta/recipes-connectivity/bind/bind_9.18.19.bb b/poky/meta/recipes-connectivity/bind/bind_9.18.19.bb
new file mode 100644
index 0000000..8124c5c
--- /dev/null
+++ b/poky/meta/recipes-connectivity/bind/bind_9.18.19.bb
@@ -0,0 +1,113 @@
+SUMMARY = "ISC Internet Domain Name Server"
+HOMEPAGE = "https://www.isc.org/bind/"
+DESCRIPTION = "BIND 9 provides a full-featured Domain Name Server system"
+SECTION = "console/network"
+
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=c7a0b6d9a1b692a5da9af9d503671f43"
+
+DEPENDS = "openssl libcap zlib libuv"
+
+SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.xz \
+           file://conf.patch \
+           file://named.service \
+           file://bind9 \
+           file://generate-rndc-key.sh \
+           file://make-etc-initd-bind-stop-work.patch \
+           file://init.d-add-support-for-read-only-rootfs.patch \
+           file://bind-ensure-searching-for-json-headers-searches-sysr.patch \
+           file://0001-named-lwresd-V-and-start-log-hide-build-options.patch \
+           file://0001-avoid-start-failure-with-bind-user.patch \
+           "
+
+SRC_URI[sha256sum] = "115e09c05439bebade1d272eda08fa88eb3b60129edef690588c87a4d27612cc"
+
+UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
+# follow the ESV versions divisible by 2
+UPSTREAM_CHECK_REGEX = "(?P<pver>9.(\d*[02468])+(\.\d+)+(-P\d+)*)/"
+
+# Issue only affects dhcpd with recent bind versions. We don't ship dhcpd anymore
+# so the issue doesn't affect us.
+CVE_STATUS[CVE-2019-6470] = "not-applicable-config: Issue only affects dhcpd with recent bind versions and we don't ship dhcpd anymore."
+
+inherit autotools update-rc.d systemd useradd pkgconfig multilib_header update-alternatives
+
+# PACKAGECONFIGs readline and libedit should NOT be set at same time
+PACKAGECONFIG ?= "readline"
+PACKAGECONFIG[httpstats] = "--with-libxml2=${STAGING_DIR_HOST}${prefix},--without-libxml2,libxml2"
+PACKAGECONFIG[readline] = "--with-readline=readline,,readline"
+PACKAGECONFIG[libedit] = "--with-readline=libedit,,libedit"
+PACKAGECONFIG[dns-over-http] = "--enable-doh,--disable-doh,nghttp2"
+
+EXTRA_OECONF = " --disable-auto-validation \
+                 --with-gssapi=no --with-lmdb=no --with-zlib \
+                 --sysconfdir=${sysconfdir}/bind \
+                 --with-openssl=${STAGING_DIR_HOST}${prefix} \
+               "
+LDFLAGS:append = " -lz"
+
+# dhcp needs .la so keep them
+REMOVE_LIBTOOL_LA = "0"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM:${PN} = "--system --home ${localstatedir}/cache/bind --no-create-home \
+                       --user-group bind"
+
+INITSCRIPT_NAME = "bind"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_SERVICE:${PN} = "named.service"
+
+do_install:append() {
+
+	install -d -o bind "${D}${localstatedir}/cache/bind"
+	install -d "${D}${sysconfdir}/bind"
+	install -d "${D}${sysconfdir}/init.d"
+	install -m 644 ${S}/conf/* "${D}${sysconfdir}/bind/"
+	install -m 755 "${S}/init.d" "${D}${sysconfdir}/init.d/bind"
+
+	# Install systemd related files
+	install -d ${D}${sbindir}
+	install -m 755 ${WORKDIR}/generate-rndc-key.sh ${D}${sbindir}
+	install -d ${D}${systemd_system_unitdir}
+	install -m 0644 ${WORKDIR}/named.service ${D}${systemd_system_unitdir}
+	sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+	       -e 's,@SBINDIR@,${sbindir},g' \
+	       ${D}${systemd_system_unitdir}/named.service
+
+	install -d ${D}${sysconfdir}/default
+	install -m 0644 ${WORKDIR}/bind9 ${D}${sysconfdir}/default
+
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+		install -d ${D}${sysconfdir}/tmpfiles.d
+		echo "d /run/named 0755 bind bind - -" > ${D}${sysconfdir}/tmpfiles.d/bind.conf
+	fi
+}
+
+CONFFILES:${PN} = " \
+	${sysconfdir}/bind/named.conf \
+	${sysconfdir}/bind/named.conf.local \
+	${sysconfdir}/bind/named.conf.options \
+	${sysconfdir}/bind/db.0 \
+	${sysconfdir}/bind/db.127 \
+	${sysconfdir}/bind/db.empty \
+	${sysconfdir}/bind/db.local \
+	${sysconfdir}/bind/db.root \
+	"
+
+ALTERNATIVE:${PN}-utils = "nslookup"
+ALTERNATIVE_LINK_NAME[nslookup] = "${bindir}/nslookup"
+ALTERNATIVE_PRIORITY = "100"
+
+PACKAGE_BEFORE_PN += "${PN}-utils"
+FILES:${PN}-utils = "${bindir}/host ${bindir}/dig ${bindir}/mdig ${bindir}/nslookup ${bindir}/nsupdate"
+FILES:${PN}-dev += "${bindir}/isc-config.h"
+FILES:${PN} += "${sbindir}/generate-rndc-key.sh"
+
+PACKAGE_BEFORE_PN += "${PN}-libs"
+# special arrangement below due to
+# https://github.com/isc-projects/bind9/commit/0e25af628cd776f98c04fc4cc59048f5448f6c88
+FILES_SOLIBSDEV = "${libdir}/*[!0-9].so ${libdir}/libbind9.so"
+FILES:${PN}-libs = "${libdir}/named/*.so* ${libdir}/*-${PV}.so"
+
+DEV_PKG_DEPENDENCY = ""
diff --git a/poky/meta/recipes-connectivity/connman/connman-conf.bb b/poky/meta/recipes-connectivity/connman/connman-conf.bb
index 7959ed8..a1a0e08 100644
--- a/poky/meta/recipes-connectivity/connman/connman-conf.bb
+++ b/poky/meta/recipes-connectivity/connman/connman-conf.bb
@@ -4,7 +4,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
 
-PR = "r2"
 
 SRC_URI = "file://main.conf \
           "
diff --git a/poky/meta/recipes-connectivity/iproute2/iproute2/0001-bridge-mdb.c-include-limits.h.patch b/poky/meta/recipes-connectivity/iproute2/iproute2/0001-bridge-mdb.c-include-limits.h.patch
deleted file mode 100644
index f9a0e35..0000000
--- a/poky/meta/recipes-connectivity/iproute2/iproute2/0001-bridge-mdb.c-include-limits.h.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From b13f04c0c685b6d2474aa7d97e191531f327bc45 Mon Sep 17 00:00:00 2001
-From: Trevor Gamblin <tgamblin@baylibre.com>
-Date: Thu, 20 Jul 2023 14:32:23 -0400
-Subject: [PATCH] bridge/mdb.c: include limits.h
-
-Upstream-Status: Submitted
-(https://lore.kernel.org/netdev/20230720203726.2316251-1-tgamblin@baylibre.com/)
-
-While building iproute2 6.4.0 with musl using Yocto Project, errors such
-as the following were encountered:
-
-| mdb.c: In function 'mdb_parse_vni':
-| mdb.c:666:47: error: 'ULONG_MAX' undeclared (first use in this function)
-|   666 |         if ((endptr && *endptr) || vni_num == ULONG_MAX)
-|       |                                               ^~~~~~~~~
-| mdb.c:666:47: note: 'ULONG_MAX' is defined in header '<limits.h>'; did you forget to '#include <limits.h>'?
-
-Include limits.h in bridge/mdb.c to fix this issue. This change is based
-on one in Alpine Linux, but the author there had no plans to submit:
-https://git.alpinelinux.org/aports/commit/main/iproute2/include.patch?id=bd46efb8a8da54948639cebcfa5b37bd608f1069
-
-Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
----
- bridge/mdb.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/bridge/mdb.c b/bridge/mdb.c
-index fbb4f704..18793458 100644
---- a/bridge/mdb.c
-+++ b/bridge/mdb.c
-@@ -15,6 +15,7 @@
- #include <string.h>
- #include <arpa/inet.h>
- #include <netdb.h>
-+#include <limits.h>
- 
- #include "libnetlink.h"
- #include "utils.h"
--- 
-2.41.0
-
diff --git a/poky/meta/recipes-connectivity/iproute2/iproute2_6.4.0.bb b/poky/meta/recipes-connectivity/iproute2/iproute2_6.4.0.bb
deleted file mode 100644
index 32e2f81..0000000
--- a/poky/meta/recipes-connectivity/iproute2/iproute2_6.4.0.bb
+++ /dev/null
@@ -1,104 +0,0 @@
-SUMMARY = "TCP / IP networking and traffic control utilities"
-DESCRIPTION = "Iproute2 is a collection of utilities for controlling \
-TCP / IP networking and traffic control in Linux.  Of the utilities ip \
-and tc are the most important.  ip controls IPv4 and IPv6 \
-configuration and tc stands for traffic control."
-HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2"
-SECTION = "base"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
-                    "
-
-DEPENDS = "flex-native bison-native iptables libcap"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
-           file://0001-libc-compat.h-add-musl-workaround.patch \
-           file://0001-bridge-mdb.c-include-limits.h.patch \
-           "
-
-SRC_URI[sha256sum] = "4c51b8decbc7e4da159ffb066f590cfb93dbf9af7ff86b1647ce42b7c179a272"
-
-inherit update-alternatives bash-completion pkgconfig
-
-PACKAGECONFIG ??= "tipc elf devlink"
-PACKAGECONFIG[tipc] = ",,libmnl,"
-PACKAGECONFIG[elf] = ",,elfutils,"
-PACKAGECONFIG[devlink] = ",,libmnl,"
-PACKAGECONFIG[rdma] = ",,libmnl,"
-PACKAGECONFIG[selinux] = ",,libselinux"
-
-IPROUTE2_MAKE_SUBDIRS = "lib tc ip bridge misc genl ${@bb.utils.filter('PACKAGECONFIG', 'devlink tipc rdma', d)}"
-
-# CFLAGS are computed in Makefile and reference CCOPTS
-#
-EXTRA_OEMAKE = "\
-    CC='${CC}' \
-    KERNEL_INCLUDE=${STAGING_INCDIR} \
-    DOCDIR=${docdir}/iproute2 \
-    SUBDIRS='${IPROUTE2_MAKE_SUBDIRS}' \
-    SBINDIR='${base_sbindir}' \
-    LIBDIR='${libdir}' \
-    CCOPTS='${CFLAGS}' \
-"
-
-do_configure:append () {
-    sh configure ${STAGING_INCDIR}
-    # Explicitly disable ATM support
-    sed -i -e '/TC_CONFIG_ATM/d' config.mk
-}
-
-do_install () {
-    oe_runmake DESTDIR=${D} install
-    mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
-    install -d ${D}${datadir}
-    mv ${D}/share/* ${D}${datadir}/ || true
-    rm ${D}/share -rf || true
-}
-
-# The .so files in iproute2-tc are modules, not traditional libraries
-INSANE_SKIP:${PN}-tc = "dev-so"
-
-IPROUTE2_PACKAGES =+ "\
-    ${PN}-devlink \
-    ${PN}-genl \
-    ${PN}-ifstat \
-    ${PN}-ip \
-    ${PN}-lnstat \
-    ${PN}-nstat \
-    ${PN}-routel \
-    ${PN}-rtacct \
-    ${PN}-ss \
-    ${PN}-tc \
-    ${PN}-tipc \
-    ${PN}-rdma \
-"
-
-PACKAGE_BEFORE_PN = "${IPROUTE2_PACKAGES}"
-RDEPENDS:${PN} += "${PN}-ip"
-
-FILES:${PN}-tc = "${base_sbindir}/tc* \
-                  ${libdir}/tc/*.so"
-FILES:${PN}-lnstat = "${base_sbindir}/lnstat \
-                      ${base_sbindir}/ctstat \
-                      ${base_sbindir}/rtstat"
-FILES:${PN}-ifstat = "${base_sbindir}/ifstat"
-FILES:${PN}-ip = "${base_sbindir}/ip.${PN} ${sysconfdir}/iproute2"
-FILES:${PN}-genl = "${base_sbindir}/genl"
-FILES:${PN}-rtacct = "${base_sbindir}/rtacct"
-FILES:${PN}-nstat = "${base_sbindir}/nstat"
-FILES:${PN}-ss = "${base_sbindir}/ss"
-FILES:${PN}-tipc = "${base_sbindir}/tipc"
-FILES:${PN}-devlink = "${base_sbindir}/devlink"
-FILES:${PN}-rdma = "${base_sbindir}/rdma"
-FILES:${PN}-routel = "${base_sbindir}/routel"
-
-RDEPENDS:${PN}-routel = "python3-core"
-
-ALTERNATIVE:${PN}-ip = "ip"
-ALTERNATIVE_TARGET[ip] = "${base_sbindir}/ip.${BPN}"
-ALTERNATIVE_LINK_NAME[ip] = "${base_sbindir}/ip"
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE:${PN}-tc = "tc"
-ALTERNATIVE_LINK_NAME[tc] = "${base_sbindir}/tc"
-ALTERNATIVE_PRIORITY_${PN}-tc = "100"
diff --git a/poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb b/poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb
new file mode 100644
index 0000000..2b28b10
--- /dev/null
+++ b/poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb
@@ -0,0 +1,104 @@
+SUMMARY = "TCP / IP networking and traffic control utilities"
+DESCRIPTION = "Iproute2 is a collection of utilities for controlling \
+TCP / IP networking and traffic control in Linux.  Of the utilities ip \
+and tc are the most important.  ip controls IPv4 and IPv6 \
+configuration and tc stands for traffic control."
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
+                    "
+
+DEPENDS = "flex-native bison-native iptables libcap"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
+           file://0001-libc-compat.h-add-musl-workaround.patch \
+           "
+
+SRC_URI[sha256sum] = "a70179085fa1b96d3c33b040c809b75e2b57563adc505a4ad05e2609df373463"
+
+inherit update-alternatives bash-completion pkgconfig
+
+PACKAGECONFIG ??= "tipc elf devlink"
+PACKAGECONFIG[tipc] = ",,libmnl,"
+PACKAGECONFIG[elf] = ",,elfutils,"
+PACKAGECONFIG[devlink] = ",,libmnl,"
+PACKAGECONFIG[rdma] = ",,libmnl,"
+PACKAGECONFIG[selinux] = ",,libselinux"
+
+IPROUTE2_MAKE_SUBDIRS = "lib tc ip bridge misc genl ${@bb.utils.filter('PACKAGECONFIG', 'devlink tipc rdma', d)}"
+
+# CFLAGS are computed in Makefile and reference CCOPTS
+#
+EXTRA_OEMAKE = "\
+    CC='${CC}' \
+    KERNEL_INCLUDE=${STAGING_INCDIR} \
+    DOCDIR=${docdir}/iproute2 \
+    SUBDIRS='${IPROUTE2_MAKE_SUBDIRS}' \
+    SBINDIR='${base_sbindir}' \
+    CONF_USR_DIR='${libdir}/iproute2' \
+    LIBDIR='${libdir}' \
+    CCOPTS='${CFLAGS}' \
+"
+
+do_configure:append () {
+    sh configure ${STAGING_INCDIR}
+    # Explicitly disable ATM support
+    sed -i -e '/TC_CONFIG_ATM/d' config.mk
+}
+
+do_install () {
+    oe_runmake DESTDIR=${D} install
+    mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
+    install -d ${D}${datadir}
+    mv ${D}/share/* ${D}${datadir}/ || true
+    rm ${D}/share -rf || true
+}
+
+# The .so files in iproute2-tc are modules, not traditional libraries
+INSANE_SKIP:${PN}-tc = "dev-so"
+
+IPROUTE2_PACKAGES =+ "\
+    ${PN}-devlink \
+    ${PN}-genl \
+    ${PN}-ifstat \
+    ${PN}-ip \
+    ${PN}-lnstat \
+    ${PN}-nstat \
+    ${PN}-routel \
+    ${PN}-rtacct \
+    ${PN}-ss \
+    ${PN}-tc \
+    ${PN}-tipc \
+    ${PN}-rdma \
+"
+
+PACKAGE_BEFORE_PN = "${IPROUTE2_PACKAGES}"
+RDEPENDS:${PN} += "${PN}-ip"
+
+FILES:${PN}-tc = "${base_sbindir}/tc* \
+                  ${libdir}/tc/*.so"
+FILES:${PN}-lnstat = "${base_sbindir}/lnstat \
+                      ${base_sbindir}/ctstat \
+                      ${base_sbindir}/rtstat"
+FILES:${PN}-ifstat = "${base_sbindir}/ifstat"
+FILES:${PN}-ip = "${base_sbindir}/ip.* ${libdir}/iproute2"
+FILES:${PN}-genl = "${base_sbindir}/genl"
+FILES:${PN}-rtacct = "${base_sbindir}/rtacct"
+FILES:${PN}-nstat = "${base_sbindir}/nstat"
+FILES:${PN}-ss = "${base_sbindir}/ss"
+FILES:${PN}-tipc = "${base_sbindir}/tipc"
+FILES:${PN}-devlink = "${base_sbindir}/devlink"
+FILES:${PN}-rdma = "${base_sbindir}/rdma"
+FILES:${PN}-routel = "${base_sbindir}/routel"
+
+RDEPENDS:${PN}-routel = "python3-core"
+
+ALTERNATIVE:${PN}-ip = "ip"
+ALTERNATIVE_TARGET[ip] = "${base_sbindir}/ip.${BPN}"
+ALTERNATIVE_LINK_NAME[ip] = "${base_sbindir}/ip"
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE:${PN}-tc = "tc"
+ALTERNATIVE_LINK_NAME[tc] = "${base_sbindir}/tc"
+ALTERNATIVE_PRIORITY_${PN}-tc = "100"
diff --git a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
index c01415d..ebfe64b 100644
--- a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
+++ b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-mountd.service
@@ -12,6 +12,7 @@
 EnvironmentFile=-@SYSCONFDIR@/nfs-utils.conf
 ExecStart=@SBINDIR@/rpc.mountd -F $MOUNTD_OPTS
 LimitNOFILE=@HIGH_RLIMIT_NOFILE@
+StateDirectory=nfs
 
 [Install]
 WantedBy=multi-user.target
diff --git a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
index 5c845b7..15ceee0 100644
--- a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
+++ b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-server.service
@@ -18,6 +18,7 @@
 ExecStopPost=@SBINDIR@/exportfs -f
 ExecReload=@SBINDIR@/exportfs -r
 RemainAfterExit=yes
+StateDirectory=nfs
 
 [Install]
 WantedBy=multi-user.target
diff --git a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
index 4fa64e1..b519194 100644
--- a/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
+++ b/poky/meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-statd.service
@@ -4,11 +4,13 @@
 Conflicts=umount.target
 Requires=nss-lookup.target rpcbind.service
 After=network.target nss-lookup.target rpcbind.service
+ConditionPathExists=@SYSCONFDIR@/exports
 
 [Service]
 EnvironmentFile=-@SYSCONFDIR@/nfs-utils.conf
 ExecStart=@SBINDIR@/rpc.statd -F $STATD_OPTS
 LimitNOFILE=@HIGH_RLIMIT_NOFILE@
+StateDirectory=nfs
 
 [Install]
 WantedBy=multi-user.target
diff --git a/poky/meta/recipes-connectivity/openssh/openssh/0001-openssh-regress-Makefile-print-logs-if-test-fails.patch b/poky/meta/recipes-connectivity/openssh/openssh/0001-openssh-regress-Makefile-print-logs-if-test-fails.patch
deleted file mode 100644
index baa68dc..0000000
--- a/poky/meta/recipes-connectivity/openssh/openssh/0001-openssh-regress-Makefile-print-logs-if-test-fails.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 554f7baed050f89ffc2a7192d3071e8c5420f6d3 Mon Sep 17 00:00:00 2001
-From: Mikko Rapeli <mikko.rapeli@linaro.org>
-Date: Fri, 25 Aug 2023 10:35:28 +0000
-Subject: [PATCH] openssh regress/Makefile: print logs if test fails
-
-Some tests are failing in CI runs and reproduction has failed. Print
-the captured sshd and ssh client logs if test fails. This should
-help to fix the root causes.
-
-Reference: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15178
-
-Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
----
- regress/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Upstream-Status: Submitted [https://github.com/openssh/openssh-portable/pull/437]
-
-diff --git a/regress/Makefile b/regress/Makefile
-index d80bf59..a972dff 100644
---- a/regress/Makefile
-+++ b/regress/Makefile
-@@ -229,7 +229,7 @@ t-exec:	${LTESTS:=.sh}
- 		done; \
- 		if [ "x$${skip}" = "xno" ]; then \
- 			echo "run test $${TEST}" ... 1>&2; \
--			(env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \
-+			(env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || (echo return value: $$?; echo capturing logs; cat *.log; exit 1); \
- 		else \
- 			echo skip test $${TEST} 1>&2; \
- 		fi; \
--- 
-2.34.1
-
diff --git a/poky/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch b/poky/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch
new file mode 100644
index 0000000..2c14014
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssh/openssh/0001-regress-banner.sh-log-input-and-output-files-on-erro.patch
@@ -0,0 +1,61 @@
+From f5a4dacc987ca548fc86577c2dba121c86da3c34 Mon Sep 17 00:00:00 2001
+From: Mikko Rapeli <mikko.rapeli@linaro.org>
+Date: Mon, 11 Sep 2023 09:55:21 +0100
+Subject: [PATCH] regress/banner.sh: log input and output files on error
+
+Some test environments like yocto with qemu are seeing these
+tests failing. There may be additional error messages in the
+stderr of ssh cloent command. busybox cmp shows this error when
+first input file has less new line characters then second
+input file:
+
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+
+Logging the full banner.out will show what other error messages
+are captured in addition of the expected banner.
+
+Full log of a failing banner test runs is:
+
+run test banner.sh ...
+test banner: missing banner file
+test banner: size 0
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+banner size 0 mismatch
+test banner: size 10
+test banner: size 100
+cmp: EOF on /usr/lib/openssh/ptest/regress/banner.in
+banner size 100 mismatch
+test banner: size 1000
+test banner: size 10000
+test banner: size 100000
+test banner: suppress banner (-q)
+FAIL:  banner
+return value: 1
+
+See: https://bugzilla.yoctoproject.org/show_bug.cgi?id=15178
+
+Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
+---
+ regress/banner.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+Upstream-Status: Denied [https://github.com/openssh/openssh-portable/pull/437]
+
+diff --git a/regress/banner.sh b/regress/banner.sh
+index a84feb5a..de84957a 100644
+--- a/regress/banner.sh
++++ b/regress/banner.sh
+@@ -32,7 +32,9 @@ for s in 0 10 100 1000 10000 100000 ; do
+ 	verbose "test $tid: size $s"
+ 	( ${SSH} -F $OBJ/ssh_proxy otherhost true 2>$OBJ/banner.out && \
+ 		cmp $OBJ/banner.in $OBJ/banner.out ) || \
+-		fail "banner size $s mismatch"
++		( verbose "Contents of $OBJ/banner.in:"; cat $OBJ/banner.in; \
++		  verbose "Contents of $OBJ/banner.out:"; cat $OBJ/banner.out; \
++		  fail "banner size $s mismatch" )
+ done
+ 
+ trace "test suppress banner (-q)"
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-connectivity/openssh/openssh/run-ptest b/poky/meta/recipes-connectivity/openssh/openssh/run-ptest
index 8a9b770..1e6eec5 100755
--- a/poky/meta/recipes-connectivity/openssh/openssh/run-ptest
+++ b/poky/meta/recipes-connectivity/openssh/openssh/run-ptest
@@ -4,6 +4,20 @@
 export SKIP_UNIT=1
 
 cd regress
+
+# copied from openssh-portable/.github/run_test.sh
+output_failed_logs() {
+    for i in failed*.log; do
+        if [ -f "$i" ]; then
+            echo -------------------------------------------------------------------------
+            echo LOGFILE $i
+            cat $i
+            echo -------------------------------------------------------------------------
+        fi
+    done
+}
+trap output_failed_logs 0
+
 sed -i "/\t\tagent-ptrace /d" Makefile
 make -k BUILDDIR=`pwd`/.. .OBJDIR=`pwd` .CURDIR=`pwd` SUDO="sudo" tests \
         | sed -u -e 's/^skipped/SKIP: /g' -e 's/^ok /PASS: /g' -e 's/^failed/FAIL: /g'
diff --git a/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb b/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb
index 2c85780..a38d9c2 100644
--- a/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb
+++ b/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb
@@ -24,7 +24,7 @@
            file://fix-potential-signed-overflow-in-pointer-arithmatic.patch \
            file://sshd_check_keys \
            file://add-test-support-for-busybox.patch \
-           file://0001-openssh-regress-Makefile-print-logs-if-test-fails.patch \
+           file://0001-regress-banner.sh-log-input-and-output-files-on-erro.patch \
            "
 SRC_URI[sha256sum] = "3608fd9088db2163ceb3e600c85ab79d0de3d221e59192ea1923e23263866a85"
 
diff --git a/poky/meta/recipes-connectivity/openssl/openssl/run-ptest b/poky/meta/recipes-connectivity/openssl/openssl/run-ptest
index 8dff791..c89ec5a 100644
--- a/poky/meta/recipes-connectivity/openssl/openssl/run-ptest
+++ b/poky/meta/recipes-connectivity/openssl/openssl/run-ptest
@@ -9,4 +9,4 @@
 # OPENSSL_ENGINES is relative from the test binaries
 export OPENSSL_ENGINES=../engines
 
-perl ./test/run_tests.pl $* | sed -u -r -e '/(.*) \.*.ok/ s/^/PASS: /g' -r -e '/Dubious(.*)/ s/^/FAIL: /g' -e '/(.*) \.*.skipped: (.*)/ s/^/SKIP: /g'
+{ HARNESS_JOBS=4 perl ./test/run_tests.pl $* || echo "FAIL: openssl" ; } | sed -u -r -e '/(.*) \.*.ok/ s/^/PASS: /g' -r -e '/Dubious(.*)/ s/^/FAIL: /g' -e '/(.*) \.*.skipped: (.*)/ s/^/SKIP: /g'
diff --git a/poky/meta/recipes-connectivity/openssl/openssl_3.1.2.bb b/poky/meta/recipes-connectivity/openssl/openssl_3.1.2.bb
deleted file mode 100644
index 3f77c21..0000000
--- a/poky/meta/recipes-connectivity/openssl/openssl_3.1.2.bb
+++ /dev/null
@@ -1,260 +0,0 @@
-SUMMARY = "Secure Socket Layer"
-DESCRIPTION = "Secure Socket Layer (SSL) binary and related cryptographic tools."
-HOMEPAGE = "http://www.openssl.org/"
-BUGTRACKER = "http://www.openssl.org/news/vulnerabilities.html"
-SECTION = "libs/network"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c75985e733726beaba57bc5253e96d04"
-
-SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
-           file://run-ptest \
-           file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
-           file://0001-Configure-do-not-tweak-mips-cflags.patch \
-           file://fix_random_labels.patch \
-           "
-
-SRC_URI:append:class-nativesdk = " \
-           file://environment.d-openssl.sh \
-           "
-
-SRC_URI[sha256sum] = "a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539"
-
-inherit lib_package multilib_header multilib_script ptest perlnative manpages
-MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG:class-native = ""
-PACKAGECONFIG:class-nativesdk = ""
-
-PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux,,cryptodev-module"
-PACKAGECONFIG[no-tls1] = "no-tls1"
-PACKAGECONFIG[no-tls1_1] = "no-tls1_1"
-PACKAGECONFIG[manpages] = ""
-
-B = "${WORKDIR}/build"
-do_configure[cleandirs] = "${B}"
-
-#| ./libcrypto.so: undefined reference to `getcontext'
-#| ./libcrypto.so: undefined reference to `setcontext'
-#| ./libcrypto.so: undefined reference to `makecontext'
-EXTRA_OECONF:append:libc-musl = " no-async"
-EXTRA_OECONF:append:libc-musl:powerpc64 = " no-asm"
-
-# adding devrandom prevents openssl from using getrandom() which is not available on older glibc versions
-# (native versions can be built with newer glibc, but then relocated onto a system with older glibc)
-EXTRA_OECONF:class-native = "--with-rand-seed=os,devrandom"
-EXTRA_OECONF:class-nativesdk = "--with-rand-seed=os,devrandom"
-
-# Relying on hardcoded built-in paths causes openssl-native to not be relocateable from sstate.
-CFLAGS:append:class-native = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
-CFLAGS:append:class-nativesdk = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
-
-# This allows disabling deprecated or undesirable crypto algorithms.
-# The default is to trust upstream choices.
-DEPRECATED_CRYPTO_FLAGS ?= ""
-
-do_configure () {
-	# When we upgrade glibc but not uninative we see obtuse failures in openssl. Make
-	# the issue really clear that perl isn't functional due to symbol mismatch issues.
-	cat <<- EOF > ${WORKDIR}/perltest
-	#!/usr/bin/env perl
-	use POSIX;
-	EOF
-	chmod a+x ${WORKDIR}/perltest
-	${WORKDIR}/perltest
-
-	os=${HOST_OS}
-	case $os in
-	linux-gnueabi |\
-	linux-gnuspe |\
-	linux-musleabi |\
-	linux-muslspe |\
-	linux-musl )
-		os=linux
-		;;
-	*)
-		;;
-	esac
-	target="$os-${HOST_ARCH}"
-	case $target in
-	linux-arc | linux-microblaze*)
-		target=linux-latomic
-		;;
-	linux-arm*)
-		target=linux-armv4
-		;;
-	linux-aarch64*)
-		target=linux-aarch64
-		;;
-	linux-i?86 | linux-viac3)
-		target=linux-x86
-		;;
-	linux-gnux32-x86_64 | linux-muslx32-x86_64 )
-		target=linux-x32
-		;;
-	linux-gnu64-x86_64)
-		target=linux-x86_64
-		;;
-	linux-mips | linux-mipsel)
-		# specifying TARGET_CC_ARCH prevents openssl from (incorrectly) adding target architecture flags
-		target="linux-mips32 ${TARGET_CC_ARCH}"
-		;;
-	linux-gnun32-mips*)
-		target=linux-mips64
-		;;
-	linux-*-mips64 | linux-mips64 | linux-*-mips64el | linux-mips64el)
-		target=linux64-mips64
-		;;
-	linux-nios2* | linux-sh3 | linux-sh4 | linux-arc*)
-		target=linux-generic32
-		;;
-	linux-powerpc)
-		target=linux-ppc
-		;;
-	linux-powerpc64)
-		target=linux-ppc64
-		;;
-	linux-powerpc64le)
-		target=linux-ppc64le
-		;;
-	linux-riscv32)
-		target=linux-latomic
-		;;
-	linux-riscv64)
-		target=linux-generic64
-		;;
-	linux-sparc | linux-supersparc)
-		target=linux-sparcv9
-		;;
-	mingw32-x86_64)
-		target=mingw64
-		;;
-	esac
-
-	useprefix=${prefix}
-	if [ "x$useprefix" = "x" ]; then
-		useprefix=/
-	fi
-	# WARNING: do not set compiler/linker flags (-I/-D etc.) in EXTRA_OECONF, as they will fully replace the
-	# environment variables set by bitbake. Adjust the environment variables instead.
-	PERLEXTERNAL="$(realpath ${S}/external/perl/Text-Template-*/lib)"
-	test -d "$PERLEXTERNAL" || bberror "PERLEXTERNAL '$PERLEXTERNAL' not found!"
-	HASHBANGPERL="/usr/bin/env perl" PERL=perl PERL5LIB="$PERLEXTERNAL" \
-	perl ${S}/Configure ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS} ${DEPRECATED_CRYPTO_FLAGS} --prefix=$useprefix --openssldir=${libdir}/ssl-3 --libdir=${libdir} $target
-	perl ${B}/configdata.pm --dump
-}
-
-do_install () {
-	oe_runmake DESTDIR="${D}" MANDIR="${mandir}" MANSUFFIX=ssl install_sw install_ssldirs ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'install_docs', '', d)}
-
-	oe_multilib_header openssl/opensslconf.h
-	oe_multilib_header openssl/configuration.h
-
-	# Create SSL structure for packages such as ca-certificates which
-	# contain hard-coded paths to /etc/ssl. Debian does the same.
-	install -d ${D}${sysconfdir}/ssl
-	mv ${D}${libdir}/ssl-3/certs \
-	   ${D}${libdir}/ssl-3/private \
-	   ${D}${libdir}/ssl-3/openssl.cnf \
-	   ${D}${sysconfdir}/ssl/
-
-	# Although absolute symlinks would be OK for the target, they become
-	# invalid if native or nativesdk are relocated from sstate.
-	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/certs')} ${D}${libdir}/ssl-3/certs
-	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/private')} ${D}${libdir}/ssl-3/private
-	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/openssl.cnf')} ${D}${libdir}/ssl-3/openssl.cnf
-}
-
-do_install:append:class-native () {
-	create_wrapper ${D}${bindir}/openssl \
-	    OPENSSL_CONF=${libdir}/ssl-3/openssl.cnf \
-	    SSL_CERT_DIR=${libdir}/ssl-3/certs \
-	    SSL_CERT_FILE=${libdir}/ssl-3/cert.pem \
-	    OPENSSL_ENGINES=${libdir}/engines-3 \
-	    OPENSSL_MODULES=${libdir}/ossl-modules
-}
-
-do_install:append:class-nativesdk () {
-	mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
-	install -m 644 ${WORKDIR}/environment.d-openssl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
-	sed 's|/usr/lib/ssl/|/usr/lib/ssl-3/|g' -i ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
-}
-
-PTEST_BUILD_HOST_FILES += "configdata.pm"
-PTEST_BUILD_HOST_PATTERN = "perl_version ="
-do_install_ptest () {
-	install -d ${D}${PTEST_PATH}/test
-	install -m755 ${B}/test/p_test.so ${D}${PTEST_PATH}/test
-	install -m755 ${B}/test/provider_internal_test.cnf ${D}${PTEST_PATH}/test
-
-	# Prune the build tree
-	rm -f ${B}/fuzz/*.* ${B}/test/*.*
-
-	cp ${S}/Configure ${B}/configdata.pm ${D}${PTEST_PATH}
-	sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/configdata.pm
-	cp -r ${S}/external ${B}/test ${S}/test ${B}/fuzz ${S}/util ${B}/util ${D}${PTEST_PATH}
-
-	# For test_shlibload
-	ln -s ${libdir}/libcrypto.so.1.1 ${D}${PTEST_PATH}/
-	ln -s ${libdir}/libssl.so.1.1 ${D}${PTEST_PATH}/
-
-	install -d ${D}${PTEST_PATH}/apps
-	ln -s ${bindir}/openssl ${D}${PTEST_PATH}/apps
-	install -m644 ${S}/apps/*.pem ${S}/apps/*.srl ${S}/apps/openssl.cnf ${D}${PTEST_PATH}/apps
-	install -m755 ${B}/apps/CA.pl ${D}${PTEST_PATH}/apps
-
-	install -d ${D}${PTEST_PATH}/engines
-	install -m755 ${B}/engines/dasync.so ${D}${PTEST_PATH}/engines
-	install -m755 ${B}/engines/loader_attic.so ${D}${PTEST_PATH}/engines
-	install -m755 ${B}/engines/ossltest.so ${D}${PTEST_PATH}/engines
-
-	install -d ${D}${PTEST_PATH}/providers
-	install -m755 ${B}/providers/legacy.so ${D}${PTEST_PATH}/providers
-
-	install -d ${D}${PTEST_PATH}/Configurations
-	cp -rf ${S}/Configurations/* ${D}${PTEST_PATH}/Configurations/
-
-	# seems to be needed with perl 5.32.1
-	install -d ${D}${PTEST_PATH}/util/perl/recipes
-	cp ${D}${PTEST_PATH}/test/recipes/tconversion.pl ${D}${PTEST_PATH}/util/perl/recipes/
-
-	sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/util/wrap.pl
-}
-
-# Add the openssl.cnf file to the openssl-conf package. Make the libcrypto
-# package RRECOMMENDS on this package. This will enable the configuration
-# file to be installed for both the openssl-bin package and the libcrypto
-# package since the openssl-bin package depends on the libcrypto package.
-
-PACKAGES =+ "libcrypto libssl openssl-conf ${PN}-engines ${PN}-misc ${PN}-ossl-module-legacy"
-
-FILES:libcrypto = "${libdir}/libcrypto${SOLIBS}"
-FILES:libssl = "${libdir}/libssl${SOLIBS}"
-FILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf \
-                      ${libdir}/ssl-3/openssl.cnf* \
-                      "
-FILES:${PN}-engines = "${libdir}/engines-3"
-# ${prefix} comes from what we pass into --prefix at configure time (which is used for INSTALLTOP)
-FILES:${PN}-engines:append:mingw32:class-nativesdk = " ${prefix}${libdir}/engines-3"
-FILES:${PN}-misc = "${libdir}/ssl-3/misc ${bindir}/c_rehash"
-FILES:${PN}-ossl-module-legacy = "${libdir}/ossl-modules/legacy.so"
-FILES:${PN} =+ "${libdir}/ssl-3/* ${libdir}/ossl-modules/"
-FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/openssl.sh"
-
-CONFFILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf"
-
-RRECOMMENDS:libcrypto += "openssl-conf ${PN}-ossl-module-legacy"
-RDEPENDS:${PN}-misc = "perl"
-RDEPENDS:${PN}-ptest += "openssl-bin perl perl-modules bash sed"
-
-RDEPENDS:${PN}-bin += "openssl-conf"
-
-BBCLASSEXTEND = "native nativesdk"
-
-CVE_PRODUCT = "openssl:openssl"
-
-CVE_VERSION_SUFFIX = "alphabetical"
-
-# Apache in meta-webserver is already recent enough
-CVE_STATUS[CVE-2019-0190] = "not-applicable-config: Only affects OpenSSL >= 1.1.1 in combination with Apache < 2.4.37"
diff --git a/poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb b/poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb
new file mode 100644
index 0000000..cc9452c
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb
@@ -0,0 +1,260 @@
+SUMMARY = "Secure Socket Layer"
+DESCRIPTION = "Secure Socket Layer (SSL) binary and related cryptographic tools."
+HOMEPAGE = "http://www.openssl.org/"
+BUGTRACKER = "http://www.openssl.org/news/vulnerabilities.html"
+SECTION = "libs/network"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c75985e733726beaba57bc5253e96d04"
+
+SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
+           file://run-ptest \
+           file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
+           file://0001-Configure-do-not-tweak-mips-cflags.patch \
+           file://fix_random_labels.patch \
+           "
+
+SRC_URI:append:class-nativesdk = " \
+           file://environment.d-openssl.sh \
+           "
+
+SRC_URI[sha256sum] = "f0316a2ebd89e7f2352976445458689f80302093788c466692fb2a188b2eacf6"
+
+inherit lib_package multilib_header multilib_script ptest perlnative manpages
+MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG:class-native = ""
+PACKAGECONFIG:class-nativesdk = ""
+
+PACKAGECONFIG[cryptodev-linux] = "enable-devcryptoeng,disable-devcryptoeng,cryptodev-linux,,cryptodev-module"
+PACKAGECONFIG[no-tls1] = "no-tls1"
+PACKAGECONFIG[no-tls1_1] = "no-tls1_1"
+PACKAGECONFIG[manpages] = ""
+
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+#| ./libcrypto.so: undefined reference to `getcontext'
+#| ./libcrypto.so: undefined reference to `setcontext'
+#| ./libcrypto.so: undefined reference to `makecontext'
+EXTRA_OECONF:append:libc-musl = " no-async"
+EXTRA_OECONF:append:libc-musl:powerpc64 = " no-asm"
+
+# adding devrandom prevents openssl from using getrandom() which is not available on older glibc versions
+# (native versions can be built with newer glibc, but then relocated onto a system with older glibc)
+EXTRA_OECONF:class-native = "--with-rand-seed=os,devrandom"
+EXTRA_OECONF:class-nativesdk = "--with-rand-seed=os,devrandom"
+
+# Relying on hardcoded built-in paths causes openssl-native to not be relocateable from sstate.
+CFLAGS:append:class-native = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
+CFLAGS:append:class-nativesdk = " -DOPENSSLDIR=/not/builtin -DENGINESDIR=/not/builtin"
+
+# This allows disabling deprecated or undesirable crypto algorithms.
+# The default is to trust upstream choices.
+DEPRECATED_CRYPTO_FLAGS ?= ""
+
+do_configure () {
+	# When we upgrade glibc but not uninative we see obtuse failures in openssl. Make
+	# the issue really clear that perl isn't functional due to symbol mismatch issues.
+	cat <<- EOF > ${WORKDIR}/perltest
+	#!/usr/bin/env perl
+	use POSIX;
+	EOF
+	chmod a+x ${WORKDIR}/perltest
+	${WORKDIR}/perltest
+
+	os=${HOST_OS}
+	case $os in
+	linux-gnueabi |\
+	linux-gnuspe |\
+	linux-musleabi |\
+	linux-muslspe |\
+	linux-musl )
+		os=linux
+		;;
+	*)
+		;;
+	esac
+	target="$os-${HOST_ARCH}"
+	case $target in
+	linux-arc | linux-microblaze*)
+		target=linux-latomic
+		;;
+	linux-arm*)
+		target=linux-armv4
+		;;
+	linux-aarch64*)
+		target=linux-aarch64
+		;;
+	linux-i?86 | linux-viac3)
+		target=linux-x86
+		;;
+	linux-gnux32-x86_64 | linux-muslx32-x86_64 )
+		target=linux-x32
+		;;
+	linux-gnu64-x86_64)
+		target=linux-x86_64
+		;;
+	linux-mips | linux-mipsel)
+		# specifying TARGET_CC_ARCH prevents openssl from (incorrectly) adding target architecture flags
+		target="linux-mips32 ${TARGET_CC_ARCH}"
+		;;
+	linux-gnun32-mips*)
+		target=linux-mips64
+		;;
+	linux-*-mips64 | linux-mips64 | linux-*-mips64el | linux-mips64el)
+		target=linux64-mips64
+		;;
+	linux-nios2* | linux-sh3 | linux-sh4 | linux-arc*)
+		target=linux-generic32
+		;;
+	linux-powerpc)
+		target=linux-ppc
+		;;
+	linux-powerpc64)
+		target=linux-ppc64
+		;;
+	linux-powerpc64le)
+		target=linux-ppc64le
+		;;
+	linux-riscv32)
+		target=linux-latomic
+		;;
+	linux-riscv64)
+		target=linux-generic64
+		;;
+	linux-sparc | linux-supersparc)
+		target=linux-sparcv9
+		;;
+	mingw32-x86_64)
+		target=mingw64
+		;;
+	esac
+
+	useprefix=${prefix}
+	if [ "x$useprefix" = "x" ]; then
+		useprefix=/
+	fi
+	# WARNING: do not set compiler/linker flags (-I/-D etc.) in EXTRA_OECONF, as they will fully replace the
+	# environment variables set by bitbake. Adjust the environment variables instead.
+	PERLEXTERNAL="$(realpath ${S}/external/perl/Text-Template-*/lib)"
+	test -d "$PERLEXTERNAL" || bberror "PERLEXTERNAL '$PERLEXTERNAL' not found!"
+	HASHBANGPERL="/usr/bin/env perl" PERL=perl PERL5LIB="$PERLEXTERNAL" \
+	perl ${S}/Configure ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS} ${DEPRECATED_CRYPTO_FLAGS} --prefix=$useprefix --openssldir=${libdir}/ssl-3 --libdir=${libdir} $target
+	perl ${B}/configdata.pm --dump
+}
+
+do_install () {
+	oe_runmake DESTDIR="${D}" MANDIR="${mandir}" MANSUFFIX=ssl install_sw install_ssldirs ${@bb.utils.contains('PACKAGECONFIG', 'manpages', 'install_docs', '', d)}
+
+	oe_multilib_header openssl/opensslconf.h
+	oe_multilib_header openssl/configuration.h
+
+	# Create SSL structure for packages such as ca-certificates which
+	# contain hard-coded paths to /etc/ssl. Debian does the same.
+	install -d ${D}${sysconfdir}/ssl
+	mv ${D}${libdir}/ssl-3/certs \
+	   ${D}${libdir}/ssl-3/private \
+	   ${D}${libdir}/ssl-3/openssl.cnf \
+	   ${D}${sysconfdir}/ssl/
+
+	# Although absolute symlinks would be OK for the target, they become
+	# invalid if native or nativesdk are relocated from sstate.
+	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/certs')} ${D}${libdir}/ssl-3/certs
+	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/private')} ${D}${libdir}/ssl-3/private
+	ln -sf ${@oe.path.relative('${libdir}/ssl-3', '${sysconfdir}/ssl/openssl.cnf')} ${D}${libdir}/ssl-3/openssl.cnf
+}
+
+do_install:append:class-native () {
+	create_wrapper ${D}${bindir}/openssl \
+	    OPENSSL_CONF=${libdir}/ssl-3/openssl.cnf \
+	    SSL_CERT_DIR=${libdir}/ssl-3/certs \
+	    SSL_CERT_FILE=${libdir}/ssl-3/cert.pem \
+	    OPENSSL_ENGINES=${libdir}/engines-3 \
+	    OPENSSL_MODULES=${libdir}/ossl-modules
+}
+
+do_install:append:class-nativesdk () {
+	mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
+	install -m 644 ${WORKDIR}/environment.d-openssl.sh ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
+	sed 's|/usr/lib/ssl/|/usr/lib/ssl-3/|g' -i ${D}${SDKPATHNATIVE}/environment-setup.d/openssl.sh
+}
+
+PTEST_BUILD_HOST_FILES += "configdata.pm"
+PTEST_BUILD_HOST_PATTERN = "perl_version ="
+do_install_ptest () {
+	install -d ${D}${PTEST_PATH}/test
+	install -m755 ${B}/test/p_test.so ${D}${PTEST_PATH}/test
+	install -m755 ${B}/test/provider_internal_test.cnf ${D}${PTEST_PATH}/test
+
+	# Prune the build tree
+	rm -f ${B}/fuzz/*.* ${B}/test/*.*
+
+	cp ${S}/Configure ${B}/configdata.pm ${D}${PTEST_PATH}
+	sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/configdata.pm
+	cp -r ${S}/external ${B}/test ${S}/test ${B}/fuzz ${S}/util ${B}/util ${D}${PTEST_PATH}
+
+	# For test_shlibload
+	ln -s ${libdir}/libcrypto.so.1.1 ${D}${PTEST_PATH}/
+	ln -s ${libdir}/libssl.so.1.1 ${D}${PTEST_PATH}/
+
+	install -d ${D}${PTEST_PATH}/apps
+	ln -s ${bindir}/openssl ${D}${PTEST_PATH}/apps
+	install -m644 ${S}/apps/*.pem ${S}/apps/*.srl ${S}/apps/openssl.cnf ${D}${PTEST_PATH}/apps
+	install -m755 ${B}/apps/CA.pl ${D}${PTEST_PATH}/apps
+
+	install -d ${D}${PTEST_PATH}/engines
+	install -m755 ${B}/engines/dasync.so ${D}${PTEST_PATH}/engines
+	install -m755 ${B}/engines/loader_attic.so ${D}${PTEST_PATH}/engines
+	install -m755 ${B}/engines/ossltest.so ${D}${PTEST_PATH}/engines
+
+	install -d ${D}${PTEST_PATH}/providers
+	install -m755 ${B}/providers/legacy.so ${D}${PTEST_PATH}/providers
+
+	install -d ${D}${PTEST_PATH}/Configurations
+	cp -rf ${S}/Configurations/* ${D}${PTEST_PATH}/Configurations/
+
+	# seems to be needed with perl 5.32.1
+	install -d ${D}${PTEST_PATH}/util/perl/recipes
+	cp ${D}${PTEST_PATH}/test/recipes/tconversion.pl ${D}${PTEST_PATH}/util/perl/recipes/
+
+	sed 's|${S}|${PTEST_PATH}|g' -i ${D}${PTEST_PATH}/util/wrap.pl
+}
+
+# Add the openssl.cnf file to the openssl-conf package. Make the libcrypto
+# package RRECOMMENDS on this package. This will enable the configuration
+# file to be installed for both the openssl-bin package and the libcrypto
+# package since the openssl-bin package depends on the libcrypto package.
+
+PACKAGES =+ "libcrypto libssl openssl-conf ${PN}-engines ${PN}-misc ${PN}-ossl-module-legacy"
+
+FILES:libcrypto = "${libdir}/libcrypto${SOLIBS}"
+FILES:libssl = "${libdir}/libssl${SOLIBS}"
+FILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf \
+                      ${libdir}/ssl-3/openssl.cnf* \
+                      "
+FILES:${PN}-engines = "${libdir}/engines-3"
+# ${prefix} comes from what we pass into --prefix at configure time (which is used for INSTALLTOP)
+FILES:${PN}-engines:append:mingw32:class-nativesdk = " ${prefix}${libdir}/engines-3"
+FILES:${PN}-misc = "${libdir}/ssl-3/misc ${bindir}/c_rehash"
+FILES:${PN}-ossl-module-legacy = "${libdir}/ossl-modules/legacy.so"
+FILES:${PN} =+ "${libdir}/ssl-3/* ${libdir}/ossl-modules/"
+FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}/environment-setup.d/openssl.sh"
+
+CONFFILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf"
+
+RRECOMMENDS:libcrypto += "openssl-conf ${PN}-ossl-module-legacy"
+RDEPENDS:${PN}-misc = "perl"
+RDEPENDS:${PN}-ptest += "openssl-bin perl perl-modules bash sed"
+
+RDEPENDS:${PN}-bin += "openssl-conf"
+
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_PRODUCT = "openssl:openssl"
+
+CVE_VERSION_SUFFIX = "alphabetical"
+
+# Apache in meta-webserver is already recent enough
+CVE_STATUS[CVE-2019-0190] = "not-applicable-config: Only affects OpenSSL >= 1.1.1 in combination with Apache < 2.4.37"
diff --git a/poky/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb b/poky/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
index 8a6c297..099c58b 100644
--- a/poky/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
+++ b/poky/meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb
@@ -3,7 +3,6 @@
 DESCRIPTION = "PPP dail-in provides a point to point protocol (PPP), so that other computers can dial up to it and access connected networks."
 DEPENDS = "ppp"
 RDEPENDS:${PN} = "ppp"
-PR = "r8"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
diff --git a/poky/meta/recipes-core/base-files/base-files_3.0.14.bb b/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
index 0d38657..6ba3971 100644
--- a/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
+++ b/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
@@ -1,7 +1,6 @@
 SUMMARY = "Miscellaneous files for the base system"
 DESCRIPTION = "The base-files package creates the basic system directory structure and provides a small set of key configuration files for the system."
 SECTION = "base"
-PR = "r90"
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://licenses/GPL-2;md5=94d55d512a9ba36caa9b7df079bae19f"
 # Removed all license related tasks in this recipe as license.bbclass 
diff --git a/poky/meta/recipes-core/busybox/busybox/defconfig b/poky/meta/recipes-core/busybox/busybox/defconfig
index 3d36447..f3d545d 100644
--- a/poky/meta/recipes-core/busybox/busybox/defconfig
+++ b/poky/meta/recipes-core/busybox/busybox/defconfig
@@ -1190,7 +1190,7 @@
 # Options common to all shells
 #
 CONFIG_FEATURE_SH_MATH=y
-# CONFIG_FEATURE_SH_MATH_64 is not set
+CONFIG_FEATURE_SH_MATH_64=y
 CONFIG_FEATURE_SH_MATH_BASE=y
 CONFIG_FEATURE_SH_EXTRA_QUIET=y
 # CONFIG_FEATURE_SH_STANDALONE is not set
diff --git a/poky/meta/recipes-core/coreutils/coreutils/stdlib-mb-cur-max.patch b/poky/meta/recipes-core/coreutils/coreutils/stdlib-mb-cur-max.patch
deleted file mode 100644
index 732fa5b..0000000
--- a/poky/meta/recipes-core/coreutils/coreutils/stdlib-mb-cur-max.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
-
-From ca6c179226864bff23f2b062518cf885bb42ce56 Mon Sep 17 00:00:00 2001
-From: Bruno Haible <bruno@clisp.org>
-Date: Thu, 27 Apr 2023 15:26:37 +0200
-Subject: [PATCH] stdlib: Fix error when cross-compiling.
-
-Reported by Pierre Labastie <pierre.labastie@neuf.fr> in
-<https://lists.gnu.org/archive/html/bug-gnulib/2023-04/msg00220.html>.
-
-* m4/stdlib_h.m4 (gl_STDLIB_H): Provide a 4th argument to AC_RUN_IFELSE.
----
- ChangeLog      | 7 +++++++
- m4/stdlib_h.m4 | 4 ++--
- 2 files changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
-index 3274ea4948..f47c1eb37b 100644
---- a/m4/stdlib_h.m4
-+++ b/m4/stdlib_h.m4
-@@ -66,7 +66,7 @@ int main ()
-   return result;
- }]])],
-           [gl_cv_macro_MB_CUR_MAX_good=yes],
--          [gl_cv_macro_MB_CUR_MAX_good=no]
-+          [gl_cv_macro_MB_CUR_MAX_good=no],
-           [:])
-       fi
-     ])
--- 
-2.34.1
-
diff --git a/poky/meta/recipes-core/coreutils/coreutils_9.3.bb b/poky/meta/recipes-core/coreutils/coreutils_9.3.bb
deleted file mode 100644
index ba38169..0000000
--- a/poky/meta/recipes-core/coreutils/coreutils_9.3.bb
+++ /dev/null
@@ -1,214 +0,0 @@
-SUMMARY = "The basic file, shell and text manipulation utilities"
-DESCRIPTION = "The GNU Core Utilities provide the basic file, shell and text \
-manipulation utilities. These are the core utilities which are expected to exist on \
-every system."
-HOMEPAGE = "http://www.gnu.org/software/coreutils/"
-BUGTRACKER = "http://debbugs.gnu.org/coreutils"
-LICENSE = "GPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
-                    file://src/ls.c;beginline=1;endline=15;md5=b720a8b317035d66c555fc6d89e3674c \
-                    "
-DEPENDS = "gmp libcap"
-DEPENDS:class-native = ""
-
-inherit autotools gettext texinfo
-
-SRC_URI = "${GNU_MIRROR}/coreutils/${BP}.tar.xz \
-           file://remove-usr-local-lib-from-m4.patch \
-           file://0001-local.mk-fix-cross-compiling-problem.patch \
-           file://stdlib-mb-cur-max.patch \
-           file://run-ptest \
-           "
-
-SRC_URI[sha256sum] = "adbcfcfe899235b71e8768dcf07cd532520b7f54f9a8064843f8d199a904bbaa"
-
-# http://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=v8.27-101-gf5d7c0842
-# 
-CVE_STATUS[CVE-2016-2781] = "disputed: runcon is not really a sandbox command, use `runcon ... setsid ...` to avoid this particular issue."
-
-EXTRA_OECONF:class-target = "--enable-install-program=arch,hostname --libexecdir=${libdir}"
-EXTRA_OECONF:class-nativesdk = "--enable-install-program=arch,hostname"
-
-# acl and xattr are not default features
-#
-PACKAGECONFIG:class-target ??= "\
-    ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)} \
-"
-
-# The lib/oe/path.py requires xattr
-PACKAGECONFIG:class-native ??= "xattr"
-
-# oe-core builds need xattr support
-PACKAGECONFIG:class-nativesdk ??= "xattr"
-
-# with, without, depends, rdepends
-#
-PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
-PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
-PACKAGECONFIG[single-binary] = "--enable-single-binary,--disable-single-binary,,"
-PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
-PACKAGECONFIG[openssl] = "--with-openssl=yes,--with-openssl=no,openssl"
-
-# [ df mktemp nice printenv base64 gets a special treatment and is not included in this
-bindir_progs = "arch basename chcon cksum comm csplit cut dir dircolors dirname du \
-                env expand expr factor fmt fold groups head hostid id install \
-                join link logname md5sum mkfifo nl nohup nproc od paste pathchk \
-                pinky pr printf ptx readlink realpath runcon seq sha1sum sha224sum sha256sum \
-                sha384sum sha512sum shred shuf sort split sum tac tail tee test timeout \
-                tr truncate tsort tty unexpand uniq unlink uptime users vdir wc who whoami yes"
-
-# hostname gets a special treatment and is not included in this
-base_bindir_progs = "cat chgrp chmod chown cp date dd echo false hostname kill ln ls mkdir \
-                     mknod mv pwd rm rmdir sleep stty sync touch true uname stat"
-
-sbindir_progs= "chroot"
-
-# Split stdbuf into its own package, so one can include
-# coreutils-stdbuf without getting the rest of coreutils, but make
-# coreutils itself pull in stdbuf, so IMAGE_INSTALL += "coreutils"
-# always provides all coreutils
-PACKAGE_BEFORE_PN:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
-FILES:coreutils-stdbuf = "${bindir}/stdbuf ${libdir}/coreutils/libstdbuf.so"
-RDEPENDS:coreutils:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
-
-# However, when the single-binary PACKAGECONFIG is used, stdbuf
-# functionality is built into the single coreutils binary, so there's
-# no point splitting /usr/bin/stdbuf to its own package. Instead, add
-# an RPROVIDE so that rdepending on coreutils-stdbuf will work
-# regardless of whether single-binary is in effect.
-RPROVIDES:coreutils += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', 'coreutils-stdbuf', '', d)}"
-
-# Let aclocal use the relative path for the m4 file rather than the
-# absolute since coreutils has a lot of m4 files, otherwise there might
-# be an "Argument list too long" error when it is built in a long/deep
-# directory.
-acpaths = "-I ./m4"
-
-# Deal with a separate builddir failure if src doesn't exist when creating version.c/version.h
-do_compile:prepend () {
-	mkdir -p ${B}/src
-}
-
-do_install:class-native() {
-	autotools_do_install
-	# remove groups to fix conflict with shadow-native
-	rm -f ${D}${STAGING_BINDIR_NATIVE}/groups
-	# The return is a must since native doesn't need the
-	# do_install:append() in the below.
-	return
-}
-
-do_install:append() {
-	for i in df mktemp nice printenv base64; do mv ${D}${bindir}/$i ${D}${bindir}/$i.${BPN}; done
-
-	install -d ${D}${base_bindir}
-	[ "${base_bindir}" != "${bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i.${BPN}; done
-
-	install -d ${D}${sbindir}
-	[ "${sbindir}" != "${bindir}" ] && for i in ${sbindir_progs}; do mv ${D}${bindir}/$i ${D}${sbindir}/$i.${BPN}; done
-
-	# [ requires special handling because [.coreutils will cause the sed stuff
-	# in update-alternatives to fail, therefore use lbracket - the name used
-	# for the actual source file.
-	mv ${D}${bindir}/[ ${D}${bindir}/lbracket.${BPN}
-}
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-# Make hostname's priority higher than busybox but lower than net-tools
-ALTERNATIVE_PRIORITY[hostname] = "90"
-ALTERNATIVE:${PN} = "lbracket ${bindir_progs} ${base_bindir_progs} ${sbindir_progs} base32 base64 nice printenv mktemp df"
-ALTERNATIVE:${PN}-doc = "base64.1 nice.1 mktemp.1 df.1 groups.1 kill.1 uptime.1 stat.1 hostname.1"
-
-ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
-
-ALTERNATIVE_LINK_NAME[base64] = "${base_bindir}/base64"
-ALTERNATIVE_TARGET[base64] = "${bindir}/base64.${BPN}"
-ALTERNATIVE_LINK_NAME[base64.1] = "${mandir}/man1/base64.1"
-
-ALTERNATIVE_LINK_NAME[mktemp] = "${base_bindir}/mktemp"
-ALTERNATIVE_TARGET[mktemp] = "${bindir}/mktemp.${BPN}"
-ALTERNATIVE_LINK_NAME[mktemp.1] = "${mandir}/man1/mktemp.1"
-
-ALTERNATIVE_LINK_NAME[df] = "${base_bindir}/df"
-ALTERNATIVE_TARGET[df] = "${bindir}/df.${BPN}"
-ALTERNATIVE_LINK_NAME[df.1] = "${mandir}/man1/df.1"
-
-ALTERNATIVE_LINK_NAME[nice] = "${base_bindir}/nice"
-ALTERNATIVE_TARGET[nice] = "${bindir}/nice.${BPN}"
-ALTERNATIVE_LINK_NAME[nice.1] = "${mandir}/man1/nice.1"
-
-ALTERNATIVE_LINK_NAME[printenv] = "${base_bindir}/printenv"
-ALTERNATIVE_TARGET[printenv] = "${bindir}/printenv.${BPN}"
-
-ALTERNATIVE_LINK_NAME[lbracket] = "${bindir}/["
-ALTERNATIVE_TARGET[lbracket] = "${bindir}/lbracket.${BPN}"
-
-ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
-ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[stat.1] = "${mandir}/man1/stat.1"
-
-# The statx() requires glibc >= 2.28 and linux kernel >= 4.11, it doesn't work
-# when glibc >= 2.28 ((Ubuntu 20.04 in docker) and kernel < 4.11 (Host OS
-# CentOS 7), we can check kernel version and disable it, but that would cause
-# two different signatures for coreutils-native, so disable it unconditionally
-# for deterministic build.
-EXTRA_OECONF:append:class-native = " ac_cv_func_statx=0"
-
-python __anonymous() {
-    for prog in d.getVar('base_bindir_progs').split():
-        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
-
-    for prog in d.getVar('sbindir_progs').split():
-        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('sbindir'), prog))
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit ptest
-
-RDEPENDS:${PN}-ptest += "bash findutils gawk liberror-perl make perl perl-modules python3-core sed shadow"
-
-# -dev automatic dependencies fails as we don't want libmodule-build-perl-dev, its too heavy
-# may need tweaking if DEPENDS changes
-# Can't use ${PN}-dev here since flags with overrides and key expansion not supported
-RRECOMMENDS:coreutils-dev[nodeprrecs] = "1"
-RRECOMMENDS:${PN}-dev += "acl-dev attr-dev gmp-dev libcap-dev bash-dev findutils-dev gawk-dev shadow-dev"
-
-do_install_ptest () {
-    install -d ${D}${PTEST_PATH}/tests
-    cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests
-    sed -i 's/ginstall/install/g'  `grep -R ginstall ${D}${PTEST_PATH}/tests | awk -F: '{print $1}' | uniq`
-    install -d ${D}${PTEST_PATH}/build-aux
-    install ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
-    cp ${B}/Makefile ${D}${PTEST_PATH}/
-    cp ${S}/init.cfg ${D}${PTEST_PATH}/
-    cp -r ${B}/src ${D}${PTEST_PATH}/
-    cp -r ${S}/src/*.c ${D}${PTEST_PATH}/src
-    sed -i '/^VPATH/s/= .*$/= ./g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^PROGRAMS/s/^/#/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^Makefile: /s/^.*$/Makefile:/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^abs_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^abs_top_builddir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^abs_top_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^built_programs/s/ginstall/install/g' ${D}${PTEST_PATH}/Makefile
-    sed -i '/^CC =/s/ --sysroot=.*recipe-sysroot/ /g' ${D}${PTEST_PATH}/Makefile
-    chmod -R 777 ${D}${PTEST_PATH}
-
-    # Disable subcase stty-pairs.sh, it will cause test framework hang
-    sed -i '/stty-pairs.sh/d' ${D}${PTEST_PATH}/Makefile
-
-    # Disable subcase tail-2/assert.sh as it has issues on 32-bit systems
-    sed -i '/assert.sh/d' ${D}${PTEST_PATH}/Makefile
-
-    # Tweak test d_type-check to use python3 instead of python
-    sed -i "1s@.*@#!/usr/bin/python3@" ${D}${PTEST_PATH}/tests/d_type-check
-    install ${B}/src/getlimits ${D}/${bindir}
-    
-    # handle multilib
-    sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
-}
-
-FILES:${PN}-ptest += "${bindir}/getlimits"
diff --git a/poky/meta/recipes-core/coreutils/coreutils_9.4.bb b/poky/meta/recipes-core/coreutils/coreutils_9.4.bb
new file mode 100644
index 0000000..f210df2
--- /dev/null
+++ b/poky/meta/recipes-core/coreutils/coreutils_9.4.bb
@@ -0,0 +1,213 @@
+SUMMARY = "The basic file, shell and text manipulation utilities"
+DESCRIPTION = "The GNU Core Utilities provide the basic file, shell and text \
+manipulation utilities. These are the core utilities which are expected to exist on \
+every system."
+HOMEPAGE = "http://www.gnu.org/software/coreutils/"
+BUGTRACKER = "http://debbugs.gnu.org/coreutils"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+                    file://src/ls.c;beginline=1;endline=15;md5=b720a8b317035d66c555fc6d89e3674c \
+                    "
+DEPENDS = "gmp libcap"
+DEPENDS:class-native = ""
+
+inherit autotools gettext texinfo
+
+SRC_URI = "${GNU_MIRROR}/coreutils/${BP}.tar.xz \
+           file://remove-usr-local-lib-from-m4.patch \
+           file://0001-local.mk-fix-cross-compiling-problem.patch \
+           file://run-ptest \
+           "
+SRC_URI[sha256sum] = "ea613a4cf44612326e917201bbbcdfbd301de21ffc3b59b6e5c07e040b275e52"
+
+# http://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=v8.27-101-gf5d7c0842
+# 
+CVE_STATUS[CVE-2016-2781] = "disputed: runcon is not really a sandbox command, use `runcon ... setsid ...` to avoid this particular issue."
+
+EXTRA_OECONF:class-target = "--enable-install-program=arch,hostname --libexecdir=${libdir}"
+EXTRA_OECONF:class-nativesdk = "--enable-install-program=arch,hostname"
+
+# acl and xattr are not default features
+#
+PACKAGECONFIG:class-target ??= "\
+    ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)} \
+"
+
+# The lib/oe/path.py requires xattr
+PACKAGECONFIG:class-native ??= "xattr"
+
+# oe-core builds need xattr support
+PACKAGECONFIG:class-nativesdk ??= "xattr"
+
+# with, without, depends, rdepends
+#
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
+PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
+PACKAGECONFIG[single-binary] = "--enable-single-binary,--disable-single-binary,,"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+PACKAGECONFIG[openssl] = "--with-openssl=yes,--with-openssl=no,openssl"
+
+# [ df mktemp nice printenv base64 gets a special treatment and is not included in this
+bindir_progs = "arch basename chcon cksum comm csplit cut dir dircolors dirname du \
+                env expand expr factor fmt fold groups head hostid id install \
+                join link logname md5sum mkfifo nl nohup nproc od paste pathchk \
+                pinky pr printf ptx readlink realpath runcon seq sha1sum sha224sum sha256sum \
+                sha384sum sha512sum shred shuf sort split sum tac tail tee test timeout \
+                tr truncate tsort tty unexpand uniq unlink uptime users vdir wc who whoami yes"
+
+# hostname gets a special treatment and is not included in this
+base_bindir_progs = "cat chgrp chmod chown cp date dd echo false hostname kill ln ls mkdir \
+                     mknod mv pwd rm rmdir sleep stty sync touch true uname stat"
+
+sbindir_progs= "chroot"
+
+# Split stdbuf into its own package, so one can include
+# coreutils-stdbuf without getting the rest of coreutils, but make
+# coreutils itself pull in stdbuf, so IMAGE_INSTALL += "coreutils"
+# always provides all coreutils
+PACKAGE_BEFORE_PN:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
+FILES:coreutils-stdbuf = "${bindir}/stdbuf ${libdir}/coreutils/libstdbuf.so"
+RDEPENDS:coreutils:class-target += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', '', 'coreutils-stdbuf', d)}"
+
+# However, when the single-binary PACKAGECONFIG is used, stdbuf
+# functionality is built into the single coreutils binary, so there's
+# no point splitting /usr/bin/stdbuf to its own package. Instead, add
+# an RPROVIDE so that rdepending on coreutils-stdbuf will work
+# regardless of whether single-binary is in effect.
+RPROVIDES:coreutils += "${@bb.utils.contains('PACKAGECONFIG', 'single-binary', 'coreutils-stdbuf', '', d)}"
+
+# Let aclocal use the relative path for the m4 file rather than the
+# absolute since coreutils has a lot of m4 files, otherwise there might
+# be an "Argument list too long" error when it is built in a long/deep
+# directory.
+acpaths = "-I ./m4"
+
+# Deal with a separate builddir failure if src doesn't exist when creating version.c/version.h
+do_compile:prepend () {
+	mkdir -p ${B}/src
+}
+
+do_install:class-native() {
+	autotools_do_install
+	# remove groups to fix conflict with shadow-native
+	rm -f ${D}${STAGING_BINDIR_NATIVE}/groups
+	# The return is a must since native doesn't need the
+	# do_install:append() in the below.
+	return
+}
+
+do_install:append() {
+	for i in df mktemp nice printenv base64; do mv ${D}${bindir}/$i ${D}${bindir}/$i.${BPN}; done
+
+	install -d ${D}${base_bindir}
+	[ "${base_bindir}" != "${bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i.${BPN}; done
+
+	install -d ${D}${sbindir}
+	[ "${sbindir}" != "${bindir}" ] && for i in ${sbindir_progs}; do mv ${D}${bindir}/$i ${D}${sbindir}/$i.${BPN}; done
+
+	# [ requires special handling because [.coreutils will cause the sed stuff
+	# in update-alternatives to fail, therefore use lbracket - the name used
+	# for the actual source file.
+	mv ${D}${bindir}/[ ${D}${bindir}/lbracket.${BPN}
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+# Make hostname's priority higher than busybox but lower than net-tools
+ALTERNATIVE_PRIORITY[hostname] = "90"
+ALTERNATIVE:${PN} = "lbracket ${bindir_progs} ${base_bindir_progs} ${sbindir_progs} base32 base64 nice printenv mktemp df"
+ALTERNATIVE:${PN}-doc = "base64.1 nice.1 mktemp.1 df.1 groups.1 kill.1 uptime.1 stat.1 hostname.1"
+
+ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
+
+ALTERNATIVE_LINK_NAME[base64] = "${base_bindir}/base64"
+ALTERNATIVE_TARGET[base64] = "${bindir}/base64.${BPN}"
+ALTERNATIVE_LINK_NAME[base64.1] = "${mandir}/man1/base64.1"
+
+ALTERNATIVE_LINK_NAME[mktemp] = "${base_bindir}/mktemp"
+ALTERNATIVE_TARGET[mktemp] = "${bindir}/mktemp.${BPN}"
+ALTERNATIVE_LINK_NAME[mktemp.1] = "${mandir}/man1/mktemp.1"
+
+ALTERNATIVE_LINK_NAME[df] = "${base_bindir}/df"
+ALTERNATIVE_TARGET[df] = "${bindir}/df.${BPN}"
+ALTERNATIVE_LINK_NAME[df.1] = "${mandir}/man1/df.1"
+
+ALTERNATIVE_LINK_NAME[nice] = "${base_bindir}/nice"
+ALTERNATIVE_TARGET[nice] = "${bindir}/nice.${BPN}"
+ALTERNATIVE_LINK_NAME[nice.1] = "${mandir}/man1/nice.1"
+
+ALTERNATIVE_LINK_NAME[printenv] = "${base_bindir}/printenv"
+ALTERNATIVE_TARGET[printenv] = "${bindir}/printenv.${BPN}"
+
+ALTERNATIVE_LINK_NAME[lbracket] = "${bindir}/["
+ALTERNATIVE_TARGET[lbracket] = "${bindir}/lbracket.${BPN}"
+
+ALTERNATIVE_LINK_NAME[groups.1] = "${mandir}/man1/groups.1"
+ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[stat.1] = "${mandir}/man1/stat.1"
+
+# The statx() requires glibc >= 2.28 and linux kernel >= 4.11, it doesn't work
+# when glibc >= 2.28 ((Ubuntu 20.04 in docker) and kernel < 4.11 (Host OS
+# CentOS 7), we can check kernel version and disable it, but that would cause
+# two different signatures for coreutils-native, so disable it unconditionally
+# for deterministic build.
+EXTRA_OECONF:append:class-native = " ac_cv_func_statx=0"
+
+python __anonymous() {
+    for prog in d.getVar('base_bindir_progs').split():
+        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
+
+    for prog in d.getVar('sbindir_progs').split():
+        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('sbindir'), prog))
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+RDEPENDS:${PN}-ptest += "bash findutils gawk liberror-perl make perl perl-modules python3-core sed shadow"
+
+# -dev automatic dependencies fails as we don't want libmodule-build-perl-dev, its too heavy
+# may need tweaking if DEPENDS changes
+# Can't use ${PN}-dev here since flags with overrides and key expansion not supported
+RRECOMMENDS:coreutils-dev[nodeprrecs] = "1"
+RRECOMMENDS:${PN}-dev += "acl-dev attr-dev gmp-dev libcap-dev bash-dev findutils-dev gawk-dev shadow-dev"
+
+do_install_ptest () {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -r ${S}/tests/* ${D}${PTEST_PATH}/tests
+    sed -i 's/ginstall/install/g'  `grep -R ginstall ${D}${PTEST_PATH}/tests | awk -F: '{print $1}' | uniq`
+    install -d ${D}${PTEST_PATH}/build-aux
+    install ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
+    install -Dm 0644 ${B}/lib/config.h ${D}${PTEST_PATH}/lib/config.h
+    cp ${B}/Makefile ${D}${PTEST_PATH}/
+    cp ${S}/init.cfg ${D}${PTEST_PATH}/
+    cp -r ${B}/src ${D}${PTEST_PATH}/
+    cp -r ${S}/src/*.c ${D}${PTEST_PATH}/src
+    sed -i '/^VPATH/s/= .*$/= ./g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^PROGRAMS/s/^/#/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^Makefile: /s/^.*$/Makefile:/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^abs_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^abs_top_builddir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^abs_top_srcdir/s/= .*$/= \$\{PWD\}/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^built_programs/s/ginstall/install/g' ${D}${PTEST_PATH}/Makefile
+    sed -i '/^CC =/s/ --sysroot=.*recipe-sysroot/ /g' ${D}${PTEST_PATH}/Makefile
+    chmod -R 777 ${D}${PTEST_PATH}
+
+    # Disable subcase stty-pairs.sh, it will cause test framework hang
+    sed -i '/stty-pairs.sh/d' ${D}${PTEST_PATH}/Makefile
+
+    # Disable subcase tail-2/assert.sh as it has issues on 32-bit systems
+    sed -i '/assert.sh/d' ${D}${PTEST_PATH}/Makefile
+
+    # Tweak test d_type-check to use python3 instead of python
+    sed -i "1s@.*@#!/usr/bin/python3@" ${D}${PTEST_PATH}/tests/d_type-check
+    install ${B}/src/getlimits ${D}/${bindir}
+    
+    # handle multilib
+    sed -i s:@libdir@:${libdir}:g ${D}${PTEST_PATH}/run-ptest
+}
+
+FILES:${PN}-ptest += "${bindir}/getlimits"
diff --git a/poky/meta/recipes-core/dbus-wait/dbus-wait_git.bb b/poky/meta/recipes-core/dbus-wait/dbus-wait_git.bb
index 09ba515..1cdf07d 100644
--- a/poky/meta/recipes-core/dbus-wait/dbus-wait_git.bb
+++ b/poky/meta/recipes-core/dbus-wait/dbus-wait_git.bb
@@ -9,7 +9,6 @@
 
 SRCREV = "6cc6077a36fe2648a5f993fe7c16c9632f946517"
 PV = "0.1+git"
-PR = "r2"
 
 SRC_URI = "git://git.yoctoproject.org/${BPN};branch=master;protocol=https"
 UPSTREAM_CHECK_COMMITS = "1"
diff --git a/poky/meta/recipes-core/dbus/dbus_1.14.10.bb b/poky/meta/recipes-core/dbus/dbus_1.14.10.bb
new file mode 100644
index 0000000..2a256be
--- /dev/null
+++ b/poky/meta/recipes-core/dbus/dbus_1.14.10.bb
@@ -0,0 +1,187 @@
+SUMMARY = "D-Bus message bus"
+DESCRIPTION = "D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a \"single instance\" application or daemon, and to launch applications and daemons on demand when their services are needed."
+HOMEPAGE = "https://dbus.freedesktop.org"
+SECTION = "base"
+
+inherit autotools pkgconfig gettext upstream-version-is-even ptest-gnome
+
+LICENSE = "AFL-2.1 | GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6423dcd74d7be9715b0db247fd889da3 \
+                    file://dbus/dbus.h;beginline=6;endline=20;md5=866739837ccd835350af94dccd6457d8 \
+                    "
+
+SRC_URI = "https://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.xz \
+           file://run-ptest \
+           file://tmpdir.patch \
+           file://dbus-1.init \
+           "
+
+SRC_URI[sha256sum] = "ba1f21d2bd9d339da2d4aa8780c09df32fea87998b73da24f49ab9df1e36a50f"
+
+EXTRA_OECONF = "--disable-xml-docs \
+                --disable-doxygen-docs \
+                --enable-largefile \
+                --with-system-socket=/run/dbus/system_bus_socket \
+                --enable-tests \
+                --enable-checks \
+                --enable-asserts \
+                --runstatedir=/run \
+                "
+EXTRA_OECONF:append:class-target = " SYSTEMCTL=${base_bindir}/systemctl"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd x11', d)} \
+                   user-session \
+                  "
+PACKAGECONFIG:class-native = ""
+PACKAGECONFIG:class-nativesdk = ""
+
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--disable-systemd --without-systemdsystemunitdir,systemd"
+PACKAGECONFIG[x11] = "--enable-x11-autolaunch,--without-x --disable-x11-autolaunch, virtual/libx11 libsm"
+PACKAGECONFIG[user-session] = "--enable-user-session --with-systemduserunitdir=${systemd_user_unitdir},--disable-user-session"
+PACKAGECONFIG[verbose-mode] = "--enable-verbose-mode,,,"
+PACKAGECONFIG[audit] = "--enable-libaudit,--disable-libaudit,audit"
+PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
+
+DEPENDS = "expat virtual/libintl autoconf-archive-native glib-2.0"
+RDEPENDS:${PN} += "${PN}-common ${PN}-tools"
+RDEPENDS:${PN}:class-native = ""
+
+inherit useradd update-rc.d
+
+INITSCRIPT_NAME = "dbus-1"
+INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
+
+python __anonymous() {
+    if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
+        d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+}
+
+PACKAGES =+ "${PN}-lib ${PN}-common ${PN}-tools"
+
+USERADD_PACKAGES = "dbus-common"
+USERADD_PARAM:dbus-common = "--system --home ${localstatedir}/lib/dbus \
+                             --no-create-home --shell /bin/false \
+                             --user-group messagebus"
+
+CONFFILES:${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf"
+
+DEBIANNAME:${PN} = "dbus-1"
+
+OLDPKGNAME = "dbus-x11"
+OLDPKGNAME:class-nativesdk = ""
+
+# for compatibility
+RPROVIDES:${PN} = "${OLDPKGNAME}"
+RREPLACES:${PN} += "${OLDPKGNAME}"
+
+FILES:${PN} = "${bindir}/dbus-daemon* \
+               ${bindir}/dbus-cleanup-sockets \
+               ${bindir}/dbus-launch \
+               ${bindir}/dbus-run-session \
+               ${libexecdir}/dbus* \
+               ${sysconfdir} \
+               ${localstatedir} \
+               ${systemd_system_unitdir} \
+               ${systemd_user_unitdir} \
+               ${nonarch_libdir}/tmpfiles.d/dbus.conf \
+"
+FILES:${PN}-common = "${sysconfdir}/dbus-1 \
+                      ${datadir}/dbus-1/services \
+                      ${datadir}/dbus-1/system-services \
+                      ${datadir}/dbus-1/session.d \
+                      ${datadir}/dbus-1/session.conf \
+                      ${datadir}/dbus-1/system.d \
+                      ${datadir}/dbus-1/system.conf \
+                      ${systemd_system_unitdir}/dbus.socket \
+                      ${systemd_system_unitdir}/sockets.target.wants \
+                      ${systemd_user_unitdir}/dbus.socket \
+                      ${systemd_user_unitdir}/sockets.target.wants \
+                      ${nonarch_libdir}/sysusers.d/dbus.conf \
+"
+FILES:${PN}-tools = "${bindir}/dbus-uuidgen \
+                     ${bindir}/dbus-send \
+                     ${bindir}/dbus-monitor \
+                     ${bindir}/dbus-update-activation-environment \
+"
+FILES:${PN}-lib = "${libdir}/lib*.so.*"
+RRECOMMENDS:${PN}-lib = "${PN}"
+FILES:${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-test-tool ${datadir}/xml/dbus-1"
+
+RDEPENDS:${PN}-ptest += "bash make dbus"
+
+PACKAGE_WRITE_DEPS += "${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
+pkg_postinst:dbus() {
+	# If both systemd and sysvinit are enabled, mask the dbus-1 init script
+        if ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','true','false',d)}; then
+		if [ -n "$D" ]; then
+			OPTS="--root=$D"
+		fi
+		systemctl $OPTS mask dbus-1.service
+	fi
+
+	if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
+		/etc/init.d/populate-volatile.sh update
+	fi
+}
+
+
+do_install() {
+	autotools_do_install
+
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+		install -d ${D}${sysconfdir}/init.d
+		sed 's:@bindir@:${bindir}:' < ${WORKDIR}/dbus-1.init >${WORKDIR}/dbus-1.init.sh
+		install -m 0755 ${WORKDIR}/dbus-1.init.sh ${D}${sysconfdir}/init.d/dbus-1
+		install -d ${D}${sysconfdir}/default/volatiles
+		echo "d messagebus messagebus 0755 /run/dbus none" \
+		     > ${D}${sysconfdir}/default/volatiles/99_dbus
+	fi
+
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+		for i in dbus.target.wants sockets.target.wants multi-user.target.wants; do \
+			install -d ${D}${systemd_system_unitdir}/$i; done
+		install -m 0644 ${B}/bus/dbus.service ${B}/bus/dbus.socket ${D}${systemd_system_unitdir}/
+		ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/dbus.target.wants/dbus.socket
+		ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/sockets.target.wants/dbus.socket
+		ln -fs ../dbus.service ${D}${systemd_system_unitdir}/multi-user.target.wants/dbus.service
+	fi
+
+
+	mkdir -p ${D}${localstatedir}/lib/dbus
+
+	chown messagebus:messagebus ${D}${localstatedir}/lib/dbus
+
+	chown root:messagebus ${D}${libexecdir}/dbus-daemon-launch-helper
+	chmod 4755 ${D}${libexecdir}/dbus-daemon-launch-helper
+
+	# Remove Red Hat initscript
+	rm -rf ${D}${sysconfdir}/rc.d
+
+	# Remove empty testexec directory as we don't build tests
+	rm -rf ${D}${libdir}/dbus-1.0/test
+
+	# Remove /var/run as it is created on startup
+	rm -rf ${D}${localstatedir}/run
+}
+
+do_install:class-native() {
+	autotools_do_install
+
+	# dbus-launch has no X support so lets not install it in case the host
+	# has a more featured and useful version
+	rm -f ${D}${bindir}/dbus-launch
+}
+
+do_install:class-nativesdk() {
+	autotools_do_install
+
+	# dbus-launch has no X support so lets not install it in case the host
+	# has a more featured and useful version
+	rm -f ${D}${bindir}/dbus-launch
+
+	# Remove /var/run to avoid QA error
+	rm -rf ${D}${localstatedir}/run
+}
+BBCLASSEXTEND = "native nativesdk"
+
+CVE_PRODUCT += "d-bus_project:d-bus freedesktop:dbus freedesktop:libdbus"
diff --git a/poky/meta/recipes-core/dbus/dbus_1.14.8.bb b/poky/meta/recipes-core/dbus/dbus_1.14.8.bb
deleted file mode 100644
index 2dcbadd..0000000
--- a/poky/meta/recipes-core/dbus/dbus_1.14.8.bb
+++ /dev/null
@@ -1,187 +0,0 @@
-SUMMARY = "D-Bus message bus"
-DESCRIPTION = "D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a \"single instance\" application or daemon, and to launch applications and daemons on demand when their services are needed."
-HOMEPAGE = "https://dbus.freedesktop.org"
-SECTION = "base"
-
-inherit autotools pkgconfig gettext upstream-version-is-even ptest-gnome
-
-LICENSE = "AFL-2.1 | GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6423dcd74d7be9715b0db247fd889da3 \
-                    file://dbus/dbus.h;beginline=6;endline=20;md5=866739837ccd835350af94dccd6457d8 \
-                    "
-
-SRC_URI = "https://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.xz \
-           file://run-ptest \
-           file://tmpdir.patch \
-           file://dbus-1.init \
-           "
-
-SRC_URI[sha256sum] = "a6bd5bac5cf19f0c3c594bdae2565a095696980a683a0ef37cb6212e093bde35"
-
-EXTRA_OECONF = "--disable-xml-docs \
-                --disable-doxygen-docs \
-                --enable-largefile \
-                --with-system-socket=/run/dbus/system_bus_socket \
-                --enable-tests \
-                --enable-checks \
-                --enable-asserts \
-                --runstatedir=/run \
-                "
-EXTRA_OECONF:append:class-target = " SYSTEMCTL=${base_bindir}/systemctl"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd x11', d)} \
-                   user-session \
-                  "
-PACKAGECONFIG:class-native = ""
-PACKAGECONFIG:class-nativesdk = ""
-
-PACKAGECONFIG[systemd] = "--enable-systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--disable-systemd --without-systemdsystemunitdir,systemd"
-PACKAGECONFIG[x11] = "--enable-x11-autolaunch,--without-x --disable-x11-autolaunch, virtual/libx11 libsm"
-PACKAGECONFIG[user-session] = "--enable-user-session --with-systemduserunitdir=${systemd_user_unitdir},--disable-user-session"
-PACKAGECONFIG[verbose-mode] = "--enable-verbose-mode,,,"
-PACKAGECONFIG[audit] = "--enable-libaudit,--disable-libaudit,audit"
-PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
-
-DEPENDS = "expat virtual/libintl autoconf-archive-native glib-2.0"
-RDEPENDS:${PN} += "${PN}-common ${PN}-tools"
-RDEPENDS:${PN}:class-native = ""
-
-inherit useradd update-rc.d
-
-INITSCRIPT_NAME = "dbus-1"
-INITSCRIPT_PARAMS = "start 02 5 3 2 . stop 20 0 1 6 ."
-
-python __anonymous() {
-    if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
-        d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
-}
-
-PACKAGES =+ "${PN}-lib ${PN}-common ${PN}-tools"
-
-USERADD_PACKAGES = "dbus-common"
-USERADD_PARAM:dbus-common = "--system --home ${localstatedir}/lib/dbus \
-                             --no-create-home --shell /bin/false \
-                             --user-group messagebus"
-
-CONFFILES:${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf"
-
-DEBIANNAME:${PN} = "dbus-1"
-
-OLDPKGNAME = "dbus-x11"
-OLDPKGNAME:class-nativesdk = ""
-
-# for compatibility
-RPROVIDES:${PN} = "${OLDPKGNAME}"
-RREPLACES:${PN} += "${OLDPKGNAME}"
-
-FILES:${PN} = "${bindir}/dbus-daemon* \
-               ${bindir}/dbus-cleanup-sockets \
-               ${bindir}/dbus-launch \
-               ${bindir}/dbus-run-session \
-               ${libexecdir}/dbus* \
-               ${sysconfdir} \
-               ${localstatedir} \
-               ${systemd_system_unitdir} \
-               ${systemd_user_unitdir} \
-               ${nonarch_libdir}/tmpfiles.d/dbus.conf \
-"
-FILES:${PN}-common = "${sysconfdir}/dbus-1 \
-                      ${datadir}/dbus-1/services \
-                      ${datadir}/dbus-1/system-services \
-                      ${datadir}/dbus-1/session.d \
-                      ${datadir}/dbus-1/session.conf \
-                      ${datadir}/dbus-1/system.d \
-                      ${datadir}/dbus-1/system.conf \
-                      ${systemd_system_unitdir}/dbus.socket \
-                      ${systemd_system_unitdir}/sockets.target.wants \
-                      ${systemd_user_unitdir}/dbus.socket \
-                      ${systemd_user_unitdir}/sockets.target.wants \
-                      ${nonarch_libdir}/sysusers.d/dbus.conf \
-"
-FILES:${PN}-tools = "${bindir}/dbus-uuidgen \
-                     ${bindir}/dbus-send \
-                     ${bindir}/dbus-monitor \
-                     ${bindir}/dbus-update-activation-environment \
-"
-FILES:${PN}-lib = "${libdir}/lib*.so.*"
-RRECOMMENDS:${PN}-lib = "${PN}"
-FILES:${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-test-tool ${datadir}/xml/dbus-1"
-
-RDEPENDS:${PN}-ptest += "bash make dbus"
-
-PACKAGE_WRITE_DEPS += "${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','systemd-systemctl-native','',d)}"
-pkg_postinst:dbus() {
-	# If both systemd and sysvinit are enabled, mask the dbus-1 init script
-        if ${@bb.utils.contains('DISTRO_FEATURES','systemd sysvinit','true','false',d)}; then
-		if [ -n "$D" ]; then
-			OPTS="--root=$D"
-		fi
-		systemctl $OPTS mask dbus-1.service
-	fi
-
-	if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
-		/etc/init.d/populate-volatile.sh update
-	fi
-}
-
-
-do_install() {
-	autotools_do_install
-
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
-		install -d ${D}${sysconfdir}/init.d
-		sed 's:@bindir@:${bindir}:' < ${WORKDIR}/dbus-1.init >${WORKDIR}/dbus-1.init.sh
-		install -m 0755 ${WORKDIR}/dbus-1.init.sh ${D}${sysconfdir}/init.d/dbus-1
-		install -d ${D}${sysconfdir}/default/volatiles
-		echo "d messagebus messagebus 0755 /run/dbus none" \
-		     > ${D}${sysconfdir}/default/volatiles/99_dbus
-	fi
-
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-		for i in dbus.target.wants sockets.target.wants multi-user.target.wants; do \
-			install -d ${D}${systemd_system_unitdir}/$i; done
-		install -m 0644 ${B}/bus/dbus.service ${B}/bus/dbus.socket ${D}${systemd_system_unitdir}/
-		ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/dbus.target.wants/dbus.socket
-		ln -fs ../dbus.socket ${D}${systemd_system_unitdir}/sockets.target.wants/dbus.socket
-		ln -fs ../dbus.service ${D}${systemd_system_unitdir}/multi-user.target.wants/dbus.service
-	fi
-
-
-	mkdir -p ${D}${localstatedir}/lib/dbus
-
-	chown messagebus:messagebus ${D}${localstatedir}/lib/dbus
-
-	chown root:messagebus ${D}${libexecdir}/dbus-daemon-launch-helper
-	chmod 4755 ${D}${libexecdir}/dbus-daemon-launch-helper
-
-	# Remove Red Hat initscript
-	rm -rf ${D}${sysconfdir}/rc.d
-
-	# Remove empty testexec directory as we don't build tests
-	rm -rf ${D}${libdir}/dbus-1.0/test
-
-	# Remove /var/run as it is created on startup
-	rm -rf ${D}${localstatedir}/run
-}
-
-do_install:class-native() {
-	autotools_do_install
-
-	# dbus-launch has no X support so lets not install it in case the host
-	# has a more featured and useful version
-	rm -f ${D}${bindir}/dbus-launch
-}
-
-do_install:class-nativesdk() {
-	autotools_do_install
-
-	# dbus-launch has no X support so lets not install it in case the host
-	# has a more featured and useful version
-	rm -f ${D}${bindir}/dbus-launch
-
-	# Remove /var/run to avoid QA error
-	rm -rf ${D}${localstatedir}/run
-}
-BBCLASSEXTEND = "native nativesdk"
-
-CVE_PRODUCT += "d-bus_project:d-bus freedesktop:dbus freedesktop:libdbus"
diff --git a/poky/meta/recipes-core/gettext/gettext_0.22.bb b/poky/meta/recipes-core/gettext/gettext_0.22.bb
index 71e8452..f5290ac 100644
--- a/poky/meta/recipes-core/gettext/gettext_0.22.bb
+++ b/poky/meta/recipes-core/gettext/gettext_0.22.bb
@@ -182,7 +182,7 @@
     fi
 }
 
-RDEPENDS:${PN}-ptest += "make xz bash"
+RDEPENDS:${PN}-ptest += "make xz bash gawk autoconf locale-base-de-de locale-base-fr-fr"
 RDEPENDS:${PN}-ptest:append:libc-glibc = "\
     glibc-gconv-big5 \
     glibc-charmap-big5 \
@@ -202,8 +202,6 @@
     glibc-charmap-euc-jp \
     glibc-gconv-gb18030 \
     glibc-charmap-gb18030 \
-    locale-base-de-de \
-    locale-base-fr-fr \
 "
 
 RRECOMMENDS:${PN}-ptest:append:libc-glibc = "\
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
index 9bdd99d..0d44ddf 100644
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
+++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-Do-not-write-bindir-into-pkg-config-files.patch
@@ -1,4 +1,4 @@
-From 4a41bf7b050168726cc4fad4c1c72fc7c18ab779 Mon Sep 17 00:00:00 2001
+From 9ec4eedeb3f67db0bff09f5d859318d05ff47964 Mon Sep 17 00:00:00 2001
 From: Alexander Kanavin <alex.kanavin@gmail.com>
 Date: Fri, 15 Feb 2019 11:17:27 +0100
 Subject: [PATCH] Do not write $bindir into pkg-config files
@@ -16,46 +16,46 @@
  2 files changed, 11 insertions(+), 11 deletions(-)
 
 diff --git a/gio/meson.build b/gio/meson.build
-index 36b5bad..137e75a 100644
+index a320c0f..86ce7c4 100644
 --- a/gio/meson.build
 +++ b/gio/meson.build
-@@ -862,14 +862,14 @@ pkg.generate(libgio,
-                'schemasdir=' + join_paths('${datadir}', schemas_subdir),
-                'bindir=' + join_paths('${prefix}', get_option('bindir')),
-                'giomoduledir=' + pkgconfig_giomodulesdir,
--               'gio=' + join_paths('${bindir}', 'gio'),
--               'gio_querymodules=@0@'.format(pkgconfig_multiarch_bindir / 'gio-querymodules'),
--               'glib_compile_schemas=@0@'.format(pkgconfig_multiarch_bindir / 'glib-compile-schemas'),
--               'glib_compile_resources=' + join_paths('${bindir}', 'glib-compile-resources'),
--               'gdbus=' + join_paths('${bindir}', 'gdbus'),
--               'gdbus_codegen=' + join_paths('${bindir}', 'gdbus-codegen'),
--               'gresource=' + join_paths('${bindir}', 'gresource'),
--               'gsettings=' + join_paths('${bindir}', 'gsettings')],
-+               'gio=gio',
-+               'gio_querymodules=gio-querymodules',
-+               'glib_compile_schemas=glib-compile-schemas',
-+               'glib_compile_resources=glib-compile-resources',
-+               'gdbus=gdbus',
-+               'gdbus_codegen=gdbus-codegen',
-+               'gresource=gresource',
-+               'gsettings=gsettings'],
+@@ -884,14 +884,14 @@ pkg.generate(libgio,
+     'dtdsdir=' + '${datadir}' / dtds_subdir,
+     'bindir=' + '${prefix}' / get_option('bindir'),
+     'giomoduledir=' + pkgconfig_giomodulesdir,
+-    'gio=' + '${bindir}' / 'gio',
+-    'gio_querymodules=' + pkgconfig_multiarch_bindir / 'gio-querymodules',
+-    'glib_compile_schemas=' + pkgconfig_multiarch_bindir / 'glib-compile-schemas',
+-    'glib_compile_resources=' + '${bindir}' / 'glib-compile-resources',
+-    'gdbus=' + '${bindir}' /'gdbus',
+-    'gdbus_codegen=' + '${bindir}' / 'gdbus-codegen',
+-    'gresource=' + '${bindir}' / 'gresource',
+-    'gsettings=' + '${bindir}' / 'gsettings',
++    'gio=gio',
++    'gio_querymodules=gio-querymodules',
++    'glib_compile_schemas=glib-compile-schemas',
++    'glib_compile_resources=glib-compile-resources',
++    'gdbus=gdbus',
++    'gdbus_codegen=gdbus-codegen',
++    'gresource=gresource',
++    'gsettings=gsettings',
+   ],
    version : glib_version,
    install_dir : glib_pkgconfigreldir,
-   filebase : 'gio-2.0',
 diff --git a/glib/meson.build b/glib/meson.build
-index c365901..c3d6601 100644
+index c26a35e..1d8ca6b 100644
 --- a/glib/meson.build
 +++ b/glib/meson.build
-@@ -397,9 +397,9 @@ pkg.generate(libglib,
-   subdirs : ['glib-2.0'],
-   extra_cflags : ['-I${libdir}/glib-2.0/include'] + win32_cflags,
-   variables : ['bindir=' + join_paths('${prefix}', get_option('bindir')),
--               'glib_genmarshal=' + join_paths('${bindir}', 'glib-genmarshal'),
--               'gobject_query=' + join_paths('${bindir}', 'gobject-query'),
--               'glib_mkenums=' + join_paths('${bindir}', 'glib-mkenums')],
-+               'glib_genmarshal=glib-genmarshal',
-+               'gobject_query=gobject-query',
-+               'glib_mkenums=glib-mkenums'],
-   version : glib_version,
-   install_dir : glib_pkgconfigreldir,
-   filebase : 'glib-2.0',
+@@ -447,9 +447,9 @@ pkg.generate(libglib,
+   variables : [
+     'bindir=' + '${prefix}' / get_option('bindir'),
+     'datadir=' + '${prefix}' / get_option('datadir'),
+-    'glib_genmarshal=' + '${bindir}' / 'glib-genmarshal',
+-    'gobject_query=' + '${bindir}' / 'gobject-query',
+-    'glib_mkenums=' + '${bindir}' / 'glib-mkenums',
++    'glib_genmarshal=glib-genmarshal',
++    'gobject_query=gobject-query',
++    'glib_mkenums=glib-mkenums',
+     'glib_valgrind_suppressions=' + '${datadir}' /
+       valgrind_suppression_file_install_subdir /
+       fs.name(valgrind_suppression_file),
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-portal-support-Fix-snap-test-ordering-race.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-portal-support-Fix-snap-test-ordering-race.patch
deleted file mode 100644
index 9e2bc13..0000000
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gio-tests-portal-support-Fix-snap-test-ordering-race.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From f47503cc5ae10de6dee319ba6cff257eddabf33e Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Tue, 30 May 2023 11:52:38 +0100
-Subject: [PATCH] gio/tests/portal-support: Fix snap test ordering race
-
-When the gnome test runner executes the tests, the test appear to execute in disk
-order. This means it sometimes works and sometimes we see breakage in portal-support-snap
-and portal-support-snap-classic.
-
-The issue is that some tests create config files but some don't. If they run
-in the wrong order, tests see config files they shouldn't and break.
-
-Fix this by deleting the files after each test run, properly cleaning up after
-themselves. The cleanup code is based upon gtestutils.c:rm_rf().
-
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/c63cf19d9a8a6ae315a7f9a3fe4ea60c8cf5dece]
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
----
- gio/tests/portal-support-snap-classic.c |  3 +++
- gio/tests/portal-support-snap.c         |  3 +++
- gio/tests/portal-support-utils.c        | 27 +++++++++++++++++++++++++
- gio/tests/portal-support-utils.h        |  2 ++
- 4 files changed, 35 insertions(+)
-
-diff --git a/gio/tests/portal-support-snap-classic.c b/gio/tests/portal-support-snap-classic.c
-index 8c0ed90c2..5b67865e7 100644
---- a/gio/tests/portal-support-snap-classic.c
-+++ b/gio/tests/portal-support-snap-classic.c
-@@ -66,6 +66,9 @@ tests_teardown (SetupData *setup_data,
-   else
-     g_unsetenv ("SNAP");
- 
-+  cleanup_snapfiles (setup_data->snap_path);
-+  cleanup_snapfiles (setup_data->bin_path);
-+
-   g_clear_pointer (&setup_data->old_path, g_free);
-   g_clear_pointer (&setup_data->old_snap, g_free);
- }
-diff --git a/gio/tests/portal-support-snap.c b/gio/tests/portal-support-snap.c
-index 7dd14d82f..cd904678f 100644
---- a/gio/tests/portal-support-snap.c
-+++ b/gio/tests/portal-support-snap.c
-@@ -67,6 +67,9 @@ tests_teardown (SetupData *setup_data,
-   else
-     g_unsetenv ("SNAP");
- 
-+  cleanup_snapfiles (setup_data->snap_path);
-+  cleanup_snapfiles (setup_data->bin_path);
-+
-   g_clear_pointer (&setup_data->old_path, g_free);
-   g_clear_pointer (&setup_data->old_snap, g_free);
- }
-diff --git a/gio/tests/portal-support-utils.c b/gio/tests/portal-support-utils.c
-index ae7073a3a..b7ee22630 100644
---- a/gio/tests/portal-support-utils.c
-+++ b/gio/tests/portal-support-utils.c
-@@ -26,6 +26,33 @@
- #include <glib.h>
- #include <glib/gstdio.h>
- 
-+
-+void
-+cleanup_snapfiles (const gchar *path)
-+{
-+  GDir *dir = NULL;
-+  const gchar *entry;
-+
-+  dir = g_dir_open (path, 0, NULL);
-+  if (dir == NULL)
-+    {
-+      /* Assume it’s a file. Ignore failure. */
-+      (void) g_remove (path);
-+      return;
-+    }
-+
-+  while ((entry = g_dir_read_name (dir)) != NULL)
-+    {
-+      gchar *sub_path = g_build_filename (path, entry, NULL);
-+      cleanup_snapfiles (sub_path);
-+      g_free (sub_path);
-+    }
-+
-+  g_dir_close (dir);
-+
-+  g_rmdir (path);
-+}
-+
- void
- create_fake_snapctl (const char *path,
-                      const char *supported_op)
-diff --git a/gio/tests/portal-support-utils.h b/gio/tests/portal-support-utils.h
-index 40c035b43..defbdcd4e 100644
---- a/gio/tests/portal-support-utils.h
-+++ b/gio/tests/portal-support-utils.h
-@@ -23,6 +23,8 @@
- 
- #include <glib.h>
- 
-+void cleanup_snapfiles (const gchar *path);
-+
- void create_fake_snap_yaml (const char *snap_path,
-                             gboolean is_classic);
- 
--- 
-2.39.2
-
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch
deleted file mode 100644
index a881b25..0000000
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From d1a2117dc18dbcf87685891de7e2898108b66fc9 Mon Sep 17 00:00:00 2001
-From: Joan Bruguera <joanbrugueram@gmail.com>
-Date: Thu, 23 Mar 2023 02:24:30 +0000
-Subject: [PATCH] glocalfile: Sum apparent size only for files and symlinks
-
-Since GNU Coreutils 9.2 (commit 110bcd28386b1f47a4cd876098acb708fdcbbb25),
-`du --apparent-size` (including `du --bytes`) no longer counts all kinds of
-files (directories, FIFOs, etc.), but only those for which `st_size` in
-`struct stat` is defined by POSIX, namely regular files and symlinks
-(and also rarely supported memory objects).
-
-This aligns the behaviour of GLib's `G_FILE_MEASURE_APPARENT_SIZE` flag
-with the new GNU Coreutils `du` and correct POSIX use.
-
-Note that this may be a breaking change for some uses.
-
-Link: https://lists.gnu.org/archive/html/bug-coreutils/2023-03/msg00007.html
-Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2965
-
-Upstream-Status: Backport
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- gio/gioenums.h   |  3 +++
- gio/glocalfile.c | 37 +++++++++++++++++++++++++++++++++++++
- 2 files changed, 40 insertions(+)
-
-diff --git a/gio/gioenums.h b/gio/gioenums.h
-index 7fd74a43e..c820cd36d 100644
---- a/gio/gioenums.h
-+++ b/gio/gioenums.h
-@@ -224,6 +224,9 @@ typedef enum {
-  *   sizes.  Normally, the block-size is used, if available, as this is a
-  *   more accurate representation of disk space used.
-  *   Compare with `du --apparent-size`.
-+ *   Since GLib 2.78. and similarly to `du` since GNU Coreutils 9.2, this will
-+ *   ignore the sizes of file types other than regular files and links, as the
-+ *   sizes of other file types are not specified in a standard way.
-  * @G_FILE_MEASURE_NO_XDEV: Do not cross mount point boundaries.
-  *   Compare with `du -x`.
-  *
-diff --git a/gio/glocalfile.c b/gio/glocalfile.c
-index 67d4b99fb..dbb56902d 100644
---- a/gio/glocalfile.c
-+++ b/gio/glocalfile.c
-@@ -86,6 +86,9 @@
- #define FILE_READ_ONLY_VOLUME           0x00080000
- #endif
- 
-+#ifndef S_ISREG
-+#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
-+#endif
- #ifndef S_ISDIR
- #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
- #endif
-@@ -2777,6 +2780,39 @@ g_local_file_measure_size_of_contents (gint           fd,
-                                        MeasureState  *state,
-                                        GError       **error);
- 
-+/*
-+ * _g_stat_is_size_usable:
-+ * @buf: a #GLocalFileStat.
-+ *
-+ * Checks if the file type is such that the `st_size` field of `struct stat` is
-+ * well-defined by POSIX.
-+ * (see https://pubs.opengroup.org/onlinepubs/009696799/basedefs/sys/stat.h.html)
-+ *
-+ * This behaviour is aligned with `du` from GNU Coreutils 9.2+
-+ * (see https://lists.gnu.org/archive/html/bug-coreutils/2023-03/msg00007.html)
-+ * and makes apparent size sums well-defined; formerly, they depended on the
-+ * implementation, and could differ across filesystems.
-+ *
-+ * Returns: %TRUE if the size field is well-defined, %FALSE otherwise.
-+ **/
-+inline static gboolean
-+_g_stat_is_size_usable (const GLocalFileStat *buf)
-+{
-+#ifndef HAVE_STATX
-+  /* Memory objects are defined by POSIX, but are not supported by statx nor Windows */
-+#ifdef S_TYPEISSHM
-+  if (S_TYPEISSHM (buf))
-+    return TRUE;
-+#endif
-+#ifdef S_TYPEISTMO
-+  if (S_TYPEISTMO (buf))
-+    return TRUE;
-+#endif
-+#endif
-+
-+  return S_ISREG (_g_stat_mode (buf)) || S_ISLNK (_g_stat_mode (buf));
-+}
-+
- static gboolean
- g_local_file_measure_size_of_file (gint           parent_fd,
-                                    GSList        *name,
-@@ -2836,6 +2872,7 @@ g_local_file_measure_size_of_file (gint           parent_fd,
-     state->disk_usage += _g_stat_blocks (&buf) * G_GUINT64_CONSTANT (512);
-   else
- #endif
-+  if (_g_stat_is_size_usable (&buf))
-     state->disk_usage += _g_stat_size (&buf);
- 
-   if (S_ISDIR (_g_stat_mode (&buf)))
--- 
-2.39.2
-
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch
new file mode 100644
index 0000000..788f420
--- /dev/null
+++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch
@@ -0,0 +1,32 @@
+From 9aa9574861fad39d0679025e35fe1e188345f685 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex@linutronix.de>
+Date: Sat, 16 Sep 2023 22:28:27 +0200
+Subject: [PATCH] meson.build: do not enable pidfd features on native glib
+ builds
+
+We still use host distros like alma 8 with kernels older than 5.4,
+where these features are not implemented.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ meson.build | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 1c36993..bbf97fc 100644
+--- a/meson.build
++++ b/meson.build
+@@ -981,7 +981,8 @@ if cc.links('''#include <sys/syscall.h>
+                  waitid (P_PIDFD, 0, &child_info, WEXITED | WNOHANG);
+                  return 0;
+                }''', name : 'pidfd_open(2) system call')
+-  glib_conf.set('HAVE_PIDFD', 1)
++  #requires kernel 5.4+
++  #glib_conf.set('HAVE_PIDFD', 1)
+ endif
+ 
+ # Check for __uint128_t (gcc) by checking for 128-bit division
+-- 
+2.30.2
+
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
index 3dba599..841fede 100644
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
+++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
@@ -1,4 +1,4 @@
-From 38e401969a2ff8269919cbeacec733a67f041735 Mon Sep 17 00:00:00 2001
+From b90d13900dd2777c2ab90c5b0be1a872c10a17da Mon Sep 17 00:00:00 2001
 From: Ross Burton <ross.burton@intel.com>
 Date: Fri, 11 Mar 2016 15:35:55 +0000
 Subject: [PATCH] glib-2.0: relocate the GIO module directory for native builds
@@ -13,25 +13,28 @@
 
 Port patch to 2.48
 Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+
 ---
- gio/giomodule.c | 5 -----
- 1 file changed, 5 deletions(-)
+ gio/giomodule.c | 7 -------
+ 1 file changed, 7 deletions(-)
 
 diff --git a/gio/giomodule.c b/gio/giomodule.c
-index 11ce7d8..cc27ecd 100644
+index 17fabe6..8021208 100644
 --- a/gio/giomodule.c
 +++ b/gio/giomodule.c
-@@ -1271,9 +1271,6 @@ get_gio_module_dir (void)
+@@ -1271,11 +1271,6 @@ get_gio_module_dir (void)
        g_free (install_dir);
  #else
        module_dir = g_strdup (GIO_MODULE_DIR);
 -#ifdef __APPLE__
 -#include "TargetConditionals.h"
--#if TARGET_OS_OSX
+-/* Only auto-relocate on macOS, not watchOS etc; older macOS SDKs only define TARGET_OS_MAC */
+-#if (defined (TARGET_OS_OSX) && TARGET_OS_OSX) || \
+-     (!defined (TARGET_OS_OSX) && defined (TARGET_OS_MAC) && TARGET_OS_MAC)
  #include <dlfcn.h>
        {
          g_autofree gchar *path = NULL;
-@@ -1292,8 +1289,6 @@ get_gio_module_dir (void)
+@@ -1294,8 +1289,6 @@ get_gio_module_dir (void)
                }
            }
        }
@@ -40,6 +43,3 @@
  #endif
      }
  
--- 
-2.30.2
-
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.76.4.bb b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.76.4.bb
deleted file mode 100644
index 64a3c6d..0000000
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.76.4.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-require glib.inc
-
-PE = "1"
-
-SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
-           file://run-ptest \
-           file://0001-Fix-DATADIRNAME-on-uclibc-Linux.patch \
-           file://0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch \
-           file://0001-Install-gio-querymodules-as-libexec_PROGRAM.patch \
-           file://0010-Do-not-hardcode-python-path-into-various-tools.patch \
-           file://0001-Set-host_machine-correctly-when-building-with-mingw3.patch \
-           file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
-           file://0001-meson-Run-atomics-test-on-clang-as-well.patch \
-           file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
-           file://0001-gio-tests-portal-support-Fix-snap-test-ordering-race.patch \
-           file://0001-glocalfile-Sum-apparent-size-only-for-files-and-syml.patch \
-           "
-SRC_URI:append:class-native = " file://relocate-modules.patch"
-
-SRC_URI[sha256sum] = "5a5a191c96836e166a7771f7ea6ca2b0069c603c7da3cba1cd38d1694a395dda"
-
-# Find any meson cross files in FILESPATH that are relevant for the current
-# build (using siteinfo) and add them to EXTRA_OEMESON.
-inherit siteinfo
-def find_meson_cross_files(d):
-    if bb.data.inherits_class('native', d):
-        return ""
-
-    thisdir = os.path.normpath(d.getVar("THISDIR"))
-    import collections
-    sitedata = siteinfo_data(d)
-    # filename -> found
-    files = collections.OrderedDict()
-    for path in d.getVar("FILESPATH").split(":"):
-        for element in sitedata:
-            filename = os.path.normpath(os.path.join(path, "meson.cross.d", element))
-            sanitized_path = filename.replace(thisdir, "${THISDIR}")
-            if sanitized_path == filename:
-                if os.path.exists(filename):
-                    bb.error("Cannot add '%s' to --cross-file, because it's not relative to THISDIR '%s' and sstate signature would contain this full path" % (filename, thisdir))
-                continue
-            files[filename.replace(thisdir, "${THISDIR}")] = os.path.exists(filename)
-
-    items = ["--cross-file=" + k for k,v in files.items() if v]
-    d.appendVar("EXTRA_OEMESON", " " + " ".join(items))
-    items = ["%s:%s" % (k, "True" if v else "False") for k,v in files.items()]
-    d.appendVarFlag("do_configure", "file-checksums", " " + " ".join(items))
-
-python () {
-    find_meson_cross_files(d)
-}
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb
new file mode 100644
index 0000000..500e4e8
--- /dev/null
+++ b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb
@@ -0,0 +1,53 @@
+require glib.inc
+
+PE = "1"
+
+SHRT_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
+           file://run-ptest \
+           file://0001-Fix-DATADIRNAME-on-uclibc-Linux.patch \
+           file://0001-Remove-the-warning-about-deprecated-paths-in-schemas.patch \
+           file://0001-Install-gio-querymodules-as-libexec_PROGRAM.patch \
+           file://0010-Do-not-hardcode-python-path-into-various-tools.patch \
+           file://0001-Set-host_machine-correctly-when-building-with-mingw3.patch \
+           file://0001-Do-not-write-bindir-into-pkg-config-files.patch \
+           file://0001-meson-Run-atomics-test-on-clang-as-well.patch \
+           file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
+           "
+SRC_URI:append:class-native = " file://relocate-modules.patch \ 
+                                file://0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch \
+                              "
+
+SRC_URI[sha256sum] = "44eaab8b720877ce303c5540b657b126f12dc94972d9880b52959f43fb537b30"
+
+# Find any meson cross files in FILESPATH that are relevant for the current
+# build (using siteinfo) and add them to EXTRA_OEMESON.
+inherit siteinfo
+def find_meson_cross_files(d):
+    if bb.data.inherits_class('native', d):
+        return ""
+
+    thisdir = os.path.normpath(d.getVar("THISDIR"))
+    import collections
+    sitedata = siteinfo_data(d)
+    # filename -> found
+    files = collections.OrderedDict()
+    for path in d.getVar("FILESPATH").split(":"):
+        for element in sitedata:
+            filename = os.path.normpath(os.path.join(path, "meson.cross.d", element))
+            sanitized_path = filename.replace(thisdir, "${THISDIR}")
+            if sanitized_path == filename:
+                if os.path.exists(filename):
+                    bb.error("Cannot add '%s' to --cross-file, because it's not relative to THISDIR '%s' and sstate signature would contain this full path" % (filename, thisdir))
+                continue
+            files[filename.replace(thisdir, "${THISDIR}")] = os.path.exists(filename)
+
+    items = ["--cross-file=" + k for k,v in files.items() if v]
+    d.appendVar("EXTRA_OEMESON", " " + " ".join(items))
+    items = ["%s:%s" % (k, "True" if v else "False") for k,v in files.items()]
+    d.appendVarFlag("do_configure", "file-checksums", " " + " ".join(items))
+
+python () {
+    find_meson_cross_files(d)
+}
diff --git a/poky/meta/recipes-core/glib-2.0/glib.inc b/poky/meta/recipes-core/glib-2.0/glib.inc
index 878dd10..b946e79 100644
--- a/poky/meta/recipes-core/glib-2.0/glib.inc
+++ b/poky/meta/recipes-core/glib-2.0/glib.inc
@@ -54,6 +54,7 @@
                ${libdir}/gio \
                ${libexecdir}/*gio-querymodules \
                ${libexecdir}/*gio-launch-desktop \
+               ${datadir}/glib-2.0/dtds \
                ${datadir}/glib-2.0/schemas"
 
 FILES:${PN}-utils += "${bindir}/glib-genmarshal \
@@ -133,7 +134,13 @@
         # https://gitlab.gnome.org/GNOME/glib/-/issues/2810
         rm -f ${D}${datadir}/installed-tests/glib/thread-pool-slow.test
 }
-
+do_install:append:class-target:libc-musl () {
+        # Remove failing tests on musl libc systems, this helps set baseline for musl testing
+        # they remain to be rootcaused and fixed but marked known failures here.
+        for t in convert.test collate.test gdatetime.test date.test converter-stream.test option-context.test; do
+                rm -rf ${D}${datadir}/installed-tests/glib/$t
+        done
+}
 # As we do not build python3 for windows, makes no sense to ship the script that's using it
 do_install:append:mingw32() {
         rm -f ${D}${bindir}/gtester-report
@@ -170,6 +177,12 @@
             python3-modules \
             ${@bb.utils.contains('GI_DATA_ENABLED', 'True', 'python3-dbusmock', '', d)} \
             ${PN}-codegen \
+            locale-base-de-de \
+            locale-base-es-es \
+            locale-base-en-gb \
+            locale-base-en-us \
+            locale-base-fr-fr \
+            locale-base-ru-ru \
            "
 
 RDEPENDS:${PN}-ptest:append:libc-glibc = "\
@@ -184,18 +197,12 @@
             glibc-gconv-iso8859-15 \
             glibc-charmap-invariant \
             glibc-localedata-translit-cjk-variants \
-            locale-base-tr-tr \
             locale-base-lt-lt \
             locale-base-ja-jp.euc-jp \
             locale-base-fa-ir \
-            locale-base-ru-ru \
-            locale-base-de-de \
             locale-base-hr-hr \
             locale-base-el-gr \
-            locale-base-fr-fr \
-            locale-base-es-es \
-            locale-base-en-gb \
-            locale-base-en-us \
             locale-base-pl-pl \
             locale-base-pl-pl.iso-8859-2 \
+            locale-base-tr-tr \
            "
diff --git a/poky/meta/recipes-core/glibc/glibc-tests_2.38.bb b/poky/meta/recipes-core/glibc/glibc-tests_2.38.bb
deleted file mode 100644
index 95eb774d..0000000
--- a/poky/meta/recipes-core/glibc/glibc-tests_2.38.bb
+++ /dev/null
@@ -1,119 +0,0 @@
-require glibc_${PV}.bb
-require glibc-tests.inc
-
-inherit ptest features_check
-REQUIRED_DISTRO_FEATURES = "ptest"
-
-SRC_URI += "\
-	file://run-ptest \
-"
-
-SUMMARY = "glibc tests to be run with ptest"
-
-# Erase some variables already set by glibc_${PV}
-python __anonymous() {
-       # Remove packages provided by glibc build, we only need a subset of them
-       d.setVar("PACKAGES", "${PN} ${PN}-ptest")
-
-       d.setVar("PROVIDES", "${PN} ${PN}-ptest")
-
-       bbclassextend = d.getVar("BBCLASSEXTEND").replace("nativesdk", "").strip()
-       d.setVar("BBCLASSEXTEND", bbclassextend)
-       d.setVar("RRECOMMENDS", "")
-       d.setVar("SYSTEMD_SERVICE:nscd", "")
-       d.setVar("SYSTEMD_PACKAGES", "")
-}
-
-# Remove any leftovers from original glibc recipe
-RPROVIDES:${PN} = "${PN}"
-RRECOMMENDS:${PN} = ""
-RDEPENDS:${PN} = "glibc libgcc sed bash"
-RDEPENDS:${PN}-ptest = "${PN}"
-DEPENDS += "sed"
-
-export oe_srcdir="${exec_prefix}/src/debug/glibc/${PV}/"
-
-# Just build tests for target - do not run them
-do_check:append () {
-	oe_runmake -i check run-built-tests=no
-}
-addtask do_check after do_compile before do_install_ptest_base
-
-glibc_strip_build_directory () {
-	# Delete all non executable files from build directory
-	find ${B} ! -executable -type f -delete
-
-	# Remove build dynamic libraries and links to them as
-	# those are already installed in the target device
-	find ${B} -type f -name "*.so" -delete
-	find ${B} -type l -name "*.so*" -delete
-
-	# Remove headers (installed with glibc)
-	find ${B} -type f -name "*.h" -delete
-
-	find ${B} -type f -name "isomac" -delete
-	find ${B} -type f -name "annexc" -delete
-}
-
-do_install_ptest_base () {
-	glibc_strip_build_directory
-
-	ls -r ${B}/*/*-time64 > ${B}/tst_time64
-
-	# Remove '-time64' suffix - those tests are also time related
-	sed -e "s/-time64$//" ${B}/tst_time64 > ${B}/tst_time_tmp
-	tst_time=$(cat ${B}/tst_time_tmp ${B}/tst_time64)
-
-	rm ${B}/tst_time_tmp ${B}/tst_time64
-	echo "${tst_time}"
-
-	# Install build test programs to the image
-	install -d ${D}${PTEST_PATH}/tests/glibc-ptest/
-
-	for f in "${tst_time}"
-	do
-	    cp -r ${f} ${D}${PTEST_PATH}/tests/glibc-ptest/
-	done
-
-	install -d ${D}${PTEST_PATH}
-	cp ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/
-
-}
-
-# The datadir directory is required to allow core (and reused)
-# glibc cleanup function to finish correctly, as this directory
-# is not created for ptests
-stash_locale_package_cleanup:prepend () {
-	mkdir -p ${PKGD}${datadir}
-}
-
-stash_locale_sysroot_cleanup:prepend () {
-	mkdir -p ${SYSROOT_DESTDIR}${datadir}
-}
-
-# Prevent the do_package() task to set 'libc6' prefix
-# for glibc tests related packages
-python populate_packages:prepend () {
-    if d.getVar('DEBIAN_NAMES'):
-        d.setVar('DEBIAN_NAMES', '')
-}
-
-FILES:${PN} = "${PTEST_PATH}/* /usr/src/debug/${PN}/*"
-
-EXCLUDE_FROM_SHLIBS = "1"
-
-# Install debug data in .debug and sources in /usr/src/debug
-# It is more handy to have _all_ the sources and symbols in one
-# place (package) as this recipe will be used for validation and
-# debugging.
-PACKAGE_DEBUG_SPLIT_STYLE = ".debug"
-
-# glibc test cases violate by default some Yocto/OE checks (staticdev,
-# textrel)
-# 'debug-files' - add everything (including debug) into one package
-#                 (no need to install/build *-src package)
-INSANE_SKIP:${PN} += "staticdev textrel debug-files rpaths"
-
-deltask do_stash_locale
-do_install[noexec] = "1"
-do_populate_sysroot[noexec] = "1"
diff --git a/poky/meta/recipes-core/glibc/glibc-version.inc b/poky/meta/recipes-core/glibc/glibc-version.inc
index a907444..19b98bc 100644
--- a/poky/meta/recipes-core/glibc/glibc-version.inc
+++ b/poky/meta/recipes-core/glibc/glibc-version.inc
@@ -1,8 +1,13 @@
 SRCBRANCH ?= "release/2.38/master"
 PV = "2.38+git"
-SRCREV_glibc ?= "1aed90c9c8f8be9f68b58e96b6e4cd0fc08eb2b1"
+SRCREV_glibc ?= "750a45a783906a19591fb8ff6b7841470f1f5701"
 SRCREV_localedef ?= "e0eca29583b9e0f62645c4316ced93cf4e4e26e1"
 
 GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git;protocol=https"
 
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.(?!90)\d+)*)"
+
+CVE_STATUS[CVE-2023-4527] = "fixed-version: Fixed in stable branch updates"
+CVE_STATUS[CVE-2023-4911] = "fixed-version: Fixed in stable branch updates"
+CVE_STATUS[CVE-2023-4806] = "fixed-version: Fixed in stable branch updates"
+CVE_STATUS[CVE-2023-4527] = "fixed-version: Fixed in stable branch updates"
diff --git a/poky/meta/recipes-core/glibc/glibc-y2038-tests_2.38.bb b/poky/meta/recipes-core/glibc/glibc-y2038-tests_2.38.bb
new file mode 100644
index 0000000..be49ca4
--- /dev/null
+++ b/poky/meta/recipes-core/glibc/glibc-y2038-tests_2.38.bb
@@ -0,0 +1,119 @@
+require glibc_${PV}.bb
+require glibc-tests.inc
+
+inherit ptest features_check
+REQUIRED_DISTRO_FEATURES = "ptest"
+
+SRC_URI += "\
+	file://run-ptest \
+"
+
+SUMMARY = "glibc tests using time32/time64 interfaces to be run with ptest for the purpose of checking y2038 compatiblity"
+
+# Erase some variables already set by glibc_${PV}
+python __anonymous() {
+       # Remove packages provided by glibc build, we only need a subset of them
+       d.setVar("PACKAGES", "${PN} ${PN}-ptest")
+
+       d.setVar("PROVIDES", "${PN} ${PN}-ptest")
+
+       bbclassextend = d.getVar("BBCLASSEXTEND").replace("nativesdk", "").strip()
+       d.setVar("BBCLASSEXTEND", bbclassextend)
+       d.setVar("RRECOMMENDS", "")
+       d.setVar("SYSTEMD_SERVICE:nscd", "")
+       d.setVar("SYSTEMD_PACKAGES", "")
+}
+
+# Remove any leftovers from original glibc recipe
+RPROVIDES:${PN} = "${PN}"
+RRECOMMENDS:${PN} = ""
+RDEPENDS:${PN} = "glibc libgcc sed bash"
+RDEPENDS:${PN}-ptest = "${PN}"
+DEPENDS += "sed"
+
+export oe_srcdir="${exec_prefix}/src/debug/glibc/${PV}/"
+
+# Just build tests for target - do not run them
+do_check:append () {
+	oe_runmake -i check run-built-tests=no
+}
+addtask do_check after do_compile before do_install_ptest_base
+
+glibc_strip_build_directory () {
+	# Delete all non executable files from build directory
+	find ${B} ! -executable -type f -delete
+
+	# Remove build dynamic libraries and links to them as
+	# those are already installed in the target device
+	find ${B} -type f -name "*.so" -delete
+	find ${B} -type l -name "*.so*" -delete
+
+	# Remove headers (installed with glibc)
+	find ${B} -type f -name "*.h" -delete
+
+	find ${B} -type f -name "isomac" -delete
+	find ${B} -type f -name "annexc" -delete
+}
+
+do_install_ptest_base () {
+	glibc_strip_build_directory
+
+	ls -r ${B}/*/*-time64 > ${B}/tst_time64
+
+	# Remove '-time64' suffix - those tests are also time related
+	sed -e "s/-time64$//" ${B}/tst_time64 > ${B}/tst_time_tmp
+	tst_time=$(cat ${B}/tst_time_tmp ${B}/tst_time64)
+
+	rm ${B}/tst_time_tmp ${B}/tst_time64
+	echo "${tst_time}"
+
+	# Install build test programs to the image
+	install -d ${D}${PTEST_PATH}/tests/glibc-ptest/
+
+	for f in "${tst_time}"
+	do
+	    cp -r ${f} ${D}${PTEST_PATH}/tests/glibc-ptest/
+	done
+
+	install -d ${D}${PTEST_PATH}
+	cp ${WORKDIR}/run-ptest ${D}${PTEST_PATH}/
+
+}
+
+# The datadir directory is required to allow core (and reused)
+# glibc cleanup function to finish correctly, as this directory
+# is not created for ptests
+stash_locale_package_cleanup:prepend () {
+	mkdir -p ${PKGD}${datadir}
+}
+
+stash_locale_sysroot_cleanup:prepend () {
+	mkdir -p ${SYSROOT_DESTDIR}${datadir}
+}
+
+# Prevent the do_package() task to set 'libc6' prefix
+# for glibc tests related packages
+python populate_packages:prepend () {
+    if d.getVar('DEBIAN_NAMES'):
+        d.setVar('DEBIAN_NAMES', '')
+}
+
+FILES:${PN} = "${PTEST_PATH}/* /usr/src/debug/${PN}/*"
+
+EXCLUDE_FROM_SHLIBS = "1"
+
+# Install debug data in .debug and sources in /usr/src/debug
+# It is more handy to have _all_ the sources and symbols in one
+# place (package) as this recipe will be used for validation and
+# debugging.
+PACKAGE_DEBUG_SPLIT_STYLE = ".debug"
+
+# glibc test cases violate by default some Yocto/OE checks (staticdev,
+# textrel)
+# 'debug-files' - add everything (including debug) into one package
+#                 (no need to install/build *-src package)
+INSANE_SKIP:${PN} += "staticdev textrel debug-files rpaths"
+
+deltask do_stash_locale
+do_install[noexec] = "1"
+do_populate_sysroot[noexec] = "1"
diff --git a/poky/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb b/poky/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
index e867ceb..4db67c3 100644
--- a/poky/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
+++ b/poky/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
@@ -18,7 +18,6 @@
            file://add-riscv-support.patch \
 "
 
-PR = "r2"
 
 FILESEXTRAPATHS =. "${FILE_DIRNAME}/${P}:"
 
diff --git a/poky/meta/recipes-core/images/core-image-ptest.bb b/poky/meta/recipes-core/images/core-image-ptest.bb
index b81ab7b..b6f5c2f 100644
--- a/poky/meta/recipes-core/images/core-image-ptest.bb
+++ b/poky/meta/recipes-core/images/core-image-ptest.bb
@@ -24,6 +24,9 @@
 IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-strace = "1024288"
 IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-lttng-tools = "1524288"
 
+# tar-ptest in particular needs more space
+IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-tar = "1524288"
+
 # ptests need more memory than standard to avoid the OOM killer
 QB_MEM = "-m 1024"
 QB_MEM:virtclass-mcextend-lttng-tools = "-m 4096"
diff --git a/poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb b/poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
index d39323d..409b1c0 100644
--- a/poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
+++ b/poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
@@ -4,7 +4,6 @@
 SECTION = "base"
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://${WORKDIR}/copyright;md5=3dd6192d306f582dee7687da3d8748ab"
-PR = "r7"
 
 inherit update-rc.d
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
index ab460ac..198459f 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-boot_1.0.bb
@@ -3,7 +3,6 @@
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 SRC_URI = "file://init-boot.sh"
 
-PR = "r2"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
index 4e76e20..39ea51c 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb
@@ -4,7 +4,6 @@
 RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_base-utils}"
 RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
 
-PR = "r4"
 
 inherit allarch
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
index 59a5305..847dbc0 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-live-boot-tiny_1.0.bb
@@ -5,7 +5,6 @@
 RDEPENDS:${PN} = "busybox-mdev"
 SRC_URI = "file://init-live.sh"
 
-PR = "r12"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
index 8f56d7a..b3b991b 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-live-boot_1.0.bb
@@ -5,7 +5,6 @@
 RDEPENDS:${PN} = "udev udev-extraconf"
 SRC_URI = "file://init-live.sh"
 
-PR = "r12"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
index ecbd567..e10faad 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-live-install-efi_1.0.bb
@@ -3,7 +3,6 @@
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 SRC_URI = "file://init-install-efi.sh"
 
-PR = "r1"
 
 RDEPENDS:${PN} = "parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
 RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
index 674d49e..9046d06 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-live-install_1.0.bb
@@ -3,7 +3,6 @@
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 SRC_URI = "file://init-install.sh"
 
-PR = "r9"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
index fb19484..b749964 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb
@@ -4,7 +4,6 @@
 RDEPENDS:${PN} = "initramfs-framework-base parted e2fsprogs-mke2fs dosfstools util-linux-blkid ${VIRTUAL-RUNTIME_base-utils}"
 RRECOMMENDS:${PN} = "${VIRTUAL-RUNTIME_base-utils-syslog}"
 
-PR = "r4"
 
 SRC_URI = "file://init-install-efi.sh"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
index 0fc2c00..11db712 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb
@@ -9,7 +9,6 @@
 COMPATIBLE_HOST:armv7a = 'null'
 COMPATIBLE_HOST:armv7ve = 'null'
 
-PR = "r1"
 
 SRC_URI = "file://init-install.sh"
 
diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb b/poky/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
index d8ce024..48a779e 100644
--- a/poky/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
+++ b/poky/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb
@@ -3,7 +3,6 @@
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 RDEPENDS:${PN} = "initramfs-framework-base udev-extraconf"
 
-PR = "r4"
 
 inherit allarch
 
diff --git a/poky/meta/recipes-core/initscripts/initscripts_1.0.bb b/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
index 4dc477b..4b34c6a 100644
--- a/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
+++ b/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
@@ -4,7 +4,6 @@
 SECTION = "base"
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://functions;beginline=7;endline=7;md5=829e563511c9a1d6d41f17a7a4989d6a"
-PR = "r155"
 
 INHIBIT_DEFAULT_DEPS = "1"
 
diff --git a/poky/meta/recipes-core/kbd/kbd_2.6.2.bb b/poky/meta/recipes-core/kbd/kbd_2.6.2.bb
deleted file mode 100644
index abd039f..0000000
--- a/poky/meta/recipes-core/kbd/kbd_2.6.2.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "Keytable files and keyboard utilities"
-HOMEPAGE = "http://www.kbd-project.org/"
-DESCRIPTION = "The kbd project contains tools for managing Linux console (Linux console, virtual terminals, keyboard, etc.) – mainly, what they do is loading console fonts and keyboard maps."
-# everything minus console-fonts is GPL-2.0-or-later
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-inherit autotools gettext pkgconfig
-
-DEPENDS += "flex-native"
-
-RREPLACES:${PN} = "console-tools"
-RPROVIDES:${PN} = "console-tools"
-RCONFLICTS:${PN} = "console-tools"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
-           "
-
-SRC_URI[sha256sum] = "33e3bb3c3f55933b10f053b14b5f69a2e24c28543e9ec7690246fe47628dd94f"
-
-EXTRA_OECONF = "--disable-tests"
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
-                  "
-
-PACKAGECONFIG[pam] = "--enable-vlock, --disable-vlock, libpam,"
-
-PACKAGES += "${PN}-consolefonts ${PN}-keymaps ${PN}-unimaps ${PN}-consoletrans"
-
-FILES:${PN}-consolefonts = "${datadir}/consolefonts"
-FILES:${PN}-consoletrans = "${datadir}/consoletrans"
-FILES:${PN}-keymaps = "${datadir}/keymaps"
-FILES:${PN}-unimaps = "${datadir}/unimaps"
-
-do_install:append () {
-    if [ "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)}" = "yes" ] \
-    && [ -f ${D}${sysconfdir}/pam.d/vlock ]; then
-        mv -f ${D}${sysconfdir}/pam.d/vlock ${D}${sysconfdir}/pam.d/vlock.kbd
-    fi
-}
-
-inherit update-alternatives
-
-ALTERNATIVE:${PN} = "chvt deallocvt fgconsole openvt showkey \
-                     ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'vlock','', d)}"
-ALTERNATIVE_PRIORITY = "100"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-core/kbd/kbd_2.6.3.bb b/poky/meta/recipes-core/kbd/kbd_2.6.3.bb
new file mode 100644
index 0000000..5287781
--- /dev/null
+++ b/poky/meta/recipes-core/kbd/kbd_2.6.3.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Keytable files and keyboard utilities"
+HOMEPAGE = "http://www.kbd-project.org/"
+DESCRIPTION = "The kbd project contains tools for managing Linux console (Linux console, virtual terminals, keyboard, etc.) – mainly, what they do is loading console fonts and keyboard maps."
+# everything minus console-fonts is GPL-2.0-or-later
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit autotools gettext pkgconfig
+
+DEPENDS += "flex-native"
+
+RREPLACES:${PN} = "console-tools"
+RPROVIDES:${PN} = "console-tools"
+RCONFLICTS:${PN} = "console-tools"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
+           "
+
+SRC_URI[sha256sum] = "04996c08d7d1c460966fb244a3d3883352c2674b7ad522003d9f4ecb8ab48deb"
+
+EXTRA_OECONF = "--disable-tests"
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+                  "
+
+PACKAGECONFIG[pam] = "--enable-vlock, --disable-vlock, libpam,"
+
+PACKAGES += "${PN}-consolefonts ${PN}-keymaps ${PN}-unimaps ${PN}-consoletrans"
+
+FILES:${PN}-consolefonts = "${datadir}/consolefonts"
+FILES:${PN}-consoletrans = "${datadir}/consoletrans"
+FILES:${PN}-keymaps = "${datadir}/keymaps"
+FILES:${PN}-unimaps = "${datadir}/unimaps"
+
+do_install:append () {
+    if [ "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'yes', 'no', d)}" = "yes" ] \
+    && [ -f ${D}${sysconfdir}/pam.d/vlock ]; then
+        mv -f ${D}${sysconfdir}/pam.d/vlock ${D}${sysconfdir}/pam.d/vlock.kbd
+    fi
+}
+
+inherit update-alternatives
+
+ALTERNATIVE:${PN} = "chvt deallocvt fgconsole openvt showkey \
+                     ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'vlock','', d)}"
+ALTERNATIVE_PRIORITY = "100"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb b/poky/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb
index ec9f9f4..d5546ce 100644
--- a/poky/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb
+++ b/poky/meta/recipes-core/libxcrypt/libxcrypt-compat_4.4.36.bb
@@ -13,6 +13,6 @@
 do_install:append () {
 	rm -rf ${D}${includedir}
 	rm -rf ${D}${libdir}/pkgconfig
+	rm -rf ${D}${libdir}/libcrypt.so
 	rm -rf ${D}${datadir}
 }
-
diff --git a/poky/meta/recipes-core/meta/cve-update-nvd2-native.bb b/poky/meta/recipes-core/meta/cve-update-nvd2-native.bb
index 2f7dad7..d0321f1 100644
--- a/poky/meta/recipes-core/meta/cve-update-nvd2-native.bb
+++ b/poky/meta/recipes-core/meta/cve-update-nvd2-native.bb
@@ -225,7 +225,7 @@
         c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
 
         c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
-            SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT)")
+            SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)")
 
         c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
             VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
@@ -299,6 +299,7 @@
     """
 
     accessVector = None
+    vectorString = None
     cveId = elt['cve']['id']
     if elt['cve']['vulnStatus'] ==  "Rejected":
         return
@@ -309,25 +310,29 @@
     date = elt['cve']['lastModified']
     try:
         accessVector = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['accessVector']
+        vectorString = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['vectorString']
         cvssv2 = elt['cve']['metrics']['cvssMetricV2'][0]['cvssData']['baseScore']
     except KeyError:
         cvssv2 = 0.0
     cvssv3 = None
     try:
         accessVector = accessVector or elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['attackVector']
+        vectorString = vectorString or elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['vectorString']
         cvssv3 = elt['cve']['metrics']['cvssMetricV30'][0]['cvssData']['baseScore']
     except KeyError:
         pass
     try:
         accessVector = accessVector or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['attackVector']
+        vectorString = vectorString or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['vectorString']
         cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']
     except KeyError:
         pass
     accessVector = accessVector or "UNKNOWN"
+    vectorString = vectorString or "UNKNOWN"
     cvssv3 = cvssv3 or 0.0
 
-    conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?)",
-                [cveId, cveDesc, cvssv2, cvssv3, date, accessVector]).close()
+    conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?)",
+                [cveId, cveDesc, cvssv2, cvssv3, date, accessVector, vectorString]).close()
 
     try:
         for config in elt['cve']['configurations']:
diff --git a/poky/meta/recipes-core/meta/meta-environment.bb b/poky/meta/recipes-core/meta/meta-environment.bb
index 7118fb2..65436bc 100644
--- a/poky/meta/recipes-core/meta/meta-environment.bb
+++ b/poky/meta/recipes-core/meta/meta-environment.bb
@@ -1,6 +1,5 @@
 SUMMARY = "Package of environment files for SDK"
 LICENSE = "MIT"
-PR = "r8"
 
 EXCLUDE_FROM_WORLD = "1"
 
diff --git a/poky/meta/recipes-core/meta/meta-ide-support.bb b/poky/meta/recipes-core/meta/meta-ide-support.bb
index 7f349f6..d85aa12 100644
--- a/poky/meta/recipes-core/meta/meta-ide-support.bb
+++ b/poky/meta/recipes-core/meta/meta-ide-support.bb
@@ -3,7 +3,6 @@
 LICENSE = "MIT"
 
 DEPENDS = "virtual/libc gdb-cross-${TARGET_ARCH} qemu-native qemu-helper-native unfs3-native cmake-native autoconf-native automake-native meson-native intltool-native pkgconfig-native"
-PR = "r3"
 RM_WORK_EXCLUDE += "${PN}"
 
 inherit toolchain-scripts nopackages deploy testsdk
diff --git a/poky/meta/recipes-core/meta/meta-toolchain.bb b/poky/meta/recipes-core/meta/meta-toolchain.bb
index b02b066..260e039 100644
--- a/poky/meta/recipes-core/meta/meta-toolchain.bb
+++ b/poky/meta/recipes-core/meta/meta-toolchain.bb
@@ -1,6 +1,5 @@
 SUMMARY = "Meta package for building a installable toolchain"
 LICENSE = "MIT"
 
-PR = "r7"
 
 inherit populate_sdk
diff --git a/poky/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb b/poky/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
index 4909401..bb4e746 100644
--- a/poky/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
+++ b/poky/meta/recipes-core/meta/nativesdk-buildtools-perl-dummy.bb
@@ -36,7 +36,6 @@
     /usr/bin/perl \
     "
 
-PR = "r2"
 
 require dummy-sdk-package.inc
 
diff --git a/poky/meta/recipes-core/musl/bsd-headers/sys-cdefs.h b/poky/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
index 209a623..841a5da 100644
--- a/poky/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
+++ b/poky/meta/recipes-core/musl/bsd-headers/sys-cdefs.h
@@ -1,3 +1,6 @@
+#ifndef _SYS_CDEFS_H_
+#define _SYS_CDEFS_H_
+
 #warning usage of non-standard #include <sys/cdefs.h> is deprecated
 
 #undef __P
@@ -24,3 +27,8 @@
 # define __THROW
 # define __NTH(fct)     fct
 #endif
+
+#define __CONCAT(x,y)   x ## y
+#define __STRING(x)     #x
+
+#endif /* _SYS_CDEFS_H_ */
diff --git a/poky/meta/recipes-core/musl/libc-test/run-libc-ptests b/poky/meta/recipes-core/musl/libc-test/run-libc-ptests
new file mode 100644
index 0000000..0b4b687
--- /dev/null
+++ b/poky/meta/recipes-core/musl/libc-test/run-libc-ptests
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+set -e
+
+cd /opt/libc-test
+make cleanall
+make run || true
+
+echo ""
+echo "--- ptest result ---"
+# libc-test runs tests by module(e.g. src/api) and generates sub-module test
+# report(e.g. src/api/REPORT) first. After all tests finish, it generates the
+# consolidated report file src/REPORT.
+report="/opt/libc-test/src/REPORT"
+if ! [ -f "${report}" ]; then
+    echo "${report} not found!"
+    echo "FAIL: libc-test"
+    exit 1
+# libc-test prints error on failure and prints nothing on success.
+elif grep -q '^FAIL src.*\.exe.*' "${report}"; then
+    # Print test failure in ptest format.
+    # e.g. "FAIL src/api/main.exe [status 1]" -> "FAIL: api_main"
+    grep '^FAIL src.*\.exe.*' "${report}" \
+        | sed 's|^FAIL src/|FAIL: |;s|/|_|;s|\.exe.*\]||'
+    exit 1
+else
+    echo "PASS: libc-test"
+fi
diff --git a/poky/meta/recipes-core/musl/libc-test/run-ptest b/poky/meta/recipes-core/musl/libc-test/run-ptest
index 0b4b687..53cd34f 100644
--- a/poky/meta/recipes-core/musl/libc-test/run-ptest
+++ b/poky/meta/recipes-core/musl/libc-test/run-ptest
@@ -1,28 +1,3 @@
 #!/bin/sh
-
-set -e
-
-cd /opt/libc-test
-make cleanall
-make run || true
-
-echo ""
-echo "--- ptest result ---"
-# libc-test runs tests by module(e.g. src/api) and generates sub-module test
-# report(e.g. src/api/REPORT) first. After all tests finish, it generates the
-# consolidated report file src/REPORT.
-report="/opt/libc-test/src/REPORT"
-if ! [ -f "${report}" ]; then
-    echo "${report} not found!"
-    echo "FAIL: libc-test"
-    exit 1
-# libc-test prints error on failure and prints nothing on success.
-elif grep -q '^FAIL src.*\.exe.*' "${report}"; then
-    # Print test failure in ptest format.
-    # e.g. "FAIL src/api/main.exe [status 1]" -> "FAIL: api_main"
-    grep '^FAIL src.*\.exe.*' "${report}" \
-        | sed 's|^FAIL src/|FAIL: |;s|/|_|;s|\.exe.*\]||'
-    exit 1
-else
-    echo "PASS: libc-test"
-fi
+chown -R ptest:ptest /opt/libc-test
+ su -c ./run-libc-ptests ptest
diff --git a/poky/meta/recipes-core/musl/libc-test_git.bb b/poky/meta/recipes-core/musl/libc-test_git.bb
index e63abe8..619a959 100644
--- a/poky/meta/recipes-core/musl/libc-test_git.bb
+++ b/poky/meta/recipes-core/musl/libc-test_git.bb
@@ -13,6 +13,7 @@
 SRC_URI = " \
     git://repo.or.cz/libc-test;branch=master;protocol=https \
     file://run-ptest \
+    file://run-libc-ptests \
 "
 
 PV = "0+git"
@@ -48,5 +49,9 @@
     cp -r ${S}/src ${D}${install_path}
 }
 
+do_install_ptest_base:append() {
+    install -Dm 0755 ${WORKDIR}/run-libc-ptests ${D}${PTEST_PATH}/run-libc-ptests
+}
+
 COMPATIBLE_HOST = "null"
 COMPATIBLE_HOST:libc-musl = "(.*)"
diff --git a/poky/meta/recipes-core/musl/musl-legacy-error.bb b/poky/meta/recipes-core/musl/musl-legacy-error.bb
new file mode 100644
index 0000000..5ce5a23
--- /dev/null
+++ b/poky/meta/recipes-core/musl/musl-legacy-error.bb
@@ -0,0 +1,26 @@
+# Copyright (C) 2023 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "error API GNU extention implementation"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://error.h;beginline=1;md5=2ee396b23e8507fbf8f98af0471a77c6"
+SECTION = "devel"
+
+SRC_URI = "file://error.h"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+S = "${WORKDIR}"
+
+do_install() {
+	install -Dm 0644 ${S}/error.h -t ${D}${includedir}
+}
+#
+# We will skip parsing for non-musl systems
+#
+COMPATIBLE_HOST = ".*-musl.*"
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
diff --git a/poky/meta/recipes-core/musl/musl-legacy-error/error.h b/poky/meta/recipes-core/musl/musl-legacy-error/error.h
new file mode 100644
index 0000000..9a4e1f8
--- /dev/null
+++ b/poky/meta/recipes-core/musl/musl-legacy-error/error.h
@@ -0,0 +1,60 @@
+#ifndef _ERROR_H_
+#define _ERROR_H_
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#warning usage of non-standard #include <error.h> is deprecated
+
+static unsigned int error_message_count = 0;
+
+static inline void error(int status, int errnum, const char* format, ...)
+{
+	/* should be fflush(stdout), but that's unspecified if stdout has been closed;
+	 * stick with fflush(NULL) for simplicity (glibc checks if the fd is still valid) */
+	fflush(NULL);
+
+	va_list ap;
+	fprintf(stderr, "%s: ", program_invocation_name);
+	va_start(ap, format);
+	vfprintf(stderr, format, ap);
+	va_end(ap);
+	if (errnum)
+		fprintf(stderr, ": %s", strerror(errnum));
+	fprintf(stderr, "\n");
+	error_message_count++;
+	if (status)
+		exit(status);
+}
+
+static int error_one_per_line = 0;
+
+static inline void error_at_line(int status, int errnum, const char *filename,
+		unsigned int linenum, const char *format, ...)
+{
+	va_list ap;
+	if (error_one_per_line) {
+		static const char *old_filename;
+		static int old_linenum;
+		if (linenum == old_linenum && filename == old_filename)
+			return;
+		old_filename = filename;
+		old_linenum = linenum;
+	}
+	fprintf(stderr, "%s: %s:%u: ", program_invocation_name, filename, linenum);
+	va_start(ap, format);
+	vfprintf(stderr, format, ap);
+	va_end(ap);
+	if (errnum)
+		fprintf(stderr, ": %s", strerror(errnum));
+	fprintf(stderr, "\n");
+	error_message_count++;
+	if (status)
+		exit(status);
+}
+
+
+#endif	/* _ERROR_H_ */
diff --git a/poky/meta/recipes-core/musl/musl_git.bb b/poky/meta/recipes-core/musl/musl_git.bb
index 4a4fe97..7dd949f 100644
--- a/poky/meta/recipes-core/musl/musl_git.bb
+++ b/poky/meta/recipes-core/musl/musl_git.bb
@@ -4,21 +4,17 @@
 require musl.inc
 inherit linuxloader
 
-SRCREV = "83b858f83b658bd34eca5d8ad4d145f673ae7e5e"
+SRCREV = "79bdacff83a6bd5b70ff5ae5eb8b6de82c2f7c30"
 
 BASEVER = "1.2.4"
 
 PV = "${BASEVER}+git"
 
-# mirror is at git://github.com/kraj/musl.git
-
-SRC_URI = "git://git.musl-libc.org/git/musl.git;branch=master;protocol=https \
+SRC_URI = "git://git.etalabs.net/git/musl;branch=master;protocol=https \
            file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \
            file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \
           "
 
-MIRRORS += "git://git.musl-libc.org/git/musl.git git://github.com/kraj/musl.git"
-
 S = "${WORKDIR}/git"
 
 PROVIDES += "virtual/libc virtual/libiconv virtual/libintl virtual/crypt"
diff --git a/poky/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch b/poky/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
index efabc8f..eeedc9e 100644
--- a/poky/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
+++ b/poky/meta/recipes-core/ovmf/ovmf/0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch
@@ -1,7 +1,7 @@
-From 7675a67b8bb207de38ff5a9dc416e8b1028eb8ce Mon Sep 17 00:00:00 2001
+From ac9df4fb92965f1f95a5bdbde5f2f86d0c569711 Mon Sep 17 00:00:00 2001
 From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
 Date: Fri, 26 Jul 2019 17:34:26 -0400
-Subject: [PATCH 2/4] BaseTools: makefile: adjust to build in under bitbake
+Subject: [PATCH] BaseTools: makefile: adjust to build in under bitbake
 
 Prepend the build flags with those of bitbake. This is to build
 using the bitbake native sysroot include and library directories.
@@ -18,13 +18,13 @@
  1 file changed, 7 insertions(+), 8 deletions(-)
 
 diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile
-index 1bf003523b..28757aed63 100644
+index d369908a09..22c670f316 100644
 --- a/BaseTools/Source/C/Makefiles/header.makefile
 +++ b/BaseTools/Source/C/Makefiles/header.makefile
-@@ -82,35 +82,34 @@ $(error Bad HOST_ARCH)
- endif

+@@ -85,35 +85,34 @@ endif
  

  INCLUDE = $(TOOL_INCLUDE) -I $(MAKEROOT) -I $(MAKEROOT)/Include/Common -I $(MAKEROOT)/Include/ -I $(MAKEROOT)/Include/IndustryStandard -I $(MAKEROOT)/Common/ -I .. -I . $(ARCH_INCLUDE)

+ INCLUDE += -I $(EDK2_PATH)/MdePkg/Include

 -CPPFLAGS = $(INCLUDE)

 +CPPFLAGS += $(INCLUDE)

  

diff --git a/poky/meta/recipes-core/ovmf/ovmf_git.bb b/poky/meta/recipes-core/ovmf/ovmf_git.bb
index 761c265..6bbe21a 100644
--- a/poky/meta/recipes-core/ovmf/ovmf_git.bb
+++ b/poky/meta/recipes-core/ovmf/ovmf_git.bb
@@ -26,8 +26,8 @@
            file://0004-reproducible.patch \
            "
 
-PV = "edk2-stable202305"
-SRCREV = "ba91d0292e593df8528b66f99c1b0b14fadc8e16"
+PV = "edk2-stable202308"
+SRCREV = "819cfc6b42a68790a23509e4fcc58ceb70e1965e"
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>edk2-stable.*)"
 
 inherit deploy
diff --git a/poky/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb b/poky/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
index 9166a08..11e31dc 100644
--- a/poky/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
+++ b/poky/meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
@@ -3,7 +3,6 @@
 #
 
 SUMMARY = "Host packages for the standalone SDK or external toolchain"
-PR = "r12"
 
 inherit packagegroup nativesdk
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-base.bb b/poky/meta/recipes-core/packagegroups/packagegroup-base.bb
index eeb26ca..70a1035 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-base.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-base.bb
@@ -1,5 +1,4 @@
 SUMMARY = "Merge machine and distro options to create a basic machine task/package"
-PR = "r83"
 
 #
 # packages which content depend on MACHINE_FEATURES need to be MACHINE_ARCH
@@ -130,7 +129,6 @@
 #
 # packages added by machine config
 #
-SUMMARY:packagegroup-machine-base = "${MACHINE} extras"
 SUMMARY:packagegroup-machine-base = "Extra packages required to fully support ${MACHINE} hardware"
 RDEPENDS:packagegroup-machine-base = "${MACHINE_EXTRA_RDEPENDS}"
 RRECOMMENDS:packagegroup-machine-base = "${MACHINE_EXTRA_RRECOMMENDS}"
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-boot.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
index a7bad81..d96d2f5 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-boot.bb
@@ -4,7 +4,6 @@
 
 SUMMARY = "Minimal boot requirements"
 DESCRIPTION = "The minimal set of packages required to boot the system"
-PR = "r17"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
index 35beb3f..b8a7317 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb
@@ -3,7 +3,6 @@
 #
 
 SUMMARY = "NFS package groups"
-PR = "r2"
 
 inherit packagegroup
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
index 104f354..84e1a41 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-sdk.bb
@@ -3,7 +3,6 @@
 #
 
 SUMMARY = "Software development tools"
-PR = "r9"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
index d06c6a5..206292a 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-dropbear.bb
@@ -1,5 +1,4 @@
 SUMMARY = "Dropbear SSH client/server"
-PR = "r1"
 
 inherit packagegroup
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
index 846df12..392403f 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-ssh-openssh.bb
@@ -1,5 +1,4 @@
 SUMMARY = "OpenSSH SSH client/server"
-PR = "r1"
 
 inherit packagegroup
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
index 5ebcbce..06fdda9 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bb
@@ -1,5 +1,4 @@
 SUMMARY = "Target packages for the standalone SDK"
-PR = "r8"
 
 PACKAGE_ARCH = "${TUNE_PKGARCH}"
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
index c75850a..56ff1d2 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-debug.bb
@@ -8,7 +8,6 @@
 
 inherit packagegroup
 
-PR = "r3"
 
 MTRACE = ""
 MTRACE:libc-glibc = "libc-mtrace"
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
index 6330200..62c22a3 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
@@ -4,7 +4,6 @@
 
 SUMMARY = "Profiling tools"
 
-PR = "r3"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
index 1fee1c9..34af40a 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
@@ -4,7 +4,6 @@
 
 SUMMARY = "Testing tools/applications"
 
-PR = "r2"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb b/poky/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
index dd000fd..ae34a8a 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-self-hosted.bb
@@ -4,7 +4,6 @@
 
 SUMMARY = "Self-hosting"
 DESCRIPTION = "Packages required to run the build system"
-PR = "r13"
 
 PACKAGE_ARCH = "${TUNE_PKGARCH}"
 
diff --git a/poky/meta/recipes-core/seatd/seatd_0.7.0.bb b/poky/meta/recipes-core/seatd/seatd_0.7.0.bb
deleted file mode 100644
index 59ef6ad..0000000
--- a/poky/meta/recipes-core/seatd/seatd_0.7.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "A minimal seat management daemon, and a universal seat management library."
-DESCRIPTION = "Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root."
-HOMEPAGE = "https://git.sr.ht/~kennylevinsen/seatd"
-
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=715a99d2dd552e6188e74d4ed2914d5a"
-
-SRC_URI = "git://git.sr.ht/~kennylevinsen/seatd;protocol=https;branch=master \
-           file://init"
-SRCREV = "a803ba0502cccf147eec7fbcacd11c5b8643c0e0"
-S = "${WORKDIR}/git"
-
-inherit meson pkgconfig update-rc.d
-
-# https://www.openwall.com/lists/musl/2020/01/20/3
-CFLAGS:append:libc-musl:powerpc64le = " -Wno-error=overflow"
-
-PACKAGECONFIG ?= " \
-	${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-	libseat-builtin \
-"
-
-PACKAGECONFIG[libseat-builtin] = "-Dlibseat-builtin=enabled,-Dlibseat-builtin=disabled"
-PACKAGECONFIG[systemd] = ",,systemd"
-
-do_install:append() {
-        if [ "${VIRTUAL-RUNTIME_init_manager}" != "systemd" ]; then
-                install -Dm755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/seatd
-        fi
-}
-
-INITSCRIPT_NAME = "seatd"
-INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ."
-INHIBIT_UPDATERCD_BBCLASS = "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', '1', '', d)}"
diff --git a/poky/meta/recipes-core/seatd/seatd_0.8.0.bb b/poky/meta/recipes-core/seatd/seatd_0.8.0.bb
new file mode 100644
index 0000000..14c5b1b
--- /dev/null
+++ b/poky/meta/recipes-core/seatd/seatd_0.8.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "A minimal seat management daemon, and a universal seat management library."
+DESCRIPTION = "Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root."
+HOMEPAGE = "https://git.sr.ht/~kennylevinsen/seatd"
+
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=715a99d2dd552e6188e74d4ed2914d5a"
+
+SRC_URI = "git://git.sr.ht/~kennylevinsen/seatd;protocol=https;branch=master \
+           file://init"
+SRCREV = "3e9ef69f14f630a719dd464f3c90a7932f1c8296"
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig update-rc.d
+
+# https://www.openwall.com/lists/musl/2020/01/20/3
+CFLAGS:append:libc-musl:powerpc64le = " -Wno-error=overflow"
+
+PACKAGECONFIG ?= " \
+	${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+	libseat-builtin \
+"
+
+PACKAGECONFIG[libseat-builtin] = "-Dlibseat-builtin=enabled,-Dlibseat-builtin=disabled"
+PACKAGECONFIG[systemd] = ",,systemd"
+
+do_install:append() {
+        if [ "${VIRTUAL-RUNTIME_init_manager}" != "systemd" ]; then
+                install -Dm755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/seatd
+        fi
+}
+
+INITSCRIPT_NAME = "seatd"
+INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ."
+INHIBIT_UPDATERCD_BBCLASS = "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', '1', '', d)}"
diff --git a/poky/meta/recipes-core/systemd/systemd-boot_254.bb b/poky/meta/recipes-core/systemd/systemd-boot_254.4.bb
similarity index 100%
rename from poky/meta/recipes-core/systemd/systemd-boot_254.bb
rename to poky/meta/recipes-core/systemd/systemd-boot_254.4.bb
diff --git a/poky/meta/recipes-core/systemd/systemd-compat-units.bb b/poky/meta/recipes-core/systemd/systemd-compat-units.bb
index 75b1045..253bc9f 100644
--- a/poky/meta/recipes-core/systemd/systemd-compat-units.bb
+++ b/poky/meta/recipes-core/systemd/systemd-compat-units.bb
@@ -2,7 +2,6 @@
 HOMEPAGE = "http://www.freedesktop.org/wiki/Software/systemd"
 LICENSE = "MIT"
 
-PR = "r29"
 
 PACKAGE_WRITE_DEPS += "systemd-systemctl-native"
 
diff --git a/poky/meta/recipes-core/systemd/systemd-machine-units_1.0.bb b/poky/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
index 7e59e86..8df7ff7 100644
--- a/poky/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
+++ b/poky/meta/recipes-core/systemd/systemd-machine-units_1.0.bb
@@ -5,7 +5,6 @@
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
-PR = "r19"
 
 inherit systemd features_check
 REQUIRED_DISTRO_FEATURES += "usrmerge"
diff --git a/poky/meta/recipes-core/systemd/systemd-serialgetty.bb b/poky/meta/recipes-core/systemd/systemd-serialgetty.bb
index c2c67e6..44a93ac 100644
--- a/poky/meta/recipes-core/systemd/systemd-serialgetty.bb
+++ b/poky/meta/recipes-core/systemd/systemd-serialgetty.bb
@@ -3,7 +3,6 @@
 LICENSE = "GPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
 
-PR = "r5"
 
 SERIAL_CONSOLES ?= "115200;ttyS0"
 SERIAL_TERM ?= "linux"
diff --git a/poky/meta/recipes-core/systemd/systemd-systemctl-native.bb b/poky/meta/recipes-core/systemd/systemd-systemctl-native.bb
index fadc843..54283bc 100644
--- a/poky/meta/recipes-core/systemd/systemd-systemctl-native.bb
+++ b/poky/meta/recipes-core/systemd/systemd-systemctl-native.bb
@@ -3,7 +3,6 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
-PR = "r6"
 
 inherit native
 
diff --git a/poky/meta/recipes-core/systemd/systemd.inc b/poky/meta/recipes-core/systemd/systemd.inc
index e5686fb..3ba0b5f 100644
--- a/poky/meta/recipes-core/systemd/systemd.inc
+++ b/poky/meta/recipes-core/systemd/systemd.inc
@@ -14,10 +14,8 @@
 LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \
                     file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c"
 
-SRCREV = "994c7978608a0bd9b317f4f74ff266dd50a3e74e"
+SRCREV = "2e7504449a51fb38db9cd2da391c6434f82def51"
 SRCBRANCH = "v254-stable"
-SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH} \
-           file://0001-elf2efi-Fix-header-size-calculation.patch \
-           "
+SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH}"
 
 S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-core/systemd/systemd/0001-elf2efi-Fix-header-size-calculation.patch b/poky/meta/recipes-core/systemd/systemd/0001-elf2efi-Fix-header-size-calculation.patch
deleted file mode 100644
index 0e8924d..0000000
--- a/poky/meta/recipes-core/systemd/systemd/0001-elf2efi-Fix-header-size-calculation.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From d082d6502fa86e08dda858933838dde0406b824f Mon Sep 17 00:00:00 2001
-From: Jan Janssen <medhefgo@web.de>
-Date: Sun, 30 Jul 2023 20:59:04 +0200
-Subject: [PATCH] elf2efi: Fix header size calculation
-
-The PE header size calculation failed to take the PE magic and coff
-header size into account, which will lead to header truncation if we are
-writing only 5 sections.
-
-Upstream-Status: Backport [https://github.com/systemd/systemd/commit/ee91e06a5841c30bc7306260528ef407e0ebbab3]
-
-Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
----
- tools/elf2efi.py | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/tools/elf2efi.py b/tools/elf2efi.py
-index e233c8e3ab..2e478940f5 100755
---- a/tools/elf2efi.py
-+++ b/tools/elf2efi.py
-@@ -210,6 +210,7 @@ FILE_ALIGNMENT = 512
- 
- # Nobody cares about DOS headers, so put the PE header right after.
- PE_OFFSET = 64
-+PE_MAGIC = b"PE\0\0"
- 
- 
- def align_to(x: int, align: int) -> int:
-@@ -304,7 +305,10 @@ def copy_sections(elf: ELFFile, opt: PeOptionalHeader) -> typing.List[PeSection]
- 
- 
- def apply_elf_relative_relocation(
--    reloc: ElfRelocation, image_base: int, sections: typing.List[PeSection], addend_size: int
-+    reloc: ElfRelocation,
-+    image_base: int,
-+    sections: typing.List[PeSection],
-+    addend_size: int,
- ):
-     # fmt: off
-     [target] = [
-@@ -439,7 +443,7 @@ def write_pe(
-     file.seek(0x3C, io.SEEK_SET)
-     file.write(PE_OFFSET.to_bytes(2, byteorder="little"))
-     file.seek(PE_OFFSET, io.SEEK_SET)
--    file.write(b"PE\0\0")
-+    file.write(PE_MAGIC)
-     file.write(coff)
-     file.write(opt)
- 
-@@ -453,6 +457,8 @@ def write_pe(
-         file.write(pe_s)
-         offset = align_to(offset + len(pe_s.data), FILE_ALIGNMENT)
- 
-+    assert file.tell() <= opt.SizeOfHeaders
-+
-     for pe_s in sections:
-         file.seek(pe_s.PointerToRawData, io.SEEK_SET)
-         file.write(pe_s.data)
-@@ -515,6 +521,8 @@ def elf2efi(args: argparse.Namespace):
- 
-     opt.SizeOfHeaders = align_to(
-         PE_OFFSET
-+        + len(PE_MAGIC)
-+        + sizeof(PeCoffHeader)
-         + coff.SizeOfOptionalHeader
-         + sizeof(PeSection) * max(coff.NumberOfSections, args.minimum_sections),
-         FILE_ALIGNMENT,
--- 
-2.34.1
-
diff --git a/poky/meta/recipes-core/systemd/systemd/0014-Use-uintmax_t-for-handling-rlim_t.patch b/poky/meta/recipes-core/systemd/systemd/0014-Use-uintmax_t-for-handling-rlim_t.patch
index 1d50faa..2071f4f 100644
--- a/poky/meta/recipes-core/systemd/systemd/0014-Use-uintmax_t-for-handling-rlim_t.patch
+++ b/poky/meta/recipes-core/systemd/systemd/0014-Use-uintmax_t-for-handling-rlim_t.patch
@@ -26,11 +26,9 @@
  src/core/execute.c      |  4 ++--
  3 files changed, 9 insertions(+), 15 deletions(-)
 
-diff --git a/src/basic/format-util.h b/src/basic/format-util.h
-index 8719df3e29..9becc96066 100644
 --- a/src/basic/format-util.h
 +++ b/src/basic/format-util.h
-@@ -34,13 +34,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t));
+@@ -34,13 +34,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32
  #  error Unknown timex member size
  #endif
  
@@ -45,11 +43,9 @@
  
  #if SIZEOF_DEV_T == 8
  #  define DEV_FMT "%" PRIu64
-diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c
-index 33dfde9d6c..e018fd81fd 100644
 --- a/src/basic/rlimit-util.c
 +++ b/src/basic/rlimit-util.c
-@@ -44,7 +44,7 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) {
+@@ -44,7 +44,7 @@ int setrlimit_closest(int resource, cons
              fixed.rlim_max == highest.rlim_max)
                  return 0;
  
@@ -58,7 +54,7 @@
  
          return RET_NERRNO(setrlimit(resource, &fixed));
  }
-@@ -307,13 +307,13 @@ int rlimit_format(const struct rlimit *rl, char **ret) {
+@@ -307,13 +307,13 @@ int rlimit_format(const struct rlimit *r
          if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY)
                  r = free_and_strdup(&s, "infinity");
          else if (rl->rlim_cur >= RLIM_INFINITY)
@@ -76,20 +72,18 @@
          if (r < 0)
                  return -ENOMEM;
  
-@@ -403,7 +403,7 @@ int rlimit_nofile_safe(void) {
- 
-         rl.rlim_cur = FD_SETSIZE;
+@@ -407,7 +407,7 @@ int rlimit_nofile_safe(void) {
+         rl.rlim_max = MIN(rl.rlim_max, (rlim_t) read_nr_open());
+         rl.rlim_cur = MIN((rlim_t) FD_SETSIZE, rl.rlim_max);
          if (setrlimit(RLIMIT_NOFILE, &rl) < 0)
 -                return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur);
 +                return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", (uintmax_t)rl.rlim_cur);
  
          return 1;
  }
-diff --git a/src/core/execute.c b/src/core/execute.c
-index 8ef76de9ab..ea1c203e43 100644
 --- a/src/core/execute.c
 +++ b/src/core/execute.c
-@@ -6667,9 +6667,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
+@@ -6707,9 +6707,9 @@ void exec_context_dump(const ExecContext
          for (unsigned i = 0; i < RLIM_NLIMITS; i++)
                  if (c->rlimit[i]) {
                          fprintf(f, "%sLimit%s: " RLIM_FMT "\n",
@@ -101,6 +95,3 @@
                  }
  
          if (c->ioprio_set) {
--- 
-2.39.2
-
diff --git a/poky/meta/recipes-core/systemd/systemd/0021-do-not-disable-buffer-in-writing-files.patch b/poky/meta/recipes-core/systemd/systemd/0021-do-not-disable-buffer-in-writing-files.patch
index ef6b534..c850872 100644
--- a/poky/meta/recipes-core/systemd/systemd/0021-do-not-disable-buffer-in-writing-files.patch
+++ b/poky/meta/recipes-core/systemd/systemd/0021-do-not-disable-buffer-in-writing-files.patch
@@ -42,11 +42,9 @@
  src/vconsole/vconsole-setup.c        |  2 +-
  20 files changed, 36 insertions(+), 37 deletions(-)
 
-diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
-index 11b4375ed5..7d81a6007f 100644
 --- a/src/basic/cgroup-util.c
 +++ b/src/basic/cgroup-util.c
-@@ -400,7 +400,7 @@ int cg_kill_kernel_sigkill(const char *controller, const char *path) {
+@@ -400,7 +400,7 @@ int cg_kill_kernel_sigkill(const char *c
          if (r < 0)
                  return r;
  
@@ -55,7 +53,7 @@
          if (r < 0)
                  return r;
  
-@@ -806,7 +806,7 @@ int cg_install_release_agent(const char *controller, const char *agent) {
+@@ -806,7 +806,7 @@ int cg_install_release_agent(const char
  
          sc = strstrip(contents);
          if (isempty(sc)) {
@@ -64,7 +62,7 @@
                  if (r < 0)
                          return r;
          } else if (!path_equal(sc, agent))
-@@ -824,7 +824,7 @@ int cg_install_release_agent(const char *controller, const char *agent) {
+@@ -824,7 +824,7 @@ int cg_install_release_agent(const char
  
          sc = strstrip(contents);
          if (streq(sc, "0")) {
@@ -73,7 +71,7 @@
                  if (r < 0)
                          return r;
  
-@@ -851,7 +851,7 @@ int cg_uninstall_release_agent(const char *controller) {
+@@ -851,7 +851,7 @@ int cg_uninstall_release_agent(const cha
          if (r < 0)
                  return r;
  
@@ -82,7 +80,7 @@
          if (r < 0)
                  return r;
  
-@@ -861,7 +861,7 @@ int cg_uninstall_release_agent(const char *controller) {
+@@ -861,7 +861,7 @@ int cg_uninstall_release_agent(const cha
          if (r < 0)
                  return r;
  
@@ -91,7 +89,7 @@
          if (r < 0)
                  return r;
  
-@@ -1764,7 +1764,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri
+@@ -1764,7 +1764,7 @@ int cg_set_attribute(const char *control
          if (r < 0)
                  return r;
  
@@ -100,11 +98,9 @@
  }
  
  int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) {
-diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c
-index f5c0e04cec..272b920022 100644
 --- a/src/basic/namespace-util.c
 +++ b/src/basic/namespace-util.c
-@@ -227,12 +227,12 @@ int userns_acquire(const char *uid_map, const char *gid_map) {
+@@ -227,12 +227,12 @@ int userns_acquire(const char *uid_map,
                  freeze();
  
          xsprintf(path, "/proc/" PID_FMT "/uid_map", pid);
@@ -119,11 +115,9 @@
          if (r < 0)
                  return log_error_errno(r, "Failed to write GID map: %m");
  
-diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
-index 64a95dd866..12cd16db1c 100644
 --- a/src/basic/procfs-util.c
 +++ b/src/basic/procfs-util.c
-@@ -64,13 +64,13 @@ int procfs_tasks_set_limit(uint64_t limit) {
+@@ -64,13 +64,13 @@ int procfs_tasks_set_limit(uint64_t limi
           * decrease it, as threads-max is the much more relevant sysctl. */
          if (limit > pid_max-1) {
                  sprintf(buffer, "%" PRIu64, limit+1); /* Add one, since PID 0 is not a valid PID */
@@ -139,11 +133,9 @@
          if (r < 0) {
                  uint64_t threads_max;
  
-diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c
-index b66a6622ae..8d1c93008a 100644
 --- a/src/basic/sysctl-util.c
 +++ b/src/basic/sysctl-util.c
-@@ -58,7 +58,7 @@ int sysctl_write(const char *property, const char *value) {
+@@ -58,7 +58,7 @@ int sysctl_write(const char *property, c
  
          log_debug("Setting '%s' to '%s'", p, value);
  
@@ -152,8 +144,6 @@
  }
  
  int sysctl_writef(const char *property, const char *format, ...) {
-diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
-index e1ddf97914..df6e156f19 100644
 --- a/src/binfmt/binfmt.c
 +++ b/src/binfmt/binfmt.c
 @@ -30,7 +30,7 @@ static bool arg_unregister = false;
@@ -165,7 +155,7 @@
  }
  
  static int apply_rule(const char *filename, unsigned line, const char *rule) {
-@@ -58,7 +58,7 @@ static int apply_rule(const char *filename, unsigned line, const char *rule) {
+@@ -58,7 +58,7 @@ static int apply_rule(const char *filena
          if (r >= 0)
                  log_debug("%s:%u: Rule '%s' deleted.", filename, line, rulename);
  
@@ -183,11 +173,9 @@
                  if (r < 0)
                          log_warning_errno(r, "Failed to flush binfmt_misc rules, ignoring: %m");
                  else
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 4cac3f6a89..bebe2cd120 100644
 --- a/src/core/cgroup.c
 +++ b/src/core/cgroup.c
-@@ -4349,7 +4349,7 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) {
+@@ -4349,7 +4349,7 @@ int unit_cgroup_freezer_action(Unit *u,
                          u->freezer_state = FREEZER_THAWING;
          }
  
@@ -196,11 +184,9 @@
          if (r < 0)
                  return r;
  
-diff --git a/src/core/main.c b/src/core/main.c
-index c0b8126d96..fe676320ba 100644
 --- a/src/core/main.c
 +++ b/src/core/main.c
-@@ -1737,7 +1737,7 @@ static void initialize_core_pattern(bool skip_setup) {
+@@ -1737,7 +1737,7 @@ static void initialize_core_pattern(bool
          if (getpid_cached() != 1)
                  return;
  
@@ -209,11 +195,9 @@
          if (r < 0)
                  log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m",
                                    arg_early_core_pattern);
-diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c
-index bcaa237c8d..4032bde19e 100644
 --- a/src/core/smack-setup.c
 +++ b/src/core/smack-setup.c
-@@ -319,17 +319,17 @@ int mac_smack_setup(bool *loaded_policy) {
+@@ -319,17 +319,17 @@ int mac_smack_setup(bool *loaded_policy)
          }
  
  #if HAVE_SMACK_RUN_LABEL
@@ -235,8 +219,6 @@
          if (r < 0)
                  log_warning_errno(r, "Failed to set SMACK netlabel rule \"127.0.0.1 -CIPSO\": %m");
  #endif
-diff --git a/src/home/homework.c b/src/home/homework.c
-index 28907386a4..f9e45349a7 100644
 --- a/src/home/homework.c
 +++ b/src/home/homework.c
 @@ -278,7 +278,7 @@ static void drop_caches_now(void) {
@@ -248,11 +230,9 @@
          if (r < 0)
                  log_warning_errno(r, "Failed to drop caches, ignoring: %m");
          else
-diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
-index 8c65ee3469..153edab081 100644
 --- a/src/libsystemd/sd-device/sd-device.c
 +++ b/src/libsystemd/sd-device/sd-device.c
-@@ -2515,7 +2515,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr,
+@@ -2515,7 +2515,7 @@ _public_ int sd_device_set_sysattr_value
          if (!value)
                  return -ENOMEM;
  
@@ -261,11 +241,9 @@
          if (r < 0) {
                  /* On failure, clear cache entry, as we do not know how it fails. */
                  device_remove_cached_sysattr_value(device, sysattr);
-diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
-index 0deb4ebb30..bae8eead9e 100644
 --- a/src/nspawn/nspawn-cgroup.c
 +++ b/src/nspawn/nspawn-cgroup.c
-@@ -122,7 +122,7 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) {
+@@ -122,7 +122,7 @@ int sync_cgroup(pid_t pid, CGroupUnified
          fn = strjoina(tree, cgroup, "/cgroup.procs");
  
          sprintf(pid_string, PID_FMT, pid);
@@ -274,8 +252,6 @@
          if (r < 0) {
                  log_error_errno(r, "Failed to move process: %m");
                  goto finish;
-diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
-index 36d336dfc8..8c5c69596b 100644
 --- a/src/nspawn/nspawn.c
 +++ b/src/nspawn/nspawn.c
 @@ -2774,7 +2774,7 @@ static int reset_audit_loginuid(void) {
@@ -305,8 +281,6 @@
          if (r < 0)
                  return log_error_errno(r, "Failed to write GID map: %m");
  
-diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c
-index a26175474b..1413a9c72c 100644
 --- a/src/shared/binfmt-util.c
 +++ b/src/shared/binfmt-util.c
 @@ -46,7 +46,7 @@ int disable_binfmt(void) {
@@ -318,11 +292,9 @@
          if (r < 0)
                  return log_warning_errno(r, "Failed to unregister binfmt_misc entries: %m");
  
-diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c
-index 2ea83f05d3..8626bb184c 100644
 --- a/src/shared/cgroup-setup.c
 +++ b/src/shared/cgroup-setup.c
-@@ -351,7 +351,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) {
+@@ -351,7 +351,7 @@ int cg_attach(const char *controller, co
  
          xsprintf(c, PID_FMT "\n", pid);
  
@@ -340,11 +312,9 @@
                          if (r < 0) {
                                  log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m",
                                                  FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs);
-diff --git a/src/shared/coredump-util.c b/src/shared/coredump-util.c
-index 3d2f179049..c1b6c170ac 100644
 --- a/src/shared/coredump-util.c
 +++ b/src/shared/coredump-util.c
-@@ -163,7 +163,7 @@ int set_coredump_filter(uint64_t value) {
+@@ -163,7 +163,7 @@ int set_coredump_filter(uint64_t value)
          xsprintf(t, "0x%"PRIx64, value);
  
          return write_string_file("/proc/self/coredump_filter", t,
@@ -353,11 +323,9 @@
  }
  
  /* Turn off core dumps but only if we're running outside of a container. */
-diff --git a/src/shared/sleep-util.c b/src/shared/sleep-util.c
-index d7277399fb..d06d636fcc 100644
 --- a/src/shared/sleep-util.c
 +++ b/src/shared/sleep-util.c
-@@ -1044,7 +1044,7 @@ int write_resume_config(dev_t devno, uint64_t offset, const char *device) {
+@@ -1044,7 +1044,7 @@ int write_resume_config(dev_t devno, uin
  
          /* We write the offset first since it's safer. Note that this file is only available in 4.17+, so
           * fail gracefully if it doesn't exist and we're only overwriting it with 0. */
@@ -366,7 +334,7 @@
          if (r == -ENOENT) {
                  if (offset != 0)
                          return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
-@@ -1060,7 +1060,7 @@ int write_resume_config(dev_t devno, uint64_t offset, const char *device) {
+@@ -1060,7 +1060,7 @@ int write_resume_config(dev_t devno, uin
                  log_debug("Wrote resume_offset=%s for device '%s' to /sys/power/resume_offset.",
                            offset_str, device);
  
@@ -375,11 +343,9 @@
          if (r < 0)
                  return log_error_errno(r,
                                         "Failed to write device '%s' (%s) to /sys/power/resume: %m",
-diff --git a/src/shared/smack-util.c b/src/shared/smack-util.c
-index b3b5c905ad..bbfa1973fd 100644
 --- a/src/shared/smack-util.c
 +++ b/src/shared/smack-util.c
-@@ -113,7 +113,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) {
+@@ -113,7 +113,7 @@ int mac_smack_apply_pid(pid_t pid, const
                  return 0;
  
          p = procfs_file_alloca(pid, "attr/current");
@@ -388,8 +354,6 @@
          if (r < 0)
                  return r;
  
-diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
-index 765dd4974f..cd6afb001b 100644
 --- a/src/sleep/sleep.c
 +++ b/src/sleep/sleep.c
 @@ -139,7 +139,7 @@ static int write_mode(char **modes) {
@@ -401,7 +365,7 @@
                  if (k >= 0)
                          return 0;
  
-@@ -160,7 +160,7 @@ static int write_state(FILE **f, char **states) {
+@@ -160,7 +160,7 @@ static int write_state(FILE **f, char **
          STRV_FOREACH(state, states) {
                  int k;
  
@@ -410,11 +374,9 @@
                  if (k >= 0)
                          return 0;
                  log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m", *state);
-diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
-index 0ce79f815c..28aab475d0 100644
 --- a/src/udev/udev-rules.c
 +++ b/src/udev/udev-rules.c
-@@ -2634,7 +2634,6 @@ static int udev_rule_apply_token_to_event(
+@@ -2634,7 +2634,6 @@ static int udev_rule_apply_token_to_even
                  log_event_debug(dev, token, "ATTR '%s' writing '%s'", buf, value);
                  r = write_string_file(buf, value,
                                        WRITE_STRING_FILE_VERIFY_ON_FAILURE |
@@ -422,11 +384,9 @@
                                        WRITE_STRING_FILE_AVOID_NEWLINE |
                                        WRITE_STRING_FILE_VERIFY_IGNORE_NEWLINE);
                  if (r < 0)
-diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
-index 7d3e9db73f..2d4a0c4c9d 100644
 --- a/src/vconsole/vconsole-setup.c
 +++ b/src/vconsole/vconsole-setup.c
-@@ -259,7 +259,7 @@ static int toggle_utf8_vc(const char *name, int fd, bool utf8) {
+@@ -260,7 +260,7 @@ static int toggle_utf8_vc(const char *na
  static int toggle_utf8_sysfs(bool utf8) {
          int r;
  
@@ -435,6 +395,3 @@
          if (r < 0)
                  return log_warning_errno(r, "Failed to %s sysfs UTF-8 flag: %m", enable_disable(utf8));
  
--- 
-2.39.2
-
diff --git a/poky/meta/recipes-core/systemd/systemd/0022-Handle-__cpu_mask-usage.patch b/poky/meta/recipes-core/systemd/systemd/0022-Handle-__cpu_mask-usage.patch
index 341543a..580aff3 100644
--- a/poky/meta/recipes-core/systemd/systemd/0022-Handle-__cpu_mask-usage.patch
+++ b/poky/meta/recipes-core/systemd/systemd/0022-Handle-__cpu_mask-usage.patch
@@ -23,8 +23,6 @@
  src/test/test-sizeof.c    | 2 +-
  2 files changed, 3 insertions(+), 1 deletion(-)
 
-diff --git a/src/shared/cpu-set-util.h b/src/shared/cpu-set-util.h
-index 3c63a58826..4c2d4347fc 100644
 --- a/src/shared/cpu-set-util.h
 +++ b/src/shared/cpu-set-util.h
 @@ -6,6 +6,8 @@
@@ -36,8 +34,6 @@
  /* This wraps the libc interface with a variable to keep the allocated size. */
  typedef struct CPUSet {
          cpu_set_t *set;
-diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
-index 6cf92bffde..937d26ca55 100644
 --- a/src/test/test-sizeof.c
 +++ b/src/test/test-sizeof.c
 @@ -1,6 +1,5 @@
@@ -47,7 +43,7 @@
  #include <stdio.h>
  #include <string.h>
  #include <sys/resource.h>
-@@ -11,6 +10,7 @@
+@@ -12,6 +11,7 @@
  #include <float.h>
  
  #include "time-util.h"
@@ -55,6 +51,3 @@
  
  /* Print information about various types. Useful when diagnosing
   * gcc diagnostics on an unfamiliar architecture. */
--- 
-2.39.2
-
diff --git a/poky/meta/recipes-core/systemd/systemd/0025-include-sys-file.h-for-LOCK_EX.patch b/poky/meta/recipes-core/systemd/systemd/0025-include-sys-file.h-for-LOCK_EX.patch
deleted file mode 100644
index 7827cc1..0000000
--- a/poky/meta/recipes-core/systemd/systemd/0025-include-sys-file.h-for-LOCK_EX.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 2 Aug 2023 10:33:48 -0700
-Subject: [PATCH] include sys/file.h for LOCK_EX
-
-Fixes
-| ../git/src/basic/user-util.c:708:30: error: use of undeclared identifier 'LOCK_EX'; did you mean 'LOCK_BSD'?
-|   708 |         r = unposix_lock(fd, LOCK_EX);
-|       |                              ^~~~~~~
-|       |                              LOCK_BSD
-
-Upstream-Status: Backport [https://github.com/systemd/systemd/pull/28647]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/basic/user-util.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/basic/user-util.c b/src/basic/user-util.c
-index fe61a09005..5c39847733 100644
---- a/src/basic/user-util.c
-+++ b/src/basic/user-util.c
-@@ -6,6 +6,7 @@
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
-+#include <sys/file.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <utmp.h>
diff --git a/poky/meta/recipes-core/systemd/systemd/0026-test-test-sizeof-Include-sys-timex.h-for-struct-time.patch b/poky/meta/recipes-core/systemd/systemd/0026-test-test-sizeof-Include-sys-timex.h-for-struct-time.patch
deleted file mode 100644
index f2130c8..0000000
--- a/poky/meta/recipes-core/systemd/systemd/0026-test-test-sizeof-Include-sys-timex.h-for-struct-time.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 2 Aug 2023 12:14:56 -0700
-Subject: [PATCH] test/test-sizeof: Include sys/timex.h for struct timex
-
-Fixes
-
-../git/src/test/test-sizeof.c:64:41: error: incomplete definition of type 'struct timex'
-   64 |         check(typeof(((struct timex *)0)->freq), SIZEOF_TIMEX_MEMBER);
-      |                      ~~~~~~~~~~~~~~~~~~~^
-
-Upstream-Status: Backport [https://github.com/systemd/systemd/pull/28651]
----
- src/test/test-sizeof.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
-index 9d969cf8f1..b65c0bd370 100644
---- a/src/test/test-sizeof.c
-+++ b/src/test/test-sizeof.c
-@@ -4,6 +4,7 @@
- #include <string.h>
- #include <sys/resource.h>
- #include <sys/socket.h>
-+#include <sys/timex.h>
- #include <sys/types.h>
- 
- #define __STDC_WANT_IEC_60559_TYPES_EXT__
diff --git a/poky/meta/recipes-core/systemd/systemd/0027-include-missing-sys-file.h-for-LOCK_EX.patch b/poky/meta/recipes-core/systemd/systemd/0027-include-missing-sys-file.h-for-LOCK_EX.patch
deleted file mode 100644
index 1901480..0000000
--- a/poky/meta/recipes-core/systemd/systemd/0027-include-missing-sys-file.h-for-LOCK_EX.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 2 Aug 2023 12:18:24 -0700
-Subject: [PATCH] include missing sys/file.h for LOCK_EX
-
-Upstream-Status: Backport [https://github.com/systemd/systemd/pull/28651]
----
- src/core/execute.c            | 1 +
- src/shared/btrfs-util.c       | 1 +
- src/shared/copy.c             | 1 +
- src/test/test-btrfs.c         | 1 +
- src/test/test-fs-util.c       | 1 +
- src/test/test-lock-util.c     | 1 +
- src/vconsole/vconsole-setup.c | 1 +
- 7 files changed, 7 insertions(+)
-
-diff --git a/src/core/execute.c b/src/core/execute.c
-index 5b2ae861ff..2ebf19ffaa 100644
---- a/src/core/execute.c
-+++ b/src/core/execute.c
-@@ -4,6 +4,7 @@
- #include <fcntl.h>
- #include <poll.h>
- #include <sys/eventfd.h>
-+#include <sys/file.h>
- #include <sys/ioctl.h>
- #include <sys/mman.h>
- #include <sys/mount.h>
-diff --git a/src/shared/btrfs-util.c b/src/shared/btrfs-util.c
-index 5128b308ab..3ded95ea82 100644
---- a/src/shared/btrfs-util.c
-+++ b/src/shared/btrfs-util.c
-@@ -10,6 +10,7 @@
- #include <stddef.h>
- #include <stdio.h>
- #include <stdlib.h>
-+#include <sys/file.h>
- #include <sys/ioctl.h>
- #include <sys/sysmacros.h>
- #include <unistd.h>
-diff --git a/src/shared/copy.c b/src/shared/copy.c
-index 241a2d112b..7e47dc002c 100644
---- a/src/shared/copy.c
-+++ b/src/shared/copy.c
-@@ -6,6 +6,7 @@
- #include <stddef.h>
- #include <stdio.h>
- #include <stdlib.h>
-+#include <sys/file.h>
- #include <sys/ioctl.h>
- #include <sys/sendfile.h>
- #include <sys/xattr.h>
-diff --git a/src/test/test-btrfs.c b/src/test/test-btrfs.c
-index 95b7ef25d8..ba09563058 100644
---- a/src/test/test-btrfs.c
-+++ b/src/test/test-btrfs.c
-@@ -1,6 +1,7 @@
- /* SPDX-License-Identifier: LGPL-2.1-or-later */
- 
- #include <fcntl.h>
-+#include <sys/file.h>
- 
- #include "btrfs-util.h"
- #include "fd-util.h"
-diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
-index 1beba916a4..5de1eea0d4 100644
---- a/src/test/test-fs-util.c
-+++ b/src/test/test-fs-util.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1-or-later */
- 
-+#include <sys/file.h>
- #include <unistd.h>
- 
- #include "alloc-util.h"
-diff --git a/src/test/test-lock-util.c b/src/test/test-lock-util.c
-index a9a1b438ff..28fc54a5d6 100644
---- a/src/test/test-lock-util.c
-+++ b/src/test/test-lock-util.c
-@@ -1,5 +1,6 @@
- /* SPDX-License-Identifier: LGPL-2.1-or-later */
- 
-+#include <sys/file.h>
- #include <unistd.h>
- 
- #include "fd-util.h"
-diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
-index d57d8b4001..86348d08c1 100644
---- a/src/vconsole/vconsole-setup.c
-+++ b/src/vconsole/vconsole-setup.c
-@@ -11,6 +11,7 @@
- #include <linux/vt.h>
- #include <stdbool.h>
- #include <stdlib.h>
-+#include <sys/file.h>
- #include <sys/ioctl.h>
- #include <sysexits.h>
- #include <termios.h>
diff --git a/poky/meta/recipes-core/systemd/systemd_254.4.bb b/poky/meta/recipes-core/systemd/systemd_254.4.bb
new file mode 100644
index 0000000..77724eb
--- /dev/null
+++ b/poky/meta/recipes-core/systemd/systemd_254.4.bb
@@ -0,0 +1,851 @@
+require systemd.inc
+
+PROVIDES = "udev"
+
+PE = "1"
+
+DEPENDS = "intltool-native gperf-native libcap util-linux python3-jinja2-native"
+
+SECTION = "base/shell"
+
+inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check
+
+# unmerged-usr support is deprecated upstream, taints the system and will be
+# removed in the near future. Fail the build if it is not enabled.
+REQUIRED_DISTRO_FEATURES += "usrmerge"
+
+# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so
+# that we don't build both udev and systemd in world builds.
+REQUIRED_DISTRO_FEATURES += "systemd"
+
+SRC_URI += " \
+           file://touchscreen.rules \
+           file://00-create-volatile.conf \
+           file://basic.conf.in \
+           ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \
+           ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \
+           file://init \
+           file://99-default.preset \
+           file://systemd-pager.sh \
+           file://0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch \
+           file://0008-implment-systemd-sysv-install-for-OE.patch \
+           file://0004-Move-sysusers.d-sysctl.d-binfmt.d-modules-load.d-to-.patch \
+           "
+
+# patches needed by musl
+SRC_URI:append:libc-musl = " ${SRC_URI_MUSL}"
+SRC_URI_MUSL = "\
+               file://0009-missing_type.h-add-comparison_fn_t.patch \
+               file://0010-add-fallback-parse_printf_format-implementation.patch \
+               file://0011-src-basic-missing.h-check-for-missing-strndupa.patch \
+               file://0012-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch \
+               file://0013-add-missing-FTW_-macros-for-musl.patch \
+               file://0014-Use-uintmax_t-for-handling-rlim_t.patch \
+               file://0016-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \
+               file://0017-Define-glibc-compatible-basename-for-non-glibc-syste.patch \
+               file://0018-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \
+               file://0019-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \
+               file://0020-avoid-redefinition-of-prctl_mm_map-structure.patch \
+               file://0021-do-not-disable-buffer-in-writing-files.patch \
+               file://0022-Handle-__cpu_mask-usage.patch \
+               file://0023-Handle-missing-gshadow.patch \
+               file://0024-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch \
+               file://0005-pass-correct-parameters-to-getdents64.patch \
+               file://0001-Adjust-for-musl-headers.patch \
+               file://0006-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch \
+               file://0003-errno-util-Make-STRERROR-portable-for-musl.patch \
+               file://0028-sd-event-Make-malloc_trim-conditional-on-glibc.patch \
+               file://0029-shared-Do-not-use-malloc_info-on-musl.patch \
+               "
+
+PAM_PLUGINS = " \
+    pam-plugin-unix \
+    pam-plugin-loginuid \
+    pam-plugin-keyinit \
+    pam-plugin-namespace \
+"
+
+PACKAGECONFIG ??= " \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', 'link-udev-shared', d)} \
+    backlight \
+    binfmt \
+    gshadow \
+    hibernate \
+    hostnamed \
+    idn \
+    ima \
+    kmod \
+    localed \
+    logind \
+    machined \
+    myhostname \
+    networkd \
+    nss \
+    nss-mymachines \
+    nss-resolve \
+    quotacheck \
+    randomseed \
+    resolved \
+    set-time-epoch \
+    sysusers \
+    sysvinit \
+    timedated \
+    timesyncd \
+    userdb \
+    utmp \
+    vconsole \
+    wheel-group \
+    zstd \
+"
+
+PACKAGECONFIG:remove:libc-musl = " \
+    gshadow \
+    idn \
+    localed \
+    myhostname \
+    nss \
+    nss-mymachines \
+    nss-resolve \
+    sysusers \
+    userdb \
+    utmp \
+"
+
+# https://github.com/seccomp/libseccomp/issues/347
+PACKAGECONFIG:remove:mipsarch = "seccomp"
+
+TARGET_CC_ARCH:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0 -D_LARGEFILE64_SOURCE"
+
+# Some of the dependencies are weak-style recommends - if not available at runtime,
+# systemd won't fail but the library-related feature will be skipped with a warning.
+
+# Use the upstream systemd serial-getty@.service and rely on
+# systemd-getty-generator instead of using the OE-core specific
+# systemd-serialgetty.bb - not enabled by default.
+PACKAGECONFIG[serial-getty-generator] = ""
+
+PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl"
+PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit"
+PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false"
+PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false"
+PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2"
+PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid"
+PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false"
+PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup"
+PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device"
+# If multiple compression libraries are enabled, the format to use for compression is chosen implicitly,
+# so if you want to compress with e.g. lz4 you cannot enable zstd, so you cannot read zstd-compressed journal files.
+# This option allows to enable all compression formats for reading, but choosing a specific one for writing.
+PACKAGECONFIG[default-compression-lz4] = "-Dlz4=true -Ddefault-compression=lz4,,lz4"
+PACKAGECONFIG[default-compression-xz] = "-Dxz=true -Ddefault-compression=xz,,xz"
+PACKAGECONFIG[default-compression-zstd] = "-Dzstd=true -Ddefault-compression=zstd,,zstd"
+PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus"
+PACKAGECONFIG[efi] = "-Defi=true -Dbootloader=true,-Defi=false -Dbootloader=false,python3-pyelftools-native"
+PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils"
+PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false"
+PACKAGECONFIG[repart] = "-Drepart=true,-Drepart=false"
+PACKAGECONFIG[homed] = "-Dhomed=true,-Dhomed=false"
+# Sign the journal for anti-tampering
+PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt"
+PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
+PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false"
+PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false"
+PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false"
+PACKAGECONFIG[idn] = "-Didn=true,-Didn=false"
+PACKAGECONFIG[ima] = "-Dima=true,-Dima=false"
+# importd requires journal-upload/xz/zlib/bzip2/gcrypt
+PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false,glib-2.0"
+# Update NAT firewall rules
+PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables"
+PACKAGECONFIG[journal-color] = ",,,less"
+PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl"
+PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod"
+PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig"
+PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn,,libidn"
+PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2,,libidn2"
+# Link udev shared with systemd helper library.
+# If enabled the udev package depends on the systemd package (which has the needed shared library).
+PACKAGECONFIG[link-udev-shared] = "-Dlink-udev-shared=true,-Dlink-udev-shared=false"
+PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false"
+PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false"
+PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4"
+PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false"
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd"
+PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname"
+PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false"
+PACKAGECONFIG[no-dns-fallback] = "-Ddns-servers="
+PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false"
+PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false"
+PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false"
+PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false"
+PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl"
+PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}"
+PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2"
+PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false"
+# If polkit is disabled and networkd+hostnamed are in use, enabling this option and
+# using dbus-broker will allow networkd to be authorized to change the
+# hostname without acquiring additional privileges
+PACKAGECONFIG[polkit_hostnamed_fallback] = ",,,,dbus-broker,polkit"
+PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false"
+PACKAGECONFIG[pstore] = "-Dpstore=true,-Dpstore=false"
+PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode,,qrencode"
+PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false"
+PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false"
+PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false"
+PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false"
+PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
+PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell"
+PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false"
+PACKAGECONFIG[sysext] = "-Dsysext=true, -Dsysext=false"
+PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false"
+PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d"
+# When enabled use reproducble build timestamp if set as time epoch,
+# or build time if not. When disabled, time epoch is unset.
+def build_epoch(d):
+    epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1"
+    return '-Dtime-epoch=%d' % int(epoch)
+PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0"
+PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false"
+PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false"
+PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true"
+PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true"
+PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false"
+PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false"
+PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind"
+PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup"
+PACKAGECONFIG[wheel-group] = "-Dwheel-group=true, -Dwheel-group=false"
+PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false"
+# Verify keymaps on locale change
+PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon"
+PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz"
+PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib"
+PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd"
+
+# Helper variables to clarify locations.  This mirrors the logic in systemd's
+# build system.
+rootprefix ?= "${root_prefix}"
+rootlibdir ?= "${base_libdir}"
+rootlibexecdir = "${rootprefix}/lib"
+
+EXTRA_OEMESON += "-Dnobody-user=nobody \
+                  -Dnobody-group=nogroup \
+                  -Drootlibdir=${rootlibdir} \
+                  -Drootprefix=${rootprefix} \
+                  -Ddefault-locale=C \
+                  -Dmode=release \
+                  -Dsystem-alloc-uid-min=101 \
+                  -Dsystem-uid-max=999 \
+                  -Dsystem-alloc-gid-min=101 \
+                  -Dsystem-gid-max=999 \
+                  "
+
+# Hardcode target binary paths to avoid using paths from sysroot or worse
+# it pokes for these binaries on build host and encodes that distro assumption
+# into target
+EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \
+                  -Dkmod-path=${base_bindir}/kmod \
+                  -Dmount-path=${base_bindir}/mount \
+                  -Dquotacheck-path=${sbindir}/quotacheck \
+                  -Dquotaon-path=${sbindir}/quotaon \
+                  -Dsulogin-path=${base_sbindir}/sulogin \
+                  -Dnologin-path=${base_sbindir}/nologin \
+                  -Dumount-path=${base_bindir}/umount \
+                  -Dloadkeys-path=${bindir}/loadkeys \
+                  -Dsetfont-path=${bindir}/setfont"
+
+# The 60 seconds is watchdog's default vaule.
+WATCHDOG_TIMEOUT ??= "60"
+
+do_configure:prepend() {
+  sed s@:ROOT_HOME:@${ROOT_HOME}@g ${WORKDIR}/basic.conf.in > ${S}/sysusers.d/basic.conf.in
+}
+
+do_install() {
+	meson_do_install
+	install -d ${D}/${base_sbindir}
+	if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then
+		# Provided by a separate recipe
+		rm ${D}${systemd_system_unitdir}/serial-getty* -f
+	fi
+
+	# Provide support for initramfs
+	[ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init
+	[ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd
+
+	install -d ${D}${sysconfdir}/udev/rules.d/
+	install -d ${D}${sysconfdir}/tmpfiles.d
+	for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do
+		install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/
+	done
+
+	install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
+
+	if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
+		install -d ${D}${sysconfdir}/init.d
+		install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd
+		sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd
+		install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install
+	fi
+
+	if "${@'true' if oe.types.boolean(d.getVar('VOLATILE_LOG_DIR')) else 'false'}"; then
+		# /var/log is typically a symbolic link to inside /var/volatile,
+		# which is expected to be empty.
+		rm -rf ${D}${localstatedir}/log
+	else
+		chown root:systemd-journal ${D}${localstatedir}/log/journal
+
+		# journal-remote creates this at start
+		rm -rf ${D}${localstatedir}/log/journal/remote
+	fi
+
+	# if the user requests /tmp be on persistent storage (i.e. not volatile)
+	# then don't use a tmpfs for /tmp
+	if [ "${VOLATILE_TMP_DIR}" != "yes" ]; then
+		rm -f ${D}${rootlibdir}/systemd/system/tmp.mount
+		rm -f ${D}${rootlibdir}/systemd/system/local-fs.target.wants/tmp.mount
+	fi
+
+	install -d ${D}${systemd_system_unitdir}/graphical.target.wants
+	install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+	install -d ${D}${systemd_system_unitdir}/poweroff.target.wants
+	install -d ${D}${systemd_system_unitdir}/reboot.target.wants
+	install -d ${D}${systemd_system_unitdir}/rescue.target.wants
+
+	# Create symlinks for systemd-update-utmp-runlevel.service
+	if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then
+		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service
+		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service
+		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/poweroff.target.wants/systemd-update-utmp-runlevel.service
+		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/reboot.target.wants/systemd-update-utmp-runlevel.service
+		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service
+	fi
+
+	# this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it
+	# for existence else it fails
+	if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ] &&
+	   ! ${@bb.utils.contains('PACKAGECONFIG', 'networkd', 'true', 'false', d)}; then
+		echo 'd /run/systemd/netif/links 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+	fi
+	if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then
+		echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
+		echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+		echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
+		ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
+	else
+		sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
+		ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
+	fi
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then
+		rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf
+		rm -r ${D}${sysconfdir}/X11
+	fi
+
+	# If polkit is setup fixup permissions and ownership
+	if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then
+		if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
+			chmod 700 ${D}${datadir}/polkit-1/rules.d
+			chown polkitd:root ${D}${datadir}/polkit-1/rules.d
+		fi
+	fi
+
+	# If polkit is not available and a fallback was requested, install a drop-in that allows networkd to
+	# request hostname changes via DBUS without elevating its privileges
+	if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then
+		install -d ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
+		install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
+		install -d ${D}${datadir}/dbus-1/system.d/
+		install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/
+	fi
+
+	# create link for existing udev rules
+	ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
+
+	# install default policy for presets
+	# https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
+	install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset
+
+	# add a profile fragment to disable systemd pager with busybox less
+	install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh
+
+    if [ -n "${WATCHDOG_TIMEOUT}" ]; then
+        sed -i -e 's/#RebootWatchdogSec=10min/RebootWatchdogSec=${WATCHDOG_TIMEOUT}/' \
+            ${D}/${sysconfdir}/systemd/system.conf
+    fi
+}
+
+python populate_packages:prepend (){
+    systemdlibdir = d.getVar("rootlibdir")
+    do_split_packages(d, systemdlibdir, r'^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True)
+}
+PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*"
+
+PACKAGE_BEFORE_PN = "\
+    ${PN}-gui \
+    ${PN}-vconsole-setup \
+    ${PN}-initramfs \
+    ${PN}-analyze \
+    ${PN}-kernel-install \
+    ${PN}-rpm-macros \
+    ${PN}-binfmt \
+    ${PN}-zsh-completion \
+    ${PN}-container \
+    ${PN}-journal-gatewayd \
+    ${PN}-journal-upload \
+    ${PN}-journal-remote \
+    ${PN}-extra-utils \
+    ${PN}-udev-rules \
+    libsystemd-shared \
+    udev \
+    udev-hwdb \
+"
+
+SUMMARY:${PN}-container = "Tools for containers and VMs"
+DESCRIPTION:${PN}-container = "Systemd tools to spawn and manage containers and virtual machines."
+
+SUMMARY:${PN}-journal-gatewayd = "HTTP server for journal events"
+DESCRIPTION:${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default."
+
+SUMMARY:${PN}-journal-upload = "Send journal messages over the network"
+DESCRIPTION:${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL."
+
+SUMMARY:${PN}-journal-remote = "Receive journal messages over the network"
+DESCRIPTION:${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files."
+
+SUMMARY:libsystemd-shared = "Systemd shared library"
+
+SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
+"
+SYSTEMD_SERVICE:${PN}-binfmt = "systemd-binfmt.service"
+
+USERADD_PACKAGES = "${PN} ${PN}-extra-utils \
+                    udev \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
+                    ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
+"
+GROUPADD_PARAM:${PN} = "-r systemd-journal;"
+GROUPADD_PARAM:udev = "-r render"
+GROUPADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}"
+USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'oomd', '--system -d / -M --shell /sbin/nologin systemd-oom;', '', d)}"
+USERADD_PARAM:${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy"
+USERADD_PARAM:${PN}-journal-gatewayd = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway"
+USERADD_PARAM:${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote"
+USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload"
+
+FILES:${PN}-analyze = "${bindir}/systemd-analyze"
+
+FILES:${PN}-initramfs = "/init"
+RDEPENDS:${PN}-initramfs = "${PN}"
+
+FILES:${PN}-gui = "${bindir}/systemadm"
+
+FILES:${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \
+                              ${systemd_system_unitdir}/systemd-vconsole-setup.service \
+                              ${systemd_system_unitdir}/sysinit.target.wants/systemd-vconsole-setup.service"
+
+RDEPENDS:${PN}-kernel-install += "bash"
+FILES:${PN}-kernel-install = "${bindir}/kernel-install \
+                              ${sysconfdir}/kernel/ \
+                              ${exec_prefix}/lib/kernel \
+                             "
+FILES:${PN}-rpm-macros = "${exec_prefix}/lib/rpm \
+                         "
+
+FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions"
+
+FILES:${PN}-binfmt = "${sysconfdir}/binfmt.d/ \
+                      ${exec_prefix}/lib/binfmt.d \
+                      ${rootlibexecdir}/systemd/systemd-binfmt \
+                      ${systemd_system_unitdir}/proc-sys-fs-binfmt_misc.* \
+                      ${systemd_system_unitdir}/systemd-binfmt.service"
+RRECOMMENDS:${PN}-binfmt = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', 'kernel-module-binfmt-misc', '', d)}"
+
+RRECOMMENDS:${PN}-vconsole-setup = "${@bb.utils.contains('PACKAGECONFIG', 'vconsole', 'kbd kbd-consolefonts kbd-keymaps', '', d)}"
+
+
+FILES:${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \
+                                ${systemd_system_unitdir}/systemd-journal-gatewayd.service \
+                                ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \
+                                ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \
+                                ${datadir}/systemd/gatewayd/browse.html \
+                               "
+SYSTEMD_SERVICE:${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket"
+
+FILES:${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \
+                              ${systemd_system_unitdir}/systemd-journal-upload.service \
+                              ${sysconfdir}/systemd/journal-upload.conf \
+                             "
+SYSTEMD_SERVICE:${PN}-journal-upload = "systemd-journal-upload.service"
+
+FILES:${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \
+                              ${sysconfdir}/systemd/journal-remote.conf \
+                              ${systemd_system_unitdir}/systemd-journal-remote.service \
+                              ${systemd_system_unitdir}/systemd-journal-remote.socket \
+                             "
+SYSTEMD_SERVICE:${PN}-journal-remote = "systemd-journal-remote.socket"
+
+
+FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \
+                         ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \
+                         ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \
+                         ${base_bindir}/machinectl \
+                         ${bindir}/systemd-nspawn \
+                         ${nonarch_libdir}/systemd/import-pubring.gpg \
+                         ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \
+                         ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \
+                         ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \
+                         ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \
+                         ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \
+                         ${systemd_system_unitdir}/machine.slice \
+                         ${systemd_system_unitdir}/machines.target \
+                         ${systemd_system_unitdir}/org.freedesktop.import1.busname \
+                         ${systemd_system_unitdir}/org.freedesktop.machine1.busname \
+                         ${systemd_system_unitdir}/systemd-importd.service \
+                         ${systemd_system_unitdir}/systemd-machined.service \
+                         ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \
+                         ${systemd_system_unitdir}/var-lib-machines.mount \
+                         ${rootlibexecdir}/systemd/systemd-import \
+                         ${rootlibexecdir}/systemd/systemd-importd \
+                         ${rootlibexecdir}/systemd/systemd-machined \
+                         ${rootlibexecdir}/systemd/systemd-pull \
+                         ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \
+                         ${exec_prefix}/lib/tmpfiles.d/README \
+                         ${systemd_system_unitdir}/systemd-nspawn@.service \
+                         ${libdir}/libnss_mymachines.so.2 \
+                         ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \
+                         ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \
+                         ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \
+                         ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \
+                         ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \
+                         ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \
+                        "
+
+# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox.
+RRECOMMENDS:${PN}-container += "\
+                         ${PN}-journal-gatewayd \
+                         ${PN}-journal-remote \
+                         ${PN}-journal-upload \
+                         kernel-module-dm-mod \
+                         kernel-module-loop \
+                         kernel-module-tun \
+                         tar \
+                        "
+
+FILES:${PN}-extra-utils = "\
+                        ${base_bindir}/systemd-escape \
+                        ${base_bindir}/systemd-inhibit \
+                        ${bindir}/systemd-detect-virt \
+                        ${bindir}/systemd-dissect \
+                        ${bindir}/systemd-path \
+                        ${bindir}/systemd-run \
+                        ${bindir}/systemd-cat \
+                        ${bindir}/systemd-creds \
+                        ${bindir}/systemd-cryptenroll \
+                        ${bindir}/systemd-delta \
+                        ${bindir}/systemd-cgls \
+                        ${bindir}/systemd-cgtop \
+                        ${bindir}/systemd-stdio-bridge \
+                        ${base_bindir}/systemd-ask-password \
+                        ${base_bindir}/systemd-tty-ask-password-agent \
+                        ${base_sbindir}/mount.ddi \
+                        ${systemd_system_unitdir}/initrd.target.wants/systemd-pcrphase-initrd.path \
+                        ${systemd_system_unitdir}/systemd-ask-password-console.path \
+                        ${systemd_system_unitdir}/systemd-ask-password-console.service \
+                        ${systemd_system_unitdir}/systemd-ask-password-wall.path \
+                        ${systemd_system_unitdir}/systemd-ask-password-wall.service \
+                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-console.path \
+                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-wall.path \
+                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase.path \
+                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase-sysinit.path \
+                        ${systemd_system_unitdir}/multi-user.target.wants/systemd-ask-password-wall.path \
+                        ${rootlibexecdir}/systemd/systemd-resolve-host \
+                        ${rootlibexecdir}/systemd/systemd-ac-power \
+                        ${rootlibexecdir}/systemd/systemd-activate \
+                        ${rootlibexecdir}/systemd/systemd-bus-proxyd \
+                        ${systemd_system_unitdir}/systemd-bus-proxyd.service \
+                        ${systemd_system_unitdir}/systemd-bus-proxyd.socket \
+                        ${rootlibexecdir}/systemd/systemd-measure \
+                        ${rootlibexecdir}/systemd/systemd-pcrphase \
+                        ${rootlibexecdir}/systemd/systemd-socket-proxyd \
+                        ${rootlibexecdir}/systemd/systemd-reply-password \
+                        ${rootlibexecdir}/systemd/systemd-sleep \
+                        ${rootlibexecdir}/systemd/system-sleep \
+                        ${systemd_system_unitdir}/systemd-hibernate.service \
+                        ${systemd_system_unitdir}/systemd-hybrid-sleep.service \
+                        ${systemd_system_unitdir}/systemd-pcrphase-initrd.service \
+                        ${systemd_system_unitdir}/systemd-pcrphase.service \
+                        ${systemd_system_unitdir}/systemd-pcrphase-sysinit.service \
+                        ${systemd_system_unitdir}/systemd-suspend.service \
+                        ${systemd_system_unitdir}/sleep.target \
+                        ${rootlibexecdir}/systemd/systemd-initctl \
+                        ${systemd_system_unitdir}/systemd-initctl.service \
+                        ${systemd_system_unitdir}/systemd-initctl.socket \
+                        ${systemd_system_unitdir}/sockets.target.wants/systemd-initctl.socket \
+                        ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \
+                        ${rootlibexecdir}/systemd/systemd-cgroups-agent \
+"
+
+FILES:${PN}-udev-rules = "\
+                        ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \
+                        ${rootlibexecdir}/udev/rules.d/71-seat.rules \
+                        ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \
+                        ${rootlibexecdir}/udev/rules.d/99-systemd.rules \
+"
+
+CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \
+	${sysconfdir}/systemd/journald.conf \
+	${sysconfdir}/systemd/logind.conf \
+	${sysconfdir}/systemd/networkd.conf \
+	${sysconfdir}/systemd/pstore.conf \
+	${sysconfdir}/systemd/resolved.conf \
+	${sysconfdir}/systemd/sleep.conf \
+	${sysconfdir}/systemd/system.conf \
+	${sysconfdir}/systemd/timesyncd.conf \
+	${sysconfdir}/systemd/user.conf \
+"
+
+FILES:${PN} = " ${base_bindir}/* \
+                ${base_sbindir}/shutdown \
+                ${base_sbindir}/halt \
+                ${base_sbindir}/poweroff \
+                ${base_sbindir}/runlevel \
+                ${base_sbindir}/telinit \
+                ${base_sbindir}/resolvconf \
+                ${base_sbindir}/reboot \
+                ${base_sbindir}/init \
+                ${datadir}/dbus-1/services \
+                ${datadir}/dbus-1/system-services \
+                ${datadir}/polkit-1 \
+                ${datadir}/${BPN} \
+                ${datadir}/factory \
+                ${sysconfdir}/credstore/ \
+                ${sysconfdir}/credstore.encrypted/ \
+                ${sysconfdir}/dbus-1/ \
+                ${sysconfdir}/modules-load.d/ \
+                ${sysconfdir}/pam.d/ \
+                ${sysconfdir}/profile.d/ \
+                ${sysconfdir}/sysctl.d/ \
+                ${sysconfdir}/systemd/ \
+                ${sysconfdir}/tmpfiles.d/ \
+                ${sysconfdir}/xdg/ \
+                ${sysconfdir}/init.d/README \
+                ${sysconfdir}/resolv-conf.systemd \
+                ${sysconfdir}/X11/xinit/xinitrc.d/* \
+                ${rootlibexecdir}/systemd/* \
+                ${rootlibdir}/systemd/libsystemd-core* \
+                ${libdir}/pam.d \
+                ${nonarch_libdir}/pam.d \
+                ${systemd_unitdir}/* \
+                ${base_libdir}/security/*.so \
+                /cgroup \
+                ${bindir}/systemd* \
+                ${bindir}/busctl \
+                ${bindir}/coredumpctl \
+                ${bindir}/localectl \
+                ${bindir}/hostnamectl \
+                ${bindir}/resolvectl \
+                ${bindir}/timedatectl \
+                ${bindir}/bootctl \
+                ${bindir}/oomctl \
+                ${bindir}/userdbctl \
+                ${exec_prefix}/lib/credstore \
+                ${exec_prefix}/lib/tmpfiles.d/*.conf \
+                ${exec_prefix}/lib/systemd \
+                ${exec_prefix}/lib/modules-load.d \
+                ${exec_prefix}/lib/sysctl.d \
+                ${exec_prefix}/lib/sysusers.d \
+                ${exec_prefix}/lib/environment.d \
+                ${localstatedir} \
+                ${rootlibexecdir}/modprobe.d/systemd.conf \
+                ${rootlibexecdir}/modprobe.d/README \
+                ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \
+                ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '${datadir}/dbus-1/system.d/org.freedesktop.hostname1_no_polkit.conf', '', d)} \
+                ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \
+                ${datadir}/dbus-1/system.d/org.freedesktop.home1.conf \
+               "
+
+FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
+
+RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck util-linux-swaponoff"
+RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}"
+RDEPENDS:${PN} += "volatile-binds"
+
+RRECOMMENDS:${PN} += "systemd-extra-utils \
+                      udev-hwdb \
+                      e2fsprogs-e2fsck \
+                      kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \
+                      os-release \
+                      systemd-conf \
+                      ${@bb.utils.contains('PACKAGECONFIG', 'logind', 'pam-plugin-umask', '', d)} \
+"
+
+INSANE_SKIP:${PN} += "dev-so libdir"
+INSANE_SKIP:${PN}-dbg += "libdir"
+INSANE_SKIP:${PN}-doc += " libdir"
+INSANE_SKIP:libsystemd-shared += "libdir"
+
+FILES:libsystemd-shared = "${rootlibdir}/systemd/libsystemd-shared*.so"
+
+RPROVIDES:udev = "hotplug"
+
+RDEPENDS:udev-hwdb += "udev"
+
+FILES:udev += "${base_sbindir}/udevd \
+               ${rootlibexecdir}/systemd/network/99-default.link \
+               ${rootlibexecdir}/systemd/systemd-udevd \
+               ${rootlibexecdir}/udev/accelerometer \
+               ${rootlibexecdir}/udev/ata_id \
+               ${rootlibexecdir}/udev/cdrom_id \
+               ${rootlibexecdir}/udev/collect \
+               ${rootlibexecdir}/udev/dmi_memory_id \
+               ${rootlibexecdir}/udev/fido_id \
+               ${rootlibexecdir}/udev/findkeyboards \
+               ${rootlibexecdir}/udev/iocost \
+               ${rootlibexecdir}/udev/keyboard-force-release.sh \
+               ${rootlibexecdir}/udev/keymap \
+               ${rootlibexecdir}/udev/mtd_probe \
+               ${rootlibexecdir}/udev/scsi_id \
+               ${rootlibexecdir}/udev/v4l_id \
+               ${rootlibexecdir}/udev/keymaps \
+               ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \
+               ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \
+               ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \
+               ${rootlibexecdir}/udev/rules.d/60-block.rules \
+               ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \
+               ${rootlibexecdir}/udev/rules.d/60-dmi-id.rules \
+               ${rootlibexecdir}/udev/rules.d/60-drm.rules \
+               ${rootlibexecdir}/udev/rules.d/60-evdev.rules \
+               ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \
+               ${rootlibexecdir}/udev/rules.d/60-infiniband.rules \
+               ${rootlibexecdir}/udev/rules.d/60-input-id.rules \
+               ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \
+               ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \
+               ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \
+               ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \
+               ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \
+               ${rootlibexecdir}/udev/rules.d/60-sensor.rules \
+               ${rootlibexecdir}/udev/rules.d/60-serial.rules \
+               ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \
+               ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \
+               ${rootlibexecdir}/udev/rules.d/70-camera.rules \
+               ${rootlibexecdir}/udev/rules.d/70-joystick.rules \
+               ${rootlibexecdir}/udev/rules.d/70-memory.rules \
+               ${rootlibexecdir}/udev/rules.d/70-mouse.rules \
+               ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \
+               ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \
+               ${rootlibexecdir}/udev/rules.d/75-net-description.rules \
+               ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \
+               ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \
+               ${rootlibexecdir}/udev/rules.d/80-drivers.rules \
+               ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \
+               ${rootlibexecdir}/udev/rules.d/81-net-dhcp.rules \
+               ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \
+               ${rootlibexecdir}/udev/rules.d/90-iocost.rules \
+               ${rootlibexecdir}/udev/rules.d/README \
+               ${sysconfdir}/udev \
+               ${sysconfdir}/init.d/systemd-udevd \
+               ${systemd_system_unitdir}/*udev* \
+               ${systemd_system_unitdir}/*.wants/*udev* \
+               ${base_bindir}/systemd-hwdb \
+               ${base_bindir}/udevadm \
+               ${base_sbindir}/udevadm \
+               ${datadir}/bash-completion/completions/udevadm \
+               ${systemd_system_unitdir}/systemd-hwdb-update.service \
+              "
+
+FILES:udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \
+                   "
+
+RCONFLICTS:${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}"
+
+INITSCRIPT_PACKAGES = "udev"
+INITSCRIPT_NAME:udev = "systemd-udevd"
+INITSCRIPT_PARAMS:udev = "start 03 S ."
+
+python __anonymous() {
+    if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
+        d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+
+    if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d):
+        bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]")
+
+    if bb.utils.contains('PACKAGECONFIG', 'homed', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'userdb openssl cryptsetup', True, False, d):
+        bb.error("PACKAGECONFIG[homed] requires PACKAGECONFIG[userdb], PACKAGECONFIG[openssl] and PACKAGECONFIG[cryptsetup]")
+}
+
+python do_warn_musl() {
+    if d.getVar('TCLIBC') == "musl":
+        bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.")
+}
+addtask warn_musl before do_configure
+
+ALTERNATIVE:${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}"
+
+ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd"
+ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf"
+ALTERNATIVE_PRIORITY[resolv-conf] ?= "50"
+
+ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
+ALTERNATIVE_PRIORITY[halt] ?= "300"
+
+ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
+ALTERNATIVE_PRIORITY[reboot] ?= "300"
+
+ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
+ALTERNATIVE_PRIORITY[shutdown] ?= "300"
+
+ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
+ALTERNATIVE_PRIORITY[poweroff] ?= "300"
+
+ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl"
+ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
+ALTERNATIVE_PRIORITY[runlevel] ?= "300"
+
+pkg_postinst:${PN}:libc-glibc () {
+	sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+		-e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
+		-i $D${sysconfdir}/nsswitch.conf
+}
+
+pkg_prerm:${PN}:libc-glibc () {
+	sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+		-e '/^hosts:/s/\s*myhostname//' \
+		-i $D${sysconfdir}/nsswitch.conf
+}
+
+PACKAGE_WRITE_DEPS += "qemu-native"
+pkg_postinst:udev-hwdb () {
+	if test -n "$D"; then
+		$INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" base_bindir="${base_bindir}"
+	else
+		udevadm hwdb --update
+	fi
+}
+
+pkg_prerm:udev-hwdb () {
+	rm -f $D${sysconfdir}/udev/hwdb.bin
+}
diff --git a/poky/meta/recipes-core/systemd/systemd_254.bb b/poky/meta/recipes-core/systemd/systemd_254.bb
deleted file mode 100644
index 8d5cf13..0000000
--- a/poky/meta/recipes-core/systemd/systemd_254.bb
+++ /dev/null
@@ -1,854 +0,0 @@
-require systemd.inc
-
-PROVIDES = "udev"
-
-PE = "1"
-
-DEPENDS = "intltool-native gperf-native libcap util-linux python3-jinja2-native"
-
-SECTION = "base/shell"
-
-inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check
-
-# unmerged-usr support is deprecated upstream, taints the system and will be
-# removed in the near future. Fail the build if it is not enabled.
-REQUIRED_DISTRO_FEATURES += "usrmerge"
-
-# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so
-# that we don't build both udev and systemd in world builds.
-REQUIRED_DISTRO_FEATURES += "systemd"
-
-SRC_URI += " \
-           file://touchscreen.rules \
-           file://00-create-volatile.conf \
-           file://basic.conf.in \
-           ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \
-           ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \
-           file://init \
-           file://99-default.preset \
-           file://systemd-pager.sh \
-           file://0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch \
-           file://0008-implment-systemd-sysv-install-for-OE.patch \
-           file://0004-Move-sysusers.d-sysctl.d-binfmt.d-modules-load.d-to-.patch \
-           "
-
-# patches needed by musl
-SRC_URI:append:libc-musl = " ${SRC_URI_MUSL}"
-SRC_URI_MUSL = "\
-               file://0009-missing_type.h-add-comparison_fn_t.patch \
-               file://0010-add-fallback-parse_printf_format-implementation.patch \
-               file://0011-src-basic-missing.h-check-for-missing-strndupa.patch \
-               file://0012-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch \
-               file://0013-add-missing-FTW_-macros-for-musl.patch \
-               file://0014-Use-uintmax_t-for-handling-rlim_t.patch \
-               file://0016-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \
-               file://0017-Define-glibc-compatible-basename-for-non-glibc-syste.patch \
-               file://0018-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \
-               file://0019-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \
-               file://0020-avoid-redefinition-of-prctl_mm_map-structure.patch \
-               file://0021-do-not-disable-buffer-in-writing-files.patch \
-               file://0022-Handle-__cpu_mask-usage.patch \
-               file://0023-Handle-missing-gshadow.patch \
-               file://0024-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch \
-               file://0005-pass-correct-parameters-to-getdents64.patch \
-               file://0001-Adjust-for-musl-headers.patch \
-               file://0006-test-bus-error-strerror-is-assumed-to-be-GNU-specifi.patch \
-               file://0003-errno-util-Make-STRERROR-portable-for-musl.patch \
-               file://0025-include-sys-file.h-for-LOCK_EX.patch \
-               file://0026-test-test-sizeof-Include-sys-timex.h-for-struct-time.patch \
-               file://0027-include-missing-sys-file.h-for-LOCK_EX.patch \
-               file://0028-sd-event-Make-malloc_trim-conditional-on-glibc.patch \
-               file://0029-shared-Do-not-use-malloc_info-on-musl.patch \
-               "
-
-PAM_PLUGINS = " \
-    pam-plugin-unix \
-    pam-plugin-loginuid \
-    pam-plugin-keyinit \
-    pam-plugin-namespace \
-"
-
-PACKAGECONFIG ??= " \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', 'link-udev-shared', d)} \
-    backlight \
-    binfmt \
-    gshadow \
-    hibernate \
-    hostnamed \
-    idn \
-    ima \
-    kmod \
-    localed \
-    logind \
-    machined \
-    myhostname \
-    networkd \
-    nss \
-    nss-mymachines \
-    nss-resolve \
-    quotacheck \
-    randomseed \
-    resolved \
-    set-time-epoch \
-    sysusers \
-    sysvinit \
-    timedated \
-    timesyncd \
-    userdb \
-    utmp \
-    vconsole \
-    wheel-group \
-    zstd \
-"
-
-PACKAGECONFIG:remove:libc-musl = " \
-    gshadow \
-    idn \
-    localed \
-    myhostname \
-    nss \
-    nss-mymachines \
-    nss-resolve \
-    sysusers \
-    userdb \
-    utmp \
-"
-
-# https://github.com/seccomp/libseccomp/issues/347
-PACKAGECONFIG:remove:mipsarch = "seccomp"
-
-TARGET_CC_ARCH:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0 -D_LARGEFILE64_SOURCE"
-
-# Some of the dependencies are weak-style recommends - if not available at runtime,
-# systemd won't fail but the library-related feature will be skipped with a warning.
-
-# Use the upstream systemd serial-getty@.service and rely on
-# systemd-getty-generator instead of using the OE-core specific
-# systemd-serialgetty.bb - not enabled by default.
-PACKAGECONFIG[serial-getty-generator] = ""
-
-PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl"
-PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit"
-PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false"
-PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false"
-PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2"
-PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid"
-PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false"
-PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup"
-PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device"
-# If multiple compression libraries are enabled, the format to use for compression is chosen implicitly,
-# so if you want to compress with e.g. lz4 you cannot enable zstd, so you cannot read zstd-compressed journal files.
-# This option allows to enable all compression formats for reading, but choosing a specific one for writing.
-PACKAGECONFIG[default-compression-lz4] = "-Dlz4=true -Ddefault-compression=lz4,,lz4"
-PACKAGECONFIG[default-compression-xz] = "-Dxz=true -Ddefault-compression=xz,,xz"
-PACKAGECONFIG[default-compression-zstd] = "-Dzstd=true -Ddefault-compression=zstd,,zstd"
-PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus"
-PACKAGECONFIG[efi] = "-Defi=true -Dbootloader=true,-Defi=false -Dbootloader=false,python3-pyelftools-native"
-PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils"
-PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false"
-PACKAGECONFIG[repart] = "-Drepart=true,-Drepart=false"
-PACKAGECONFIG[homed] = "-Dhomed=true,-Dhomed=false"
-# Sign the journal for anti-tampering
-PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt"
-PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
-PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false"
-PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false"
-PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false"
-PACKAGECONFIG[idn] = "-Didn=true,-Didn=false"
-PACKAGECONFIG[ima] = "-Dima=true,-Dima=false"
-# importd requires journal-upload/xz/zlib/bzip2/gcrypt
-PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false,glib-2.0"
-# Update NAT firewall rules
-PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables"
-PACKAGECONFIG[journal-color] = ",,,less"
-PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl"
-PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod"
-PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig"
-PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn,,libidn"
-PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2,,libidn2"
-# Link udev shared with systemd helper library.
-# If enabled the udev package depends on the systemd package (which has the needed shared library).
-PACKAGECONFIG[link-udev-shared] = "-Dlink-udev-shared=true,-Dlink-udev-shared=false"
-PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false"
-PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false"
-PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4"
-PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false"
-PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd"
-PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname"
-PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false"
-PACKAGECONFIG[no-dns-fallback] = "-Ddns-servers="
-PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false"
-PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false"
-PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false"
-PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false"
-PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl"
-PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}"
-PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2"
-PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false"
-# If polkit is disabled and networkd+hostnamed are in use, enabling this option and
-# using dbus-broker will allow networkd to be authorized to change the
-# hostname without acquiring additional privileges
-PACKAGECONFIG[polkit_hostnamed_fallback] = ",,,,dbus-broker,polkit"
-PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false"
-PACKAGECONFIG[pstore] = "-Dpstore=true,-Dpstore=false"
-PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode,,qrencode"
-PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false"
-PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false"
-PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false"
-PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false"
-PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp"
-PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell"
-PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false"
-PACKAGECONFIG[sysext] = "-Dsysext=true, -Dsysext=false"
-PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false"
-PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d"
-# When enabled use reproducble build timestamp if set as time epoch,
-# or build time if not. When disabled, time epoch is unset.
-def build_epoch(d):
-    epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1"
-    return '-Dtime-epoch=%d' % int(epoch)
-PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0"
-PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false"
-PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false"
-PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true"
-PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true"
-PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false"
-PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false"
-PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind"
-PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup"
-PACKAGECONFIG[wheel-group] = "-Dwheel-group=true, -Dwheel-group=false"
-PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false"
-# Verify keymaps on locale change
-PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon"
-PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz"
-PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib"
-PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd"
-
-# Helper variables to clarify locations.  This mirrors the logic in systemd's
-# build system.
-rootprefix ?= "${root_prefix}"
-rootlibdir ?= "${base_libdir}"
-rootlibexecdir = "${rootprefix}/lib"
-
-EXTRA_OEMESON += "-Dnobody-user=nobody \
-                  -Dnobody-group=nogroup \
-                  -Drootlibdir=${rootlibdir} \
-                  -Drootprefix=${rootprefix} \
-                  -Ddefault-locale=C \
-                  -Dmode=release \
-                  -Dsystem-alloc-uid-min=101 \
-                  -Dsystem-uid-max=999 \
-                  -Dsystem-alloc-gid-min=101 \
-                  -Dsystem-gid-max=999 \
-                  "
-
-# Hardcode target binary paths to avoid using paths from sysroot or worse
-# it pokes for these binaries on build host and encodes that distro assumption
-# into target
-EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \
-                  -Dkmod-path=${base_bindir}/kmod \
-                  -Dmount-path=${base_bindir}/mount \
-                  -Dquotacheck-path=${sbindir}/quotacheck \
-                  -Dquotaon-path=${sbindir}/quotaon \
-                  -Dsulogin-path=${base_sbindir}/sulogin \
-                  -Dnologin-path=${base_sbindir}/nologin \
-                  -Dumount-path=${base_bindir}/umount \
-                  -Dloadkeys-path=${bindir}/loadkeys \
-                  -Dsetfont-path=${bindir}/setfont"
-
-# The 60 seconds is watchdog's default vaule.
-WATCHDOG_TIMEOUT ??= "60"
-
-do_configure:prepend() {
-  sed s@:ROOT_HOME:@${ROOT_HOME}@g ${WORKDIR}/basic.conf.in > ${S}/sysusers.d/basic.conf.in
-}
-
-do_install() {
-	meson_do_install
-	install -d ${D}/${base_sbindir}
-	if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then
-		# Provided by a separate recipe
-		rm ${D}${systemd_system_unitdir}/serial-getty* -f
-	fi
-
-	# Provide support for initramfs
-	[ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init
-	[ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd
-
-	install -d ${D}${sysconfdir}/udev/rules.d/
-	install -d ${D}${sysconfdir}/tmpfiles.d
-	for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do
-		install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/
-	done
-
-	install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
-
-	if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
-		install -d ${D}${sysconfdir}/init.d
-		install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd
-		sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd
-		install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install
-	fi
-
-	if "${@'true' if oe.types.boolean(d.getVar('VOLATILE_LOG_DIR')) else 'false'}"; then
-		# /var/log is typically a symbolic link to inside /var/volatile,
-		# which is expected to be empty.
-		rm -rf ${D}${localstatedir}/log
-	else
-		chown root:systemd-journal ${D}${localstatedir}/log/journal
-
-		# journal-remote creates this at start
-		rm -rf ${D}${localstatedir}/log/journal/remote
-	fi
-
-	# if the user requests /tmp be on persistent storage (i.e. not volatile)
-	# then don't use a tmpfs for /tmp
-	if [ "${VOLATILE_TMP_DIR}" != "yes" ]; then
-		rm -f ${D}${rootlibdir}/systemd/system/tmp.mount
-		rm -f ${D}${rootlibdir}/systemd/system/local-fs.target.wants/tmp.mount
-	fi
-
-	install -d ${D}${systemd_system_unitdir}/graphical.target.wants
-	install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
-	install -d ${D}${systemd_system_unitdir}/poweroff.target.wants
-	install -d ${D}${systemd_system_unitdir}/reboot.target.wants
-	install -d ${D}${systemd_system_unitdir}/rescue.target.wants
-
-	# Create symlinks for systemd-update-utmp-runlevel.service
-	if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then
-		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service
-		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service
-		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/poweroff.target.wants/systemd-update-utmp-runlevel.service
-		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/reboot.target.wants/systemd-update-utmp-runlevel.service
-		ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service
-	fi
-
-	# this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it
-	# for existence else it fails
-	if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ] &&
-	   ! ${@bb.utils.contains('PACKAGECONFIG', 'networkd', 'true', 'false', d)}; then
-		echo 'd /run/systemd/netif/links 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
-	fi
-	if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then
-		echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
-		echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
-		echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
-		ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
-	else
-		sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
-		ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
-	fi
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then
-		rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf
-		rm -r ${D}${sysconfdir}/X11
-	fi
-
-	# If polkit is setup fixup permissions and ownership
-	if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then
-		if [ -d ${D}${datadir}/polkit-1/rules.d ]; then
-			chmod 700 ${D}${datadir}/polkit-1/rules.d
-			chown polkitd:root ${D}${datadir}/polkit-1/rules.d
-		fi
-	fi
-
-	# If polkit is not available and a fallback was requested, install a drop-in that allows networkd to
-	# request hostname changes via DBUS without elevating its privileges
-	if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then
-		install -d ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
-		install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/
-		install -d ${D}${datadir}/dbus-1/system.d/
-		install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/
-	fi
-
-	# create link for existing udev rules
-	ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm
-
-	# install default policy for presets
-	# https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto
-	install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset
-
-	# add a profile fragment to disable systemd pager with busybox less
-	install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh
-
-    if [ -n "${WATCHDOG_TIMEOUT}" ]; then
-        sed -i -e 's/#RebootWatchdogSec=10min/RebootWatchdogSec=${WATCHDOG_TIMEOUT}/' \
-            ${D}/${sysconfdir}/systemd/system.conf
-    fi
-}
-
-python populate_packages:prepend (){
-    systemdlibdir = d.getVar("rootlibdir")
-    do_split_packages(d, systemdlibdir, r'^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True)
-}
-PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*"
-
-PACKAGE_BEFORE_PN = "\
-    ${PN}-gui \
-    ${PN}-vconsole-setup \
-    ${PN}-initramfs \
-    ${PN}-analyze \
-    ${PN}-kernel-install \
-    ${PN}-rpm-macros \
-    ${PN}-binfmt \
-    ${PN}-zsh-completion \
-    ${PN}-container \
-    ${PN}-journal-gatewayd \
-    ${PN}-journal-upload \
-    ${PN}-journal-remote \
-    ${PN}-extra-utils \
-    ${PN}-udev-rules \
-    libsystemd-shared \
-    udev \
-    udev-hwdb \
-"
-
-SUMMARY:${PN}-container = "Tools for containers and VMs"
-DESCRIPTION:${PN}-container = "Systemd tools to spawn and manage containers and virtual machines."
-
-SUMMARY:${PN}-journal-gatewayd = "HTTP server for journal events"
-DESCRIPTION:${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default."
-
-SUMMARY:${PN}-journal-upload = "Send journal messages over the network"
-DESCRIPTION:${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL."
-
-SUMMARY:${PN}-journal-remote = "Receive journal messages over the network"
-DESCRIPTION:${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files."
-
-SUMMARY:libsystemd-shared = "Systemd shared library"
-
-SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
-"
-SYSTEMD_SERVICE:${PN}-binfmt = "systemd-binfmt.service"
-
-USERADD_PACKAGES = "${PN} ${PN}-extra-utils \
-                    udev \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \
-                    ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \
-"
-GROUPADD_PARAM:${PN} = "-r systemd-journal;"
-GROUPADD_PARAM:udev = "-r render"
-GROUPADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}"
-USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'oomd', '--system -d / -M --shell /sbin/nologin systemd-oom;', '', d)}"
-USERADD_PARAM:${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy"
-USERADD_PARAM:${PN}-journal-gatewayd = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway"
-USERADD_PARAM:${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote"
-USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload"
-
-FILES:${PN}-analyze = "${bindir}/systemd-analyze"
-
-FILES:${PN}-initramfs = "/init"
-RDEPENDS:${PN}-initramfs = "${PN}"
-
-FILES:${PN}-gui = "${bindir}/systemadm"
-
-FILES:${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \
-                              ${systemd_system_unitdir}/systemd-vconsole-setup.service \
-                              ${systemd_system_unitdir}/sysinit.target.wants/systemd-vconsole-setup.service"
-
-RDEPENDS:${PN}-kernel-install += "bash"
-FILES:${PN}-kernel-install = "${bindir}/kernel-install \
-                              ${sysconfdir}/kernel/ \
-                              ${exec_prefix}/lib/kernel \
-                             "
-FILES:${PN}-rpm-macros = "${exec_prefix}/lib/rpm \
-                         "
-
-FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions"
-
-FILES:${PN}-binfmt = "${sysconfdir}/binfmt.d/ \
-                      ${exec_prefix}/lib/binfmt.d \
-                      ${rootlibexecdir}/systemd/systemd-binfmt \
-                      ${systemd_system_unitdir}/proc-sys-fs-binfmt_misc.* \
-                      ${systemd_system_unitdir}/systemd-binfmt.service"
-RRECOMMENDS:${PN}-binfmt = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', 'kernel-module-binfmt-misc', '', d)}"
-
-RRECOMMENDS:${PN}-vconsole-setup = "${@bb.utils.contains('PACKAGECONFIG', 'vconsole', 'kbd kbd-consolefonts kbd-keymaps', '', d)}"
-
-
-FILES:${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \
-                                ${systemd_system_unitdir}/systemd-journal-gatewayd.service \
-                                ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \
-                                ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \
-                                ${datadir}/systemd/gatewayd/browse.html \
-                               "
-SYSTEMD_SERVICE:${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket"
-
-FILES:${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \
-                              ${systemd_system_unitdir}/systemd-journal-upload.service \
-                              ${sysconfdir}/systemd/journal-upload.conf \
-                             "
-SYSTEMD_SERVICE:${PN}-journal-upload = "systemd-journal-upload.service"
-
-FILES:${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \
-                              ${sysconfdir}/systemd/journal-remote.conf \
-                              ${systemd_system_unitdir}/systemd-journal-remote.service \
-                              ${systemd_system_unitdir}/systemd-journal-remote.socket \
-                             "
-SYSTEMD_SERVICE:${PN}-journal-remote = "systemd-journal-remote.socket"
-
-
-FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \
-                         ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \
-                         ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \
-                         ${base_bindir}/machinectl \
-                         ${bindir}/systemd-nspawn \
-                         ${nonarch_libdir}/systemd/import-pubring.gpg \
-                         ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \
-                         ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \
-                         ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \
-                         ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \
-                         ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \
-                         ${systemd_system_unitdir}/machine.slice \
-                         ${systemd_system_unitdir}/machines.target \
-                         ${systemd_system_unitdir}/org.freedesktop.import1.busname \
-                         ${systemd_system_unitdir}/org.freedesktop.machine1.busname \
-                         ${systemd_system_unitdir}/systemd-importd.service \
-                         ${systemd_system_unitdir}/systemd-machined.service \
-                         ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \
-                         ${systemd_system_unitdir}/var-lib-machines.mount \
-                         ${rootlibexecdir}/systemd/systemd-import \
-                         ${rootlibexecdir}/systemd/systemd-importd \
-                         ${rootlibexecdir}/systemd/systemd-machined \
-                         ${rootlibexecdir}/systemd/systemd-pull \
-                         ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \
-                         ${exec_prefix}/lib/tmpfiles.d/README \
-                         ${systemd_system_unitdir}/systemd-nspawn@.service \
-                         ${libdir}/libnss_mymachines.so.2 \
-                         ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \
-                         ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \
-                         ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \
-                         ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \
-                         ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \
-                         ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \
-                        "
-
-# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox.
-RRECOMMENDS:${PN}-container += "\
-                         ${PN}-journal-gatewayd \
-                         ${PN}-journal-remote \
-                         ${PN}-journal-upload \
-                         kernel-module-dm-mod \
-                         kernel-module-loop \
-                         kernel-module-tun \
-                         tar \
-                        "
-
-FILES:${PN}-extra-utils = "\
-                        ${base_bindir}/systemd-escape \
-                        ${base_bindir}/systemd-inhibit \
-                        ${bindir}/systemd-detect-virt \
-                        ${bindir}/systemd-dissect \
-                        ${bindir}/systemd-path \
-                        ${bindir}/systemd-run \
-                        ${bindir}/systemd-cat \
-                        ${bindir}/systemd-creds \
-                        ${bindir}/systemd-cryptenroll \
-                        ${bindir}/systemd-delta \
-                        ${bindir}/systemd-cgls \
-                        ${bindir}/systemd-cgtop \
-                        ${bindir}/systemd-stdio-bridge \
-                        ${base_bindir}/systemd-ask-password \
-                        ${base_bindir}/systemd-tty-ask-password-agent \
-                        ${base_sbindir}/mount.ddi \
-                        ${systemd_system_unitdir}/initrd.target.wants/systemd-pcrphase-initrd.path \
-                        ${systemd_system_unitdir}/systemd-ask-password-console.path \
-                        ${systemd_system_unitdir}/systemd-ask-password-console.service \
-                        ${systemd_system_unitdir}/systemd-ask-password-wall.path \
-                        ${systemd_system_unitdir}/systemd-ask-password-wall.service \
-                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-console.path \
-                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-wall.path \
-                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase.path \
-                        ${systemd_system_unitdir}/sysinit.target.wants/systemd-pcrphase-sysinit.path \
-                        ${systemd_system_unitdir}/multi-user.target.wants/systemd-ask-password-wall.path \
-                        ${rootlibexecdir}/systemd/systemd-resolve-host \
-                        ${rootlibexecdir}/systemd/systemd-ac-power \
-                        ${rootlibexecdir}/systemd/systemd-activate \
-                        ${rootlibexecdir}/systemd/systemd-bus-proxyd \
-                        ${systemd_system_unitdir}/systemd-bus-proxyd.service \
-                        ${systemd_system_unitdir}/systemd-bus-proxyd.socket \
-                        ${rootlibexecdir}/systemd/systemd-measure \
-                        ${rootlibexecdir}/systemd/systemd-pcrphase \
-                        ${rootlibexecdir}/systemd/systemd-socket-proxyd \
-                        ${rootlibexecdir}/systemd/systemd-reply-password \
-                        ${rootlibexecdir}/systemd/systemd-sleep \
-                        ${rootlibexecdir}/systemd/system-sleep \
-                        ${systemd_system_unitdir}/systemd-hibernate.service \
-                        ${systemd_system_unitdir}/systemd-hybrid-sleep.service \
-                        ${systemd_system_unitdir}/systemd-pcrphase-initrd.service \
-                        ${systemd_system_unitdir}/systemd-pcrphase.service \
-                        ${systemd_system_unitdir}/systemd-pcrphase-sysinit.service \
-                        ${systemd_system_unitdir}/systemd-suspend.service \
-                        ${systemd_system_unitdir}/sleep.target \
-                        ${rootlibexecdir}/systemd/systemd-initctl \
-                        ${systemd_system_unitdir}/systemd-initctl.service \
-                        ${systemd_system_unitdir}/systemd-initctl.socket \
-                        ${systemd_system_unitdir}/sockets.target.wants/systemd-initctl.socket \
-                        ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \
-                        ${rootlibexecdir}/systemd/systemd-cgroups-agent \
-"
-
-FILES:${PN}-udev-rules = "\
-                        ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \
-                        ${rootlibexecdir}/udev/rules.d/71-seat.rules \
-                        ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \
-                        ${rootlibexecdir}/udev/rules.d/99-systemd.rules \
-"
-
-CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \
-	${sysconfdir}/systemd/journald.conf \
-	${sysconfdir}/systemd/logind.conf \
-	${sysconfdir}/systemd/networkd.conf \
-	${sysconfdir}/systemd/pstore.conf \
-	${sysconfdir}/systemd/resolved.conf \
-	${sysconfdir}/systemd/sleep.conf \
-	${sysconfdir}/systemd/system.conf \
-	${sysconfdir}/systemd/timesyncd.conf \
-	${sysconfdir}/systemd/user.conf \
-"
-
-FILES:${PN} = " ${base_bindir}/* \
-                ${base_sbindir}/shutdown \
-                ${base_sbindir}/halt \
-                ${base_sbindir}/poweroff \
-                ${base_sbindir}/runlevel \
-                ${base_sbindir}/telinit \
-                ${base_sbindir}/resolvconf \
-                ${base_sbindir}/reboot \
-                ${base_sbindir}/init \
-                ${datadir}/dbus-1/services \
-                ${datadir}/dbus-1/system-services \
-                ${datadir}/polkit-1 \
-                ${datadir}/${BPN} \
-                ${datadir}/factory \
-                ${sysconfdir}/credstore/ \
-                ${sysconfdir}/credstore.encrypted/ \
-                ${sysconfdir}/dbus-1/ \
-                ${sysconfdir}/modules-load.d/ \
-                ${sysconfdir}/pam.d/ \
-                ${sysconfdir}/profile.d/ \
-                ${sysconfdir}/sysctl.d/ \
-                ${sysconfdir}/systemd/ \
-                ${sysconfdir}/tmpfiles.d/ \
-                ${sysconfdir}/xdg/ \
-                ${sysconfdir}/init.d/README \
-                ${sysconfdir}/resolv-conf.systemd \
-                ${sysconfdir}/X11/xinit/xinitrc.d/* \
-                ${rootlibexecdir}/systemd/* \
-                ${rootlibdir}/systemd/libsystemd-core* \
-                ${libdir}/pam.d \
-                ${nonarch_libdir}/pam.d \
-                ${systemd_unitdir}/* \
-                ${base_libdir}/security/*.so \
-                /cgroup \
-                ${bindir}/systemd* \
-                ${bindir}/busctl \
-                ${bindir}/coredumpctl \
-                ${bindir}/localectl \
-                ${bindir}/hostnamectl \
-                ${bindir}/resolvectl \
-                ${bindir}/timedatectl \
-                ${bindir}/bootctl \
-                ${bindir}/oomctl \
-                ${bindir}/userdbctl \
-                ${exec_prefix}/lib/credstore \
-                ${exec_prefix}/lib/tmpfiles.d/*.conf \
-                ${exec_prefix}/lib/systemd \
-                ${exec_prefix}/lib/modules-load.d \
-                ${exec_prefix}/lib/sysctl.d \
-                ${exec_prefix}/lib/sysusers.d \
-                ${exec_prefix}/lib/environment.d \
-                ${localstatedir} \
-                ${rootlibexecdir}/modprobe.d/systemd.conf \
-                ${rootlibexecdir}/modprobe.d/README \
-                ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \
-                ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '${datadir}/dbus-1/system.d/org.freedesktop.hostname1_no_polkit.conf', '', d)} \
-                ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \
-                ${datadir}/dbus-1/system.d/org.freedesktop.home1.conf \
-               "
-
-FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
-
-RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck util-linux-swaponoff"
-RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}"
-RDEPENDS:${PN} += "volatile-binds"
-
-RRECOMMENDS:${PN} += "systemd-extra-utils \
-                      udev-hwdb \
-                      e2fsprogs-e2fsck \
-                      kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \
-                      os-release \
-                      systemd-conf \
-                      ${@bb.utils.contains('PACKAGECONFIG', 'logind', 'pam-plugin-umask', '', d)} \
-"
-
-INSANE_SKIP:${PN} += "dev-so libdir"
-INSANE_SKIP:${PN}-dbg += "libdir"
-INSANE_SKIP:${PN}-doc += " libdir"
-INSANE_SKIP:libsystemd-shared += "libdir"
-
-FILES:libsystemd-shared = "${rootlibdir}/systemd/libsystemd-shared*.so"
-
-RPROVIDES:udev = "hotplug"
-
-RDEPENDS:udev-hwdb += "udev"
-
-FILES:udev += "${base_sbindir}/udevd \
-               ${rootlibexecdir}/systemd/network/99-default.link \
-               ${rootlibexecdir}/systemd/systemd-udevd \
-               ${rootlibexecdir}/udev/accelerometer \
-               ${rootlibexecdir}/udev/ata_id \
-               ${rootlibexecdir}/udev/cdrom_id \
-               ${rootlibexecdir}/udev/collect \
-               ${rootlibexecdir}/udev/dmi_memory_id \
-               ${rootlibexecdir}/udev/fido_id \
-               ${rootlibexecdir}/udev/findkeyboards \
-               ${rootlibexecdir}/udev/iocost \
-               ${rootlibexecdir}/udev/keyboard-force-release.sh \
-               ${rootlibexecdir}/udev/keymap \
-               ${rootlibexecdir}/udev/mtd_probe \
-               ${rootlibexecdir}/udev/scsi_id \
-               ${rootlibexecdir}/udev/v4l_id \
-               ${rootlibexecdir}/udev/keymaps \
-               ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \
-               ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \
-               ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \
-               ${rootlibexecdir}/udev/rules.d/60-block.rules \
-               ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \
-               ${rootlibexecdir}/udev/rules.d/60-dmi-id.rules \
-               ${rootlibexecdir}/udev/rules.d/60-drm.rules \
-               ${rootlibexecdir}/udev/rules.d/60-evdev.rules \
-               ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \
-               ${rootlibexecdir}/udev/rules.d/60-infiniband.rules \
-               ${rootlibexecdir}/udev/rules.d/60-input-id.rules \
-               ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \
-               ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \
-               ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \
-               ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \
-               ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \
-               ${rootlibexecdir}/udev/rules.d/60-sensor.rules \
-               ${rootlibexecdir}/udev/rules.d/60-serial.rules \
-               ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \
-               ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \
-               ${rootlibexecdir}/udev/rules.d/70-camera.rules \
-               ${rootlibexecdir}/udev/rules.d/70-joystick.rules \
-               ${rootlibexecdir}/udev/rules.d/70-memory.rules \
-               ${rootlibexecdir}/udev/rules.d/70-mouse.rules \
-               ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \
-               ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \
-               ${rootlibexecdir}/udev/rules.d/75-net-description.rules \
-               ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \
-               ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \
-               ${rootlibexecdir}/udev/rules.d/80-drivers.rules \
-               ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \
-               ${rootlibexecdir}/udev/rules.d/81-net-dhcp.rules \
-               ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \
-               ${rootlibexecdir}/udev/rules.d/90-iocost.rules \
-               ${rootlibexecdir}/udev/rules.d/README \
-               ${sysconfdir}/udev \
-               ${sysconfdir}/init.d/systemd-udevd \
-               ${systemd_system_unitdir}/*udev* \
-               ${systemd_system_unitdir}/*.wants/*udev* \
-               ${base_bindir}/systemd-hwdb \
-               ${base_bindir}/udevadm \
-               ${base_sbindir}/udevadm \
-               ${datadir}/bash-completion/completions/udevadm \
-               ${systemd_system_unitdir}/systemd-hwdb-update.service \
-              "
-
-FILES:udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \
-                   "
-
-RCONFLICTS:${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}"
-
-INITSCRIPT_PACKAGES = "udev"
-INITSCRIPT_NAME:udev = "systemd-udevd"
-INITSCRIPT_PARAMS:udev = "start 03 S ."
-
-python __anonymous() {
-    if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
-        d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
-
-    if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d):
-        bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]")
-
-    if bb.utils.contains('PACKAGECONFIG', 'homed', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'userdb openssl cryptsetup', True, False, d):
-        bb.error("PACKAGECONFIG[homed] requires PACKAGECONFIG[userdb], PACKAGECONFIG[openssl] and PACKAGECONFIG[cryptsetup]")
-}
-
-python do_warn_musl() {
-    if d.getVar('TCLIBC') == "musl":
-        bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.")
-}
-addtask warn_musl before do_configure
-
-ALTERNATIVE:${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}"
-
-ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd"
-ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf"
-ALTERNATIVE_PRIORITY[resolv-conf] ?= "50"
-
-ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
-ALTERNATIVE_PRIORITY[halt] ?= "300"
-
-ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot"
-ALTERNATIVE_PRIORITY[reboot] ?= "300"
-
-ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown"
-ALTERNATIVE_PRIORITY[shutdown] ?= "300"
-
-ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff"
-ALTERNATIVE_PRIORITY[poweroff] ?= "300"
-
-ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl"
-ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
-ALTERNATIVE_PRIORITY[runlevel] ?= "300"
-
-pkg_postinst:${PN}:libc-glibc () {
-	sed -e '/^hosts:/s/\s*\<myhostname\>//' \
-		-e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
-		-i $D${sysconfdir}/nsswitch.conf
-}
-
-pkg_prerm:${PN}:libc-glibc () {
-	sed -e '/^hosts:/s/\s*\<myhostname\>//' \
-		-e '/^hosts:/s/\s*myhostname//' \
-		-i $D${sysconfdir}/nsswitch.conf
-}
-
-PACKAGE_WRITE_DEPS += "qemu-native"
-pkg_postinst:udev-hwdb () {
-	if test -n "$D"; then
-		$INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" base_bindir="${base_bindir}"
-	else
-		udevadm hwdb --update
-	fi
-}
-
-pkg_prerm:udev-hwdb () {
-	rm -f $D${sysconfdir}/udev/hwdb.bin
-}
diff --git a/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb b/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
index 7aad2e2..b1f9cb4 100644
--- a/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
+++ b/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb
@@ -2,7 +2,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6"
 
-PR = "r10"
 
 SRC_URI = "file://inittab \
            file://start_getty"
diff --git a/poky/meta/recipes-core/util-linux/util-linux-libuuid_2.39.1.bb b/poky/meta/recipes-core/util-linux/util-linux-libuuid_2.39.2.bb
similarity index 100%
rename from poky/meta/recipes-core/util-linux/util-linux-libuuid_2.39.1.bb
rename to poky/meta/recipes-core/util-linux/util-linux-libuuid_2.39.2.bb
diff --git a/poky/meta/recipes-core/util-linux/util-linux.inc b/poky/meta/recipes-core/util-linux/util-linux.inc
index 99ce2a2..952a680 100644
--- a/poky/meta/recipes-core/util-linux/util-linux.inc
+++ b/poky/meta/recipes-core/util-linux/util-linux.inc
@@ -35,6 +35,7 @@
            file://run-ptest \
            file://display_testname_for_subtest.patch \
            file://avoid_parallel_tests.patch \
+           file://0001-lscpu-Use-4K-buffer-size-instead-of-BUFSIZ.patch \
            "
 
-SRC_URI[sha256sum] = "890ae8ff810247bd19e274df76e8371d202cda01ad277681b0ea88eeaa00286b"
+SRC_URI[sha256sum] = "87abdfaa8e490f8be6dde976f7c80b9b5ff9f301e1b67e3899e1f05a59a1531f"
diff --git a/poky/meta/recipes-core/util-linux/util-linux/0001-lscpu-Use-4K-buffer-size-instead-of-BUFSIZ.patch b/poky/meta/recipes-core/util-linux/util-linux/0001-lscpu-Use-4K-buffer-size-instead-of-BUFSIZ.patch
new file mode 100644
index 0000000..4d7487c
--- /dev/null
+++ b/poky/meta/recipes-core/util-linux/util-linux/0001-lscpu-Use-4K-buffer-size-instead-of-BUFSIZ.patch
@@ -0,0 +1,38 @@
+From 95b0405338440cf5cd6d4b2b5c66cda8bf381b28 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2023 00:18:18 -0700
+Subject: [PATCH] lscpu: Use 4K buffer size instead of BUFSIZ
+
+Some lines in /proc/cpuinfo can be large e.g. flags and can then
+truncate them in displaying them
+
+BUFSIZ can vary quite a bit  e.g. glibc/linux systems its 8192
+but on musl/linux and OSX its 1024, on mingW it is 256, some tests e.g.
+x86_64-64cpu-linux6.2.tar.gz has added really long line for cpu flags
+line which is greater than 1024 characters and hence this test fails
+on musl because lscpu -s reports truncated string
+
+Upstream-Status: Submitted [https://github.com/util-linux/util-linux/pull/2492]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sys-utils/lscpu-cputype.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/sys-utils/lscpu-cputype.c b/sys-utils/lscpu-cputype.c
+index 3fd5f7a3c..c8f72ab8a 100644
+--- a/sys-utils/lscpu-cputype.c
++++ b/sys-utils/lscpu-cputype.c
+@@ -462,7 +462,9 @@ static int cpuinfo_parse_cache(struct lscpu_cxt *cxt, int keynum, char *data)
+ int lscpu_read_cpuinfo(struct lscpu_cxt *cxt)
+ {
+ 	FILE *fp;
+-	char buf[BUFSIZ];
++	/* Used to be BUFSIZ which is small on some platforms e.g, musl,
++	 * therefore hardcode to 4K */
++	char buf[4096];
+ 	size_t i;
+ 	struct lscpu_cputype *ct;
+ 	struct cpuinfo_parser _pr = { .cxt = cxt }, *pr = &_pr;
+-- 
+2.42.0
+
diff --git a/poky/meta/recipes-core/util-linux/util-linux_2.39.1.bb b/poky/meta/recipes-core/util-linux/util-linux_2.39.1.bb
deleted file mode 100644
index c814055..0000000
--- a/poky/meta/recipes-core/util-linux/util-linux_2.39.1.bb
+++ /dev/null
@@ -1,324 +0,0 @@
-require util-linux.inc
-
-#gtk-doc is not enabled as it requires xmlto which requires util-linux
-inherit autotools gettext manpages pkgconfig systemd update-alternatives python3-dir bash-completion ptest
-DEPENDS = "libcap-ng ncurses virtual/crypt zlib util-linux-libuuid"
-
-PACKAGES =+ "${PN}-swaponoff"
-PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pylibmount', '${PN}-pylibmount', '', d)}"
-
-python util_linux_binpackages () {
-    def pkg_hook(f, pkg, file_regex, output_pattern, modulename):
-        pn = d.getVar('PN')
-        d.appendVar('RRECOMMENDS:%s' % pn, ' %s' % pkg)
-
-        if d.getVar('ALTERNATIVE:' + pkg):
-            return
-        if d.getVarFlag('ALTERNATIVE_LINK_NAME', modulename):
-            d.setVar('ALTERNATIVE:' + pkg, modulename)
-
-    bindirs = sorted(list(set(d.expand("${base_sbindir} ${base_bindir} ${sbindir} ${bindir}").split())))
-    for dir in bindirs:
-        do_split_packages(d, root=dir,
-                          file_regex=r'(.*)', output_pattern='${PN}-%s',
-                          description='${PN} %s',
-                          hook=pkg_hook, extra_depends='')
-
-    # There are some symlinks for some binaries which we have ignored
-    # above. Add them to the package owning the binary they are
-    # pointing to
-    extras = {}
-    dvar = d.getVar('PKGD')
-    for root in bindirs:
-        for walkroot, dirs, files in os.walk(dvar + root):
-            for f in files:
-                file = os.path.join(walkroot, f)
-                if not os.path.islink(file):
-                    continue
-
-                pkg = os.path.basename(os.readlink(file))
-                extras.setdefault(pkg, [])
-                extras[pkg].append(file.replace(dvar, '', 1))
-
-    pn = d.getVar('PN')
-    for pkg, links in extras.items():
-        of = d.getVar('FILES:' + pn + '-' + pkg)
-        links = of + " " + " ".join(sorted(links))
-        d.setVar('FILES:' + pn + '-' + pkg, links)
-}
-
-# we must execute before update-alternatives PACKAGE_PREPROCESS_FUNCS
-PACKAGE_PREPROCESS_FUNCS =+ "util_linux_binpackages "
-
-# skip libuuid as it will be packaged by the util-linux-libuuid recipe
-python util_linux_libpackages() {
-    do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(?!uuid)(.*)\.so\..*$',
-                      output_pattern='${PN}-lib%s',
-                      description='${PN} lib%s',
-                      extra_depends='', prepend=True, allow_links=True)
-}
-
-PACKAGESPLITFUNCS =+ "util_linux_libpackages"
-
-PACKAGES_DYNAMIC = "^${PN}-.*"
-
-CACHED_CONFIGUREVARS += "scanf_cv_alloc_modifier=ms"
-UTIL_LINUX_LIBDIR = "${libdir}"
-UTIL_LINUX_LIBDIR:class-target = "${base_libdir}"
-EXTRA_OECONF = "\
-    --enable-libuuid --enable-libblkid \
-    \
-    --enable-fsck --enable-kill --enable-last --enable-mesg \
-    --enable-mount --enable-partx --enable-rfkill \
-    --enable-unshare --enable-write \
-    \
-    --disable-bfs --disable-login \
-    --disable-makeinstall-chown --disable-minix --disable-newgrp \
-    --disable-use-tty-group --disable-vipw --disable-raw \
-    \
-    --without-udev \
-    \
-    usrsbin_execdir='${sbindir}' \
-    --libdir='${UTIL_LINUX_LIBDIR}' \
-"
-
-EXTRA_OECONF:append:class-target = " --enable-setpriv"
-EXTRA_OECONF:append:class-native = " --without-cap-ng --disable-setpriv"
-EXTRA_OECONF:append:class-nativesdk = " --without-cap-ng --disable-setpriv"
-EXTRA_OECONF:append = " --disable-hwclock-gplv3"
-
-# enable pcre2 for native/nativesdk to match host distros
-# this helps to keep same expectations when using the SDK or
-# build host versions during development
-#
-PACKAGECONFIG ?= "pcre2"
-PACKAGECONFIG:class-target ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'chfn-chsh pam', '', d)}"
-# inherit manpages requires this to be present, however util-linux does not have
-# configuration options, and installs manpages always
-PACKAGECONFIG[manpages] = ""
-PACKAGECONFIG[pam] = "--enable-su --enable-runuser,--disable-su --disable-runuser, libpam,"
-# Respect the systemd feature for uuidd
-PACKAGECONFIG[systemd] = "--with-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-systemd --without-systemdsystemunitdir,systemd"
-# Build python bindings for libmount
-PACKAGECONFIG[pylibmount] = "--with-python=3 --enable-pylibmount,--without-python --disable-pylibmount,python3"
-# Readline support
-PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
-# PCRE support in hardlink
-PACKAGECONFIG[pcre2] = ",,libpcre2"
-PACKAGECONFIG[cryptsetup] = "--with-cryptsetup,--without-cryptsetup,cryptsetup"
-PACKAGECONFIG[chfn-chsh] = "--enable-chfn-chsh,--disable-chfn-chsh,"
-PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
-
-EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'"
-
-ALLOW_EMPTY:${PN} = "1"
-FILES:${PN} = ""
-FILES:${PN}-doc += "${datadir}/getopt/getopt-*.*"
-FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.la"
-FILES:${PN}-mount = "${sysconfdir}/default/mountall"
-FILES:${PN}-runuser = "${sysconfdir}/pam.d/runuser*"
-FILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
-CONFFILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
-FILES:${PN}-pylibmount = "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.so \
-                          ${PYTHON_SITEPACKAGES_DIR}/libmount/__init__.* \
-                          ${PYTHON_SITEPACKAGES_DIR}/libmount/__pycache__/*"
-
-# Util-linux' blkid replaces the e2fsprogs one
-RCONFLICTS:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
-RREPLACES:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
-
-RRECOMMENDS:${PN}:class-native = ""
-RRECOMMENDS:${PN}:class-nativesdk = ""
-RDEPENDS:${PN}:class-native = ""
-RDEPENDS:${PN}:class-nativesdk = ""
-
-RDEPENDS:${PN} += " util-linux-libuuid"
-RDEPENDS:${PN}-dev += " util-linux-libuuid-dev"
-
-RPROVIDES:${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev"
-
-RDEPENDS:${PN}-bash-completion += "${PN}-lsblk"
-RDEPENDS:${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs findutils grep iproute2 kmod mdadm procps sed socat which xz"
-RRECOMMENDS:${PN}-ptest += "kernel-module-scsi-debug kernel-module-sd-mod kernel-module-loop kernel-module-algif-hash"
-RDEPENDS:${PN}-swaponoff = "${PN}-swapon ${PN}-swapoff"
-ALLOW_EMPTY:${PN}-swaponoff = "1"
-
-#SYSTEMD_PACKAGES = "${PN}-uuidd ${PN}-fstrim"
-SYSTEMD_SERVICE:${PN}-uuidd = "uuidd.socket uuidd.service"
-SYSTEMD_AUTO_ENABLE:${PN}-uuidd = "disable"
-SYSTEMD_SERVICE:${PN}-fstrim = "fstrim.timer fstrim.service"
-SYSTEMD_AUTO_ENABLE:${PN}-fstrim = "disable"
-
-do_install () {
-	# with ccache the timestamps on compiled files may
-	# end up earlier than on their inputs, this allows
-	# for the resultant compilation in the install step.
-	oe_runmake 'CC=${CC}' 'LD=${LD}' \
-		'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
-
-	mkdir -p ${D}${base_bindir}
-
-        sbinprogs="agetty ctrlaltdel cfdisk vipw vigr"
-        sbinprogs_a="pivot_root hwclock mkswap losetup swapon swapoff fdisk fsck blkid blockdev fstrim sulogin switch_root nologin"
-        binprogs_a="dmesg getopt kill more umount mount login su mountpoint"
-
-        if [ "${base_sbindir}" != "${sbindir}" ]; then
-        	mkdir -p ${D}${base_sbindir}
-                for p in $sbinprogs $sbinprogs_a; do
-                        if [ -f "${D}${sbindir}/$p" ]; then
-                                mv "${D}${sbindir}/$p" "${D}${base_sbindir}/$p"
-                        fi
-                done
-        fi
-
-        if [ "${base_bindir}" != "${bindir}" ]; then
-        	mkdir -p ${D}${base_bindir}
-                for p in $binprogs_a; do
-                        if [ -f "${D}${bindir}/$p" ]; then
-                                mv "${D}${bindir}/$p" "${D}${base_bindir}/$p"
-                        fi
-                done
-        fi
-
-	install -d ${D}${sysconfdir}/default/
-	echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
-
-	rm -f ${D}${bindir}/chkdupexe
-}
-
-do_install:append:class-target () {
-	if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
-		install -d ${D}${sysconfdir}/pam.d
-		install -m 0644 ${WORKDIR}/runuser.pamd ${D}${sysconfdir}/pam.d/runuser
-		install -m 0644 ${WORKDIR}/runuser-l.pamd ${D}${sysconfdir}/pam.d/runuser-l
-		# Required for "su -" aka "su --login" because
-		# otherwise it uses "other", which has "auth pam_deny.so"
-		# and thus prevents the operation.
-		ln -s su ${D}${sysconfdir}/pam.d/su-l
-	fi
-}
-# nologin causes a conflict with shadow-native
-# kill causes a conflict with coreutils-native (if ${bindir}==${base_bindir})
-do_install:append:class-native () {
-	rm -f ${D}${base_sbindir}/nologin
-	rm -f ${D}${base_bindir}/kill
-}
-
-# dm-verity support introduces a circular build dependency, so util-linux-libuuid is split out for target builds
-# Need to build libuuid for uuidgen, but then delete it and let the other recipe ship it
-do_install:append () {
-	rm -rf ${D}${includedir}/uuid ${D}${libdir}/pkgconfig/uuid.pc ${D}${libdir}/libuuid* ${D}${base_libdir}/libuuid*
-}
-
-ALTERNATIVE_PRIORITY = "80"
-
-ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid"
-ALTERNATIVE_LINK_NAME[blockdev] = "${base_sbindir}/blockdev"
-ALTERNATIVE_LINK_NAME[cal] = "${bindir}/cal"
-ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
-ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
-ALTERNATIVE_LINK_NAME[chrt] = "${bindir}/chrt"
-ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg"
-ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
-ALTERNATIVE_LINK_NAME[fallocate] = "${bindir}/fallocate"
-ALTERNATIVE_LINK_NAME[fdisk] = "${base_sbindir}/fdisk"
-ALTERNATIVE_LINK_NAME[findfs] = "${sbindir}/findfs"
-ALTERNATIVE_LINK_NAME[flock] = "${bindir}/flock"
-ALTERNATIVE_LINK_NAME[fsck] = "${base_sbindir}/fsck"
-ALTERNATIVE_LINK_NAME[fsfreeze] = "${sbindir}/fsfreeze"
-ALTERNATIVE_LINK_NAME[fstrim] = "${base_sbindir}/fstrim"
-ALTERNATIVE_LINK_NAME[getopt] = "${base_bindir}/getopt"
-ALTERNATIVE:${PN}-agetty = "getty"
-ALTERNATIVE_LINK_NAME[getty] = "${base_sbindir}/getty"
-ALTERNATIVE_TARGET[getty] = "${base_sbindir}/agetty"
-ALTERNATIVE_LINK_NAME[hexdump] = "${bindir}/hexdump"
-ALTERNATIVE_LINK_NAME[hwclock] = "${base_sbindir}/hwclock"
-ALTERNATIVE_LINK_NAME[ionice] = "${bindir}/ionice"
-ALTERNATIVE_LINK_NAME[ipcrm] = "${bindir}/ipcrm"
-ALTERNATIVE_LINK_NAME[ipcs] = "${bindir}/ipcs"
-ALTERNATIVE_LINK_NAME[kill] = "${base_bindir}/kill"
-ALTERNATIVE:${PN}-last = "last lastb"
-ALTERNATIVE_LINK_NAME[last] = "${bindir}/last"
-ALTERNATIVE_LINK_NAME[lastb] = "${bindir}/lastb"
-ALTERNATIVE_LINK_NAME[logger] = "${bindir}/logger"
-ALTERNATIVE_LINK_NAME[losetup] = "${base_sbindir}/losetup"
-ALTERNATIVE_LINK_NAME[mesg] = "${bindir}/mesg"
-ALTERNATIVE_LINK_NAME[mkswap] = "${base_sbindir}/mkswap"
-ALTERNATIVE_LINK_NAME[mcookie] = "${bindir}/mcookie"
-ALTERNATIVE_LINK_NAME[more] = "${base_bindir}/more"
-ALTERNATIVE_LINK_NAME[mount] = "${base_bindir}/mount"
-ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
-ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
-ALTERNATIVE_LINK_NAME[nsenter] = "${bindir}/nsenter"
-ALTERNATIVE_LINK_NAME[pivot_root] = "${base_sbindir}/pivot_root"
-ALTERNATIVE_LINK_NAME[prlimit] = "${bindir}/prlimit"
-ALTERNATIVE_LINK_NAME[readprofile] = "${sbindir}/readprofile"
-ALTERNATIVE_LINK_NAME[renice] = "${bindir}/renice"
-ALTERNATIVE_LINK_NAME[rev] = "${bindir}/rev"
-ALTERNATIVE_LINK_NAME[rfkill] = "${sbindir}/rfkill"
-ALTERNATIVE_LINK_NAME[rtcwake] = "${sbindir}/rtcwake"
-ALTERNATIVE_LINK_NAME[setpriv] = "${bindir}/setpriv"
-ALTERNATIVE_LINK_NAME[setsid] = "${bindir}/setsid"
-ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
-ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
-ALTERNATIVE_LINK_NAME[swapoff] = "${base_sbindir}/swapoff"
-ALTERNATIVE_LINK_NAME[swapon] = "${base_sbindir}/swapon"
-ALTERNATIVE_LINK_NAME[switch_root] = "${base_sbindir}/switch_root"
-ALTERNATIVE_LINK_NAME[taskset] = "${bindir}/taskset"
-ALTERNATIVE_LINK_NAME[umount] = "${base_bindir}/umount"
-ALTERNATIVE_LINK_NAME[unshare] = "${bindir}/unshare"
-ALTERNATIVE_LINK_NAME[utmpdump] = "${bindir}/utmpdump"
-ALTERNATIVE_LINK_NAME[uuidgen] = "${bindir}/uuidgen"
-ALTERNATIVE_LINK_NAME[wall] = "${bindir}/wall"
-
-ALTERNATIVE:${PN}-doc = "\
-blkid.8 eject.1 findfs.8 fsck.8 kill.1 last.1 lastb.1 libblkid.3 logger.1 mesg.1 \
-mountpoint.1 nologin.8 rfkill.8 sulogin.8 utmpdump.1 uuid.3 wall.1\
-"
-ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'pam', 'su.1', '', d)}"
-
-ALTERNATIVE_LINK_NAME[blkid.8] = "${mandir}/man8/blkid.8"
-ALTERNATIVE_LINK_NAME[eject.1] = "${mandir}/man1/eject.1"
-ALTERNATIVE_LINK_NAME[findfs.8] = "${mandir}/man8/findfs.8"
-ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
-ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
-ALTERNATIVE_LINK_NAME[libblkid.3] = "${mandir}/man3/libblkid.3"
-ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
-ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
-ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
-ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
-ALTERNATIVE_LINK_NAME[rfkill.8] = "${mandir}/man8/rfkill.8"
-ALTERNATIVE_LINK_NAME[setpriv.1] = "${mandir}/man1/setpriv.1"
-ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
-ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
-ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
-ALTERNATIVE_LINK_NAME[uuid.3] = "${mandir}/man3/uuid.3"
-ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PTEST_BINDIR = "1"
-do_compile_ptest() {
-    oe_runmake buildtest-TESTS
-}
-
-do_install_ptest() {
-    mkdir -p ${D}${PTEST_PATH}/tests/ts
-    find . -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
-    find ./.libs -name 'sample*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
-    find ./.libs -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
-
-    cp ${S}/tests/*.sh ${D}${PTEST_PATH}/tests/
-    cp -pR ${S}/tests/expected ${D}${PTEST_PATH}/tests/expected
-    cp -pR ${S}/tests/ts ${D}${PTEST_PATH}/tests/
-    cp ${WORKDIR}/build/config.h ${D}${PTEST_PATH}
-
-    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest
-
-    # chfn needs PAM
-    if ! ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'true', 'false', d)}; then
-        rm -rf ${D}${PTEST_PATH}/tests/ts/chfn
-    fi
-}
diff --git a/poky/meta/recipes-core/util-linux/util-linux_2.39.2.bb b/poky/meta/recipes-core/util-linux/util-linux_2.39.2.bb
new file mode 100644
index 0000000..927037a
--- /dev/null
+++ b/poky/meta/recipes-core/util-linux/util-linux_2.39.2.bb
@@ -0,0 +1,332 @@
+require util-linux.inc
+
+#gtk-doc is not enabled as it requires xmlto which requires util-linux
+inherit autotools gettext manpages pkgconfig systemd update-alternatives python3-dir bash-completion ptest
+DEPENDS = "libcap-ng ncurses virtual/crypt zlib util-linux-libuuid"
+
+PACKAGES =+ "${PN}-swaponoff"
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pylibmount', '${PN}-pylibmount', '', d)}"
+
+python util_linux_binpackages () {
+    def pkg_hook(f, pkg, file_regex, output_pattern, modulename):
+        pn = d.getVar('PN')
+        d.appendVar('RRECOMMENDS:%s' % pn, ' %s' % pkg)
+
+        if d.getVar('ALTERNATIVE:' + pkg):
+            return
+        if d.getVarFlag('ALTERNATIVE_LINK_NAME', modulename):
+            d.setVar('ALTERNATIVE:' + pkg, modulename)
+
+    bindirs = sorted(list(set(d.expand("${base_sbindir} ${base_bindir} ${sbindir} ${bindir}").split())))
+    for dir in bindirs:
+        do_split_packages(d, root=dir,
+                          file_regex=r'(.*)', output_pattern='${PN}-%s',
+                          description='${PN} %s',
+                          hook=pkg_hook, extra_depends='')
+
+    # There are some symlinks for some binaries which we have ignored
+    # above. Add them to the package owning the binary they are
+    # pointing to
+    extras = {}
+    dvar = d.getVar('PKGD')
+    for root in bindirs:
+        for walkroot, dirs, files in os.walk(dvar + root):
+            for f in files:
+                file = os.path.join(walkroot, f)
+                if not os.path.islink(file):
+                    continue
+
+                pkg = os.path.basename(os.readlink(file))
+                extras.setdefault(pkg, [])
+                extras[pkg].append(file.replace(dvar, '', 1))
+
+    pn = d.getVar('PN')
+    for pkg, links in extras.items():
+        of = d.getVar('FILES:' + pn + '-' + pkg)
+        links = of + " " + " ".join(sorted(links))
+        d.setVar('FILES:' + pn + '-' + pkg, links)
+}
+
+# we must execute before update-alternatives PACKAGE_PREPROCESS_FUNCS
+PACKAGE_PREPROCESS_FUNCS =+ "util_linux_binpackages "
+
+# skip libuuid as it will be packaged by the util-linux-libuuid recipe
+python util_linux_libpackages() {
+    do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(?!uuid)(.*)\.so\..*$',
+                      output_pattern='${PN}-lib%s',
+                      description='${PN} lib%s',
+                      extra_depends='', prepend=True, allow_links=True)
+}
+
+PACKAGESPLITFUNCS =+ "util_linux_libpackages"
+
+PACKAGES_DYNAMIC = "^${PN}-.*"
+
+UTIL_LINUX_LIBDIR = "${libdir}"
+UTIL_LINUX_LIBDIR:class-target = "${base_libdir}"
+EXTRA_OECONF = "\
+    --enable-libuuid --enable-libblkid \
+    \
+    --enable-fsck --enable-kill --enable-last --enable-mesg \
+    --enable-mount --enable-partx --enable-rfkill \
+    --enable-unshare --enable-write \
+    \
+    --disable-bfs --disable-login \
+    --disable-makeinstall-chown --disable-minix --disable-newgrp \
+    --disable-use-tty-group --disable-vipw --disable-raw \
+    \
+    --without-udev \
+    \
+    usrsbin_execdir='${sbindir}' \
+    --libdir='${UTIL_LINUX_LIBDIR}' \
+"
+
+EXTRA_OECONF:append:class-target = " --enable-setpriv"
+EXTRA_OECONF:append:class-native = " --without-cap-ng --disable-setpriv"
+EXTRA_OECONF:append:class-nativesdk = " --without-cap-ng --disable-setpriv"
+EXTRA_OECONF:append = " --disable-hwclock-gplv3"
+
+# enable pcre2 for native/nativesdk to match host distros
+# this helps to keep same expectations when using the SDK or
+# build host versions during development
+#
+PACKAGECONFIG ?= "pcre2"
+PACKAGECONFIG:class-target ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'chfn-chsh pam', '', d)}"
+# inherit manpages requires this to be present, however util-linux does not have
+# configuration options, and installs manpages always
+PACKAGECONFIG[manpages] = ""
+PACKAGECONFIG[pam] = "--enable-su --enable-runuser,--disable-su --disable-runuser, libpam,"
+# Respect the systemd feature for uuidd
+PACKAGECONFIG[systemd] = "--with-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-systemd --without-systemdsystemunitdir,systemd"
+# Build python bindings for libmount
+PACKAGECONFIG[pylibmount] = "--with-python=3 --enable-pylibmount,--without-python --disable-pylibmount,python3"
+# Readline support
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+# PCRE support in hardlink
+PACKAGECONFIG[pcre2] = ",,libpcre2"
+PACKAGECONFIG[cryptsetup] = "--with-cryptsetup,--without-cryptsetup,cryptsetup"
+PACKAGECONFIG[chfn-chsh] = "--enable-chfn-chsh,--disable-chfn-chsh,"
+PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
+
+EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'"
+
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+FILES:${PN}-doc += "${datadir}/getopt/getopt-*.*"
+FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.la"
+FILES:${PN}-mount = "${sysconfdir}/default/mountall"
+FILES:${PN}-runuser = "${sysconfdir}/pam.d/runuser*"
+FILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
+CONFFILES:${PN}-su = "${sysconfdir}/pam.d/su-l"
+FILES:${PN}-pylibmount = "${PYTHON_SITEPACKAGES_DIR}/libmount/pylibmount.so \
+                          ${PYTHON_SITEPACKAGES_DIR}/libmount/__init__.* \
+                          ${PYTHON_SITEPACKAGES_DIR}/libmount/__pycache__/*"
+
+# Util-linux' blkid replaces the e2fsprogs one
+RCONFLICTS:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
+RREPLACES:${PN}-blkid = "${MLPREFIX}e2fsprogs-blkid"
+
+RRECOMMENDS:${PN}:class-native = ""
+RRECOMMENDS:${PN}:class-nativesdk = ""
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}:class-nativesdk = ""
+
+RDEPENDS:${PN} += " util-linux-libuuid"
+RDEPENDS:${PN}-dev += " util-linux-libuuid-dev"
+
+RPROVIDES:${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev"
+
+RDEPENDS:${PN}-bash-completion += "${PN}-lsblk"
+RDEPENDS:${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs findutils grep iproute2 kmod mdadm procps sed socat which xz"
+RRECOMMENDS:${PN}-ptest += "kernel-module-scsi-debug kernel-module-sd-mod kernel-module-loop kernel-module-algif-hash"
+RDEPENDS:${PN}-swaponoff = "${PN}-swapon ${PN}-swapoff"
+ALLOW_EMPTY:${PN}-swaponoff = "1"
+
+#SYSTEMD_PACKAGES = "${PN}-uuidd ${PN}-fstrim"
+SYSTEMD_SERVICE:${PN}-uuidd = "uuidd.socket uuidd.service"
+SYSTEMD_AUTO_ENABLE:${PN}-uuidd = "disable"
+SYSTEMD_SERVICE:${PN}-fstrim = "fstrim.timer fstrim.service"
+SYSTEMD_AUTO_ENABLE:${PN}-fstrim = "disable"
+
+do_install () {
+	# with ccache the timestamps on compiled files may
+	# end up earlier than on their inputs, this allows
+	# for the resultant compilation in the install step.
+	oe_runmake 'CC=${CC}' 'LD=${LD}' \
+		'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
+
+	mkdir -p ${D}${base_bindir}
+
+        sbinprogs="agetty ctrlaltdel cfdisk vipw vigr"
+        sbinprogs_a="pivot_root hwclock mkswap losetup swapon swapoff fdisk fsck blkid blockdev fstrim sulogin switch_root nologin"
+        binprogs_a="dmesg getopt kill more umount mount login su mountpoint"
+
+        if [ "${base_sbindir}" != "${sbindir}" ]; then
+        	mkdir -p ${D}${base_sbindir}
+                for p in $sbinprogs $sbinprogs_a; do
+                        if [ -f "${D}${sbindir}/$p" ]; then
+                                mv "${D}${sbindir}/$p" "${D}${base_sbindir}/$p"
+                        fi
+                done
+        fi
+
+        if [ "${base_bindir}" != "${bindir}" ]; then
+        	mkdir -p ${D}${base_bindir}
+                for p in $binprogs_a; do
+                        if [ -f "${D}${bindir}/$p" ]; then
+                                mv "${D}${bindir}/$p" "${D}${base_bindir}/$p"
+                        fi
+                done
+        fi
+
+	install -d ${D}${sysconfdir}/default/
+	echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
+
+	rm -f ${D}${bindir}/chkdupexe
+}
+
+do_install:append:class-target () {
+	if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
+		install -d ${D}${sysconfdir}/pam.d
+		install -m 0644 ${WORKDIR}/runuser.pamd ${D}${sysconfdir}/pam.d/runuser
+		install -m 0644 ${WORKDIR}/runuser-l.pamd ${D}${sysconfdir}/pam.d/runuser-l
+		# Required for "su -" aka "su --login" because
+		# otherwise it uses "other", which has "auth pam_deny.so"
+		# and thus prevents the operation.
+		ln -s su ${D}${sysconfdir}/pam.d/su-l
+	fi
+}
+# nologin causes a conflict with shadow-native
+# kill causes a conflict with coreutils-native (if ${bindir}==${base_bindir})
+do_install:append:class-native () {
+	rm -f ${D}${base_sbindir}/nologin
+	rm -f ${D}${base_bindir}/kill
+}
+
+# dm-verity support introduces a circular build dependency, so util-linux-libuuid is split out for target builds
+# Need to build libuuid for uuidgen, but then delete it and let the other recipe ship it
+do_install:append () {
+	rm -rf ${D}${includedir}/uuid ${D}${libdir}/pkgconfig/uuid.pc ${D}${libdir}/libuuid* ${D}${base_libdir}/libuuid*
+}
+
+ALTERNATIVE_PRIORITY = "80"
+
+ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid"
+ALTERNATIVE_LINK_NAME[blockdev] = "${base_sbindir}/blockdev"
+ALTERNATIVE_LINK_NAME[cal] = "${bindir}/cal"
+ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn"
+ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh"
+ALTERNATIVE_LINK_NAME[chrt] = "${bindir}/chrt"
+ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg"
+ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject"
+ALTERNATIVE_LINK_NAME[fallocate] = "${bindir}/fallocate"
+ALTERNATIVE_LINK_NAME[fdisk] = "${base_sbindir}/fdisk"
+ALTERNATIVE_LINK_NAME[findfs] = "${sbindir}/findfs"
+ALTERNATIVE_LINK_NAME[flock] = "${bindir}/flock"
+ALTERNATIVE_LINK_NAME[fsck] = "${base_sbindir}/fsck"
+ALTERNATIVE_LINK_NAME[fsfreeze] = "${sbindir}/fsfreeze"
+ALTERNATIVE_LINK_NAME[fstrim] = "${base_sbindir}/fstrim"
+ALTERNATIVE_LINK_NAME[getopt] = "${base_bindir}/getopt"
+ALTERNATIVE:${PN}-agetty = "getty"
+ALTERNATIVE_LINK_NAME[getty] = "${base_sbindir}/getty"
+ALTERNATIVE_TARGET[getty] = "${base_sbindir}/agetty"
+ALTERNATIVE_LINK_NAME[hexdump] = "${bindir}/hexdump"
+ALTERNATIVE_LINK_NAME[hwclock] = "${base_sbindir}/hwclock"
+ALTERNATIVE_LINK_NAME[ionice] = "${bindir}/ionice"
+ALTERNATIVE_LINK_NAME[ipcrm] = "${bindir}/ipcrm"
+ALTERNATIVE_LINK_NAME[ipcs] = "${bindir}/ipcs"
+ALTERNATIVE_LINK_NAME[kill] = "${base_bindir}/kill"
+ALTERNATIVE:${PN}-last = "last lastb"
+ALTERNATIVE_LINK_NAME[last] = "${bindir}/last"
+ALTERNATIVE_LINK_NAME[lastb] = "${bindir}/lastb"
+ALTERNATIVE_LINK_NAME[logger] = "${bindir}/logger"
+ALTERNATIVE_LINK_NAME[losetup] = "${base_sbindir}/losetup"
+ALTERNATIVE_LINK_NAME[mesg] = "${bindir}/mesg"
+ALTERNATIVE_LINK_NAME[mkswap] = "${base_sbindir}/mkswap"
+ALTERNATIVE_LINK_NAME[mcookie] = "${bindir}/mcookie"
+ALTERNATIVE_LINK_NAME[more] = "${base_bindir}/more"
+ALTERNATIVE_LINK_NAME[mount] = "${base_bindir}/mount"
+ALTERNATIVE_LINK_NAME[mountpoint] = "${base_bindir}/mountpoint"
+ALTERNATIVE_LINK_NAME[nologin] = "${base_sbindir}/nologin"
+ALTERNATIVE_LINK_NAME[nsenter] = "${bindir}/nsenter"
+ALTERNATIVE_LINK_NAME[pivot_root] = "${base_sbindir}/pivot_root"
+ALTERNATIVE_LINK_NAME[prlimit] = "${bindir}/prlimit"
+ALTERNATIVE_LINK_NAME[readprofile] = "${sbindir}/readprofile"
+ALTERNATIVE_LINK_NAME[renice] = "${bindir}/renice"
+ALTERNATIVE_LINK_NAME[rev] = "${bindir}/rev"
+ALTERNATIVE_LINK_NAME[rfkill] = "${sbindir}/rfkill"
+ALTERNATIVE_LINK_NAME[rtcwake] = "${sbindir}/rtcwake"
+ALTERNATIVE_LINK_NAME[setpriv] = "${bindir}/setpriv"
+ALTERNATIVE_LINK_NAME[setsid] = "${bindir}/setsid"
+ALTERNATIVE_LINK_NAME[su] = "${base_bindir}/su"
+ALTERNATIVE_LINK_NAME[sulogin] = "${base_sbindir}/sulogin"
+ALTERNATIVE_LINK_NAME[swapoff] = "${base_sbindir}/swapoff"
+ALTERNATIVE_LINK_NAME[swapon] = "${base_sbindir}/swapon"
+ALTERNATIVE_LINK_NAME[switch_root] = "${base_sbindir}/switch_root"
+ALTERNATIVE_LINK_NAME[taskset] = "${bindir}/taskset"
+ALTERNATIVE_LINK_NAME[umount] = "${base_bindir}/umount"
+ALTERNATIVE_LINK_NAME[unshare] = "${bindir}/unshare"
+ALTERNATIVE_LINK_NAME[utmpdump] = "${bindir}/utmpdump"
+ALTERNATIVE_LINK_NAME[uuidgen] = "${bindir}/uuidgen"
+ALTERNATIVE_LINK_NAME[wall] = "${bindir}/wall"
+
+ALTERNATIVE:${PN}-doc = "\
+blkid.8 eject.1 findfs.8 fsck.8 kill.1 last.1 lastb.1 libblkid.3 logger.1 mesg.1 \
+mountpoint.1 nologin.8 rfkill.8 sulogin.8 utmpdump.1 uuid.3 wall.1\
+"
+ALTERNATIVE:${PN}-doc += "${@bb.utils.contains('PACKAGECONFIG', 'pam', 'su.1', '', d)}"
+
+ALTERNATIVE_LINK_NAME[blkid.8] = "${mandir}/man8/blkid.8"
+ALTERNATIVE_LINK_NAME[eject.1] = "${mandir}/man1/eject.1"
+ALTERNATIVE_LINK_NAME[findfs.8] = "${mandir}/man8/findfs.8"
+ALTERNATIVE_LINK_NAME[fsck.8] = "${mandir}/man8/fsck.8"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[last.1] = "${mandir}/man1/last.1"
+ALTERNATIVE_LINK_NAME[lastb.1] = "${mandir}/man1/lastb.1"
+ALTERNATIVE_LINK_NAME[libblkid.3] = "${mandir}/man3/libblkid.3"
+ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
+ALTERNATIVE_LINK_NAME[mesg.1] = "${mandir}/man1/mesg.1"
+ALTERNATIVE_LINK_NAME[mountpoint.1] = "${mandir}/man1/mountpoint.1"
+ALTERNATIVE_LINK_NAME[nologin.8] = "${mandir}/man8/nologin.8"
+ALTERNATIVE_LINK_NAME[rfkill.8] = "${mandir}/man8/rfkill.8"
+ALTERNATIVE_LINK_NAME[setpriv.1] = "${mandir}/man1/setpriv.1"
+ALTERNATIVE_LINK_NAME[su.1] = "${mandir}/man1/su.1"
+ALTERNATIVE_LINK_NAME[sulogin.8] = "${mandir}/man8/sulogin.8"
+ALTERNATIVE_LINK_NAME[utmpdump.1] = "${mandir}/man1/utmpdump.1"
+ALTERNATIVE_LINK_NAME[uuid.3] = "${mandir}/man3/uuid.3"
+ALTERNATIVE_LINK_NAME[wall.1] = "${mandir}/man1/wall.1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PTEST_BINDIR = "1"
+do_compile_ptest() {
+    oe_runmake buildtest-TESTS
+}
+
+do_install_ptest() {
+    mkdir -p ${D}${PTEST_PATH}/tests/ts
+    find . -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+    find ./.libs -name 'sample*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+    find ./.libs -name 'test*' -maxdepth 1 -type f -perm -111 -exec cp {} ${D}${PTEST_PATH} \;
+
+    cp ${S}/tests/*.sh ${D}${PTEST_PATH}/tests/
+    cp -pR ${S}/tests/expected ${D}${PTEST_PATH}/tests/expected
+    cp -pR ${S}/tests/ts ${D}${PTEST_PATH}/tests/
+    cp ${WORKDIR}/build/config.h ${D}${PTEST_PATH}
+
+    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest
+
+    # chfn needs PAM
+    if ! ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'true', 'false', d)}; then
+        rm -rf ${D}${PTEST_PATH}/tests/ts/chfn
+    fi
+}
+
+# Delete tests not working on musl
+do_install_ptest:append:libc-musl() {
+    for t in tests/ts/col/multibyte \
+            tests/ts/lib/timeutils \
+            tests/ts/dmesg/limit; do
+        rm -rf ${D}${PTEST_PATH}/$t
+    done
+}
diff --git a/poky/meta/recipes-devtools/binutils/binutils-2.41.inc b/poky/meta/recipes-devtools/binutils/binutils-2.41.inc
index 7ab2926..b4934c0 100644
--- a/poky/meta/recipes-devtools/binutils/binutils-2.41.inc
+++ b/poky/meta/recipes-devtools/binutils/binutils-2.41.inc
@@ -18,7 +18,7 @@
 
 UPSTREAM_CHECK_GITTAGREGEX = "binutils-(?P<pver>\d+_(\d_?)*)"
 
-SRCREV ?= "fd3cc73ee4a84df3ace3c0e470250a957e7d3468"
+SRCREV ?= "cb4c3555ac4cf8aaf0935cb6e4b09e6882436d21"
 BINUTILS_GIT_URI ?= "git://sourceware.org/git/binutils-gdb.git;branch=${SRCBRANCH};protocol=https"
 SRC_URI = "\
      ${BINUTILS_GIT_URI} \
diff --git a/poky/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb b/poky/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
index cce2f57..4d8ce4c 100644
--- a/poky/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
+++ b/poky/meta/recipes-devtools/bootchart2/bootchart2_0.14.9.bb
@@ -99,7 +99,6 @@
 S = "${WORKDIR}/git"
 SRCREV = "868a2afab9da34f32c007d773b77253c93104636"
 
-PR = "r1"
 
 inherit systemd update-rc.d python3native update-alternatives
 
diff --git a/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.3.3.bb b/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.3.3.bb
deleted file mode 100644
index e7a64e8..0000000
--- a/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.3.3.bb
+++ /dev/null
@@ -1,72 +0,0 @@
-SUMMARY = "Checksumming Copy on Write Filesystem utilities"
-DESCRIPTION = "Btrfs is a new copy on write filesystem for Linux aimed at \
-implementing advanced features while focusing on fault tolerance, repair and \
-easy administration. \
-This package contains utilities (mkfs, fsck, btrfsctl) used to work with \
-btrfs and an utility (btrfs-convert) to make a btrfs filesystem from an ext3."
-
-HOMEPAGE = "https://btrfs.wiki.kernel.org"
-
-LICENSE = "GPL-2.0-only & LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = " \
-    file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067 \
-    file://libbtrfsutil/COPYING;md5=4fbd65380cdd255951079008b364516c \
-"
-SECTION = "base"
-DEPENDS = "util-linux zlib"
-
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git;branch=master;protocol=https \
-           file://0001-Add-a-possibility-to-specify-where-python-modules-ar.patch \
-           "
-SRCREV = "bb0ca35245858f17a6ced97aade1dd8d70f9c9d7"
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ??= " \
-    programs \
-    convert \
-    python \
-    crypto-builtin \
-"
-PACKAGECONFIG[manpages] = "--enable-documentation, --disable-documentation, python3-sphinx-native"
-PACKAGECONFIG[programs] = "--enable-programs,--disable-programs"
-PACKAGECONFIG[convert] = "--enable-convert --with-convert=ext2,--disable-convert --without-convert,e2fsprogs"
-PACKAGECONFIG[zoned] = "--enable-zoned,--disable-zoned"
-PACKAGECONFIG[python] = "--enable-python,--disable-python,python3-setuptools-native"
-PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
-PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
-PACKAGECONFIG[udev] = "--enable-libudev,--disable-libudev,udev"
-
-# Pick only one crypto provider
-PACKAGECONFIG[crypto-builtin] = "--with-crypto=builtin"
-PACKAGECONFIG[crypto-libgcrypt] = "--with-crypto=libgcrypt,,libgcrypt"
-PACKAGECONFIG[crypto-libsodium] = "--with-crypto=libsodium,,libsodium"
-PACKAGECONFIG[crypto-libkcapi] = "--with-crypto=libkcapi,,libkcapi"
-
-inherit autotools-brokensep pkgconfig manpages
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'python', 'setuptools3-base', '', d)}
-
-CLEANBROKEN = "1"
-
-EXTRA_OECONF = "--enable-largefile"
-EXTRA_OECONF:append:libc-musl = " --disable-backtrace "
-EXTRA_PYTHON_CFLAGS = "${DEBUG_PREFIX_MAP}"
-EXTRA_PYTHON_CFLAGS:class-native = ""
-EXTRA_PYTHON_LDFLAGS = "${LDFLAGS}"
-EXTRA_OEMAKE = "V=1 'EXTRA_PYTHON_CFLAGS=${EXTRA_PYTHON_CFLAGS}' 'EXTRA_PYTHON_LDFLAGS=${EXTRA_PYTHON_LDFLAGS}'"
-
-do_configure:prepend() {
-	# Upstream doesn't ship this and autoreconf won't install it as automake isn't used.
-	mkdir -p ${S}/config
-	cp -f $(automake --print-libdir)/install-sh ${S}/config/
-}
-
-
-do_install:append() {
-    if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
-        oe_runmake 'DESTDIR=${D}' 'PYTHON_SITEPACKAGES_DIR=${PYTHON_SITEPACKAGES_DIR}' install_python
-    fi
-}
-
-RDEPENDS:${PN} = "libgcc"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb b/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb
new file mode 100644
index 0000000..527e13d
--- /dev/null
+++ b/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb
@@ -0,0 +1,72 @@
+SUMMARY = "Checksumming Copy on Write Filesystem utilities"
+DESCRIPTION = "Btrfs is a new copy on write filesystem for Linux aimed at \
+implementing advanced features while focusing on fault tolerance, repair and \
+easy administration. \
+This package contains utilities (mkfs, fsck, btrfsctl) used to work with \
+btrfs and an utility (btrfs-convert) to make a btrfs filesystem from an ext3."
+
+HOMEPAGE = "https://btrfs.wiki.kernel.org"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = " \
+    file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067 \
+    file://libbtrfsutil/COPYING;md5=4fbd65380cdd255951079008b364516c \
+"
+SECTION = "base"
+DEPENDS = "util-linux zlib"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git;branch=master;protocol=https \
+           file://0001-Add-a-possibility-to-specify-where-python-modules-ar.patch \
+           "
+SRCREV = "92d04d4780886a9850716e5529f1dace97779931"
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= " \
+    programs \
+    convert \
+    python \
+    crypto-builtin \
+"
+PACKAGECONFIG[manpages] = "--enable-documentation, --disable-documentation, python3-sphinx-native"
+PACKAGECONFIG[programs] = "--enable-programs,--disable-programs"
+PACKAGECONFIG[convert] = "--enable-convert --with-convert=ext2,--disable-convert --without-convert,e2fsprogs"
+PACKAGECONFIG[zoned] = "--enable-zoned,--disable-zoned"
+PACKAGECONFIG[python] = "--enable-python,--disable-python,python3-setuptools-native"
+PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
+PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
+PACKAGECONFIG[udev] = "--enable-libudev,--disable-libudev,udev"
+
+# Pick only one crypto provider
+PACKAGECONFIG[crypto-builtin] = "--with-crypto=builtin"
+PACKAGECONFIG[crypto-libgcrypt] = "--with-crypto=libgcrypt,,libgcrypt"
+PACKAGECONFIG[crypto-libsodium] = "--with-crypto=libsodium,,libsodium"
+PACKAGECONFIG[crypto-libkcapi] = "--with-crypto=libkcapi,,libkcapi"
+
+inherit autotools-brokensep pkgconfig manpages
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'python', 'setuptools3-base', '', d)}
+
+CLEANBROKEN = "1"
+
+EXTRA_OECONF = "--enable-largefile"
+EXTRA_OECONF:append:libc-musl = " --disable-backtrace "
+EXTRA_PYTHON_CFLAGS = "${DEBUG_PREFIX_MAP}"
+EXTRA_PYTHON_CFLAGS:class-native = ""
+EXTRA_PYTHON_LDFLAGS = "${LDFLAGS}"
+EXTRA_OEMAKE = "V=1 'EXTRA_PYTHON_CFLAGS=${EXTRA_PYTHON_CFLAGS}' 'EXTRA_PYTHON_LDFLAGS=${EXTRA_PYTHON_LDFLAGS}'"
+
+do_configure:prepend() {
+	# Upstream doesn't ship this and autoreconf won't install it as automake isn't used.
+	mkdir -p ${S}/config
+	cp -f $(automake --print-libdir)/install-sh ${S}/config/
+}
+
+
+do_install:append() {
+    if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
+        oe_runmake 'DESTDIR=${D}' 'PYTHON_SITEPACKAGES_DIR=${PYTHON_SITEPACKAGES_DIR}' install_python
+    fi
+}
+
+RDEPENDS:${PN} = "libgcc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/ccache/ccache_4.8.2.bb b/poky/meta/recipes-devtools/ccache/ccache_4.8.2.bb
deleted file mode 100644
index 22a6b38..0000000
--- a/poky/meta/recipes-devtools/ccache/ccache_4.8.2.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "a fast C/C++ compiler cache"
-DESCRIPTION = "ccache is a compiler cache. It speeds up recompilation \
-by caching the result of previous compilations and detecting when the \
-same compilation is being done again. Supported languages are C, C\+\+, \
-Objective-C and Objective-C++."
-HOMEPAGE = "http://ccache.samba.org"
-SECTION = "devel"
-
-LICENSE = "GPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://LICENSE.adoc;md5=cd54b7abfc462470b0f505273c38f0ff"
-
-DEPENDS = "zstd"
-
-SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
-           file://0001-xxhash.h-Fix-build-with-gcc-12.patch \
-           "
-SRC_URI[sha256sum] = "75eef15b8b9da48db9c91e1d0ff58b3645fc70c0e4ca2ef1b6825a12f21f217d"
-
-inherit cmake github-releases
-
-PATCHTOOL = "patch"
-
-BBCLASSEXTEND = "native nativesdk"
-
-PACKAGECONFIG[docs] = "-DENABLE_DOCUMENTATION=ON,-DENABLE_DOCUMENTATION=OFF,asciidoc"
-PACKAGECONFIG[redis] = "-DREDIS_STORAGE_BACKEND=ON,-DREDIS_STORAGE_BACKEND=OFF,hiredis"
diff --git a/poky/meta/recipes-devtools/ccache/ccache_4.8.3.bb b/poky/meta/recipes-devtools/ccache/ccache_4.8.3.bb
new file mode 100644
index 0000000..03372aa
--- /dev/null
+++ b/poky/meta/recipes-devtools/ccache/ccache_4.8.3.bb
@@ -0,0 +1,26 @@
+SUMMARY = "a fast C/C++ compiler cache"
+DESCRIPTION = "ccache is a compiler cache. It speeds up recompilation \
+by caching the result of previous compilations and detecting when the \
+same compilation is being done again. Supported languages are C, C\+\+, \
+Objective-C and Objective-C++."
+HOMEPAGE = "http://ccache.samba.org"
+SECTION = "devel"
+
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://LICENSE.adoc;md5=6a6fe0ae4e57592b187ab72fa6d420ec"
+
+DEPENDS = "zstd"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
+           file://0001-xxhash.h-Fix-build-with-gcc-12.patch \
+           "
+SRC_URI[sha256sum] = "d59dd569ad2bbc826c0bc335c8ebd73e78ed0f2f40ba6b30069347e63585d9ef"
+
+inherit cmake github-releases
+
+PATCHTOOL = "patch"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGECONFIG[docs] = "-DENABLE_DOCUMENTATION=ON,-DENABLE_DOCUMENTATION=OFF,asciidoc"
+PACKAGECONFIG[redis] = "-DREDIS_STORAGE_BACKEND=ON,-DREDIS_STORAGE_BACKEND=OFF,hiredis"
diff --git a/poky/meta/recipes-devtools/cmake/cmake-native_3.27.4.bb b/poky/meta/recipes-devtools/cmake/cmake-native_3.27.5.bb
similarity index 100%
rename from poky/meta/recipes-devtools/cmake/cmake-native_3.27.4.bb
rename to poky/meta/recipes-devtools/cmake/cmake-native_3.27.5.bb
diff --git a/poky/meta/recipes-devtools/cmake/cmake.inc b/poky/meta/recipes-devtools/cmake/cmake.inc
index 430f13f..ef4eec5 100644
--- a/poky/meta/recipes-devtools/cmake/cmake.inc
+++ b/poky/meta/recipes-devtools/cmake/cmake.inc
@@ -19,7 +19,7 @@
 SRC_URI = "https://cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${PV}.tar.gz \
 "
 
-SRC_URI[sha256sum] = "0a905ca8635ca81aa152e123bdde7e54cbe764fdd9a70d62af44cad8b92967af"
+SRC_URI[sha256sum] = "5175e8fe1ca9b1dd09090130db7201968bcce1595971ff9e9998c2f0765004c9"
 
 UPSTREAM_CHECK_REGEX = "cmake-(?P<pver>\d+(\.\d+)+)\.tar"
 
diff --git a/poky/meta/recipes-devtools/cmake/cmake_3.27.4.bb b/poky/meta/recipes-devtools/cmake/cmake_3.27.5.bb
similarity index 100%
rename from poky/meta/recipes-devtools/cmake/cmake_3.27.4.bb
rename to poky/meta/recipes-devtools/cmake/cmake_3.27.5.bb
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch b/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch
new file mode 100644
index 0000000..ea768e0
--- /dev/null
+++ b/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch
@@ -0,0 +1,46 @@
+From 5326969acc0c7e9e3cabca202154e4120c0d2c2f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 26 Sep 2023 14:52:11 -0700
+Subject: [PATCH] Move cr_compress_groupfile outside WITH_LIBMODULEMD
+
+This function is used in code which is not conditional under WITH_LIBMODULEMD
+therefore the declaration should also match its definition scope
+
+Fixes build issues flagged by clang
+
+src/createrepo_c.c:850:16: error: incompatible integer to pointer conversion initializing 'gchar *' (aka 'char *') with an
+ expression of type 'int' [-Wint-conversion]
+|   850 |         gchar *compressed_path = cr_compress_groupfile(cmd_options->groupfile_fullpath, tmp_out_repo, compression);
+|       |                ^                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Upstream-Status: Submitted [https://github.com/rpm-software-management/createrepo_c/pull/387]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/metadata_internal.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/metadata_internal.h b/src/metadata_internal.h
+index 8ba0576..ecfbac2 100644
+--- a/src/metadata_internal.h
++++ b/src/metadata_internal.h
+@@ -52,14 +52,14 @@ cr_metadata_load_modulemd(ModulemdModuleIndex **moduleindex,
+  * @param dest_dir      Path to directory where the compressed groupfile should be stored.
+  * @return              Path to the new compressed groupfile. Has to be freed by the caller.
+  */
++
++#endif /* WITH_LIBMODULEMD */
++
+ gchar *
+ cr_compress_groupfile(const char *groupfile,
+                       const char *dest_dir,
+                       cr_CompressionType compression);
+ 
+-
+-#endif /* WITH_LIBMODULEMD */
+-
+ #ifdef __cplusplus
+ }
+ #endif
+-- 
+2.42.0
+
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-src-cmd_parser.c-add-a-missing-parameter-name.patch b/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-src-cmd_parser.c-add-a-missing-parameter-name.patch
deleted file mode 100644
index 0d1c6b0..0000000
--- a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-src-cmd_parser.c-add-a-missing-parameter-name.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 970b901e1999f415da8bac205f526c808ddad0ba Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Mon, 8 May 2023 10:40:43 +0200
-Subject: [PATCH] src/cmd_parser.c: add a missing parameter name
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This resolves the following error with older versions of gcc:
-| /srv/storage/alex/yocto/build-32/tmp/work/x86_64-linux/createrepo-c-native/0.21.1-r0/git/src/cmd_parser.c: In function ‘duplicated_nevra_option_parser’:
-| /srv/storage/alex/yocto/build-32/tmp/work/x86_64-linux/createrepo-c-native/0.21.1-r0/git/src/cmd_parser.c:76:32: error: parameter name omitted
-|    76 | duplicated_nevra_option_parser(const gchar *,
-|       |                                ^~~~~~~~~~~~~
-| /srv/storage/alex/yocto/build-32/tmp/work/x86_64-linux/createrepo-c-native/0.21.1-r0/git/src/cmd_parser.c:78:32: error: parameter name omitted
-|    78 |                                gpointer,
-|       |                                ^~~~~~~~
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/createrepo_c/pull/366]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- src/cmd_parser.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/cmd_parser.c b/src/cmd_parser.c
-index 97c9ea7..63af7ea 100644
---- a/src/cmd_parser.c
-+++ b/src/cmd_parser.c
-@@ -73,9 +73,9 @@ struct CmdOptions _cmd_options = {
- 
- 
- gboolean
--duplicated_nevra_option_parser(const gchar *,
-+duplicated_nevra_option_parser(const gchar *option_name,
-                                const gchar *value,
--                               gpointer,
-+                               gpointer data,
-                                GError **error)
- {
-     if (!g_strcmp0(value, "keep"))
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c_0.21.1.bb b/poky/meta/recipes-devtools/createrepo-c/createrepo-c_0.21.1.bb
deleted file mode 100644
index 57f23b8..0000000
--- a/poky/meta/recipes-devtools/createrepo-c/createrepo-c_0.21.1.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "C implementation of createrepo."
-HOMEPAGE = "https://github.com/rpm-software-management/createrepo_c/wiki"
-
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/rpm-software-management/createrepo_c;branch=master;protocol=https \
-           file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
-           file://0001-include-rpm-rpmstring.h.patch \
-           file://0001-src-cmd_parser.c-add-a-missing-parameter-name.patch \
-           file://time64fix.patch \
-           "
-
-SRCREV = "0652d7303ce236e596c83c29ccc9bee7868fce6e"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "expat curl glib-2.0 libxml2 openssl bzip2 zlib file sqlite3 xz rpm"
-DEPENDS:append:class-native = " file-replacement-native"
-
-inherit cmake pkgconfig bash-completion setuptools3-base
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3 -DWITH_ZCHUNK=OFF -DENABLE_DRPM=OFF -DWITH_LIBMODULEMD=OFF"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# Direct createrepo to read rpm configuration from our sysroot, not the one it was compiled in
-do_install:append:class-native() {
-        create_wrapper ${D}/${bindir}/createrepo_c \
-                RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
-                MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
-        create_wrapper ${D}/${bindir}/modifyrepo_c \
-                MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
-}
-
-do_install:append:class-nativesdk() {
-        create_wrapper ${D}/${bindir}/createrepo_c \
-                RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
-                MAGIC=${datadir}/misc/magic.mgc
-        create_wrapper ${D}/${bindir}/modifyrepo_c \
-                MAGIC=${datadir}/misc/magic.mgc
-        rm -rf ${D}/etc
-}
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb b/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb
new file mode 100644
index 0000000..f4e6549
--- /dev/null
+++ b/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb
@@ -0,0 +1,43 @@
+SUMMARY = "C implementation of createrepo."
+HOMEPAGE = "https://github.com/rpm-software-management/createrepo_c/wiki"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/rpm-software-management/createrepo_c;branch=master;protocol=https \
+           file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+           file://0001-include-rpm-rpmstring.h.patch \
+           file://time64fix.patch \
+           file://0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch \
+           "
+
+SRCREV = "0cc13920991b2fb8f87fb9d352bd3394c2983289"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "expat curl glib-2.0 libxml2 openssl bzip2 zlib file sqlite3 xz rpm"
+DEPENDS:append:class-native = " file-replacement-native"
+
+inherit cmake pkgconfig bash-completion setuptools3-base
+
+EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3 -DWITH_ZCHUNK=OFF -DENABLE_DRPM=OFF -DWITH_LIBMODULEMD=OFF"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# Direct createrepo to read rpm configuration from our sysroot, not the one it was compiled in
+do_install:append:class-native() {
+        create_wrapper ${D}/${bindir}/createrepo_c \
+                RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+                MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
+        create_wrapper ${D}/${bindir}/modifyrepo_c \
+                MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc
+}
+
+do_install:append:class-nativesdk() {
+        create_wrapper ${D}/${bindir}/createrepo_c \
+                RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
+                MAGIC=${datadir}/misc/magic.mgc
+        create_wrapper ${D}/${bindir}/modifyrepo_c \
+                MAGIC=${datadir}/misc/magic.mgc
+        rm -rf ${D}/etc
+}
diff --git a/poky/meta/recipes-devtools/debugedit/debugedit_5.0.bb b/poky/meta/recipes-devtools/debugedit/debugedit_5.0.bb
index 257238f..63ad7ba 100644
--- a/poky/meta/recipes-devtools/debugedit/debugedit_5.0.bb
+++ b/poky/meta/recipes-devtools/debugedit/debugedit_5.0.bb
@@ -11,8 +11,7 @@
 
 SRC_URI = "https://sourceware.org/ftp/debugedit/${PV}/debugedit-${PV}.tar.xz"
 
-SRC_URI:append:libc-musl = " \
-           file://0001-tools-Add-error.h-for-non-glibc-case.patch \
+SRC_URI:append:libc-musl = "\
            file://0002-sepdebugcrcfix.c-do-not-use-64bit-variants.patch \
            file://0003-Makefile.am-do-not-update-manual.patch \
            "
@@ -20,6 +19,7 @@
 SRC_URI[sha256sum] = "e9ecd7d350bebae1f178ce6776ca19a648b6fe8fa22f5b3044b38d7899aa553e"
 
 DEPENDS = "elfutils"
+DEPENDS:append:libc-musl = " musl-legacy-error"
 
 inherit pkgconfig autotools
 
diff --git a/poky/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch b/poky/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch
deleted file mode 100644
index f6d64cb..0000000
--- a/poky/meta/recipes-devtools/debugedit/files/0001-tools-Add-error.h-for-non-glibc-case.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 4c797d3b559ba51bd9ccd9a2036245819acce843 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Thu, 23 Mar 2023 10:54:21 +0800
-Subject: [PATCH] tools: Add error.h for non-glibc case
-
-error is glibc specific API, so this patch will mostly not accepted
-upstream given that elfutils has been closely tied to glibc
-
-This is a OE specific workaround for musl.
-
-Upstream-Status: Inappropriate [OE Specific]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- tools/debugedit.c      |  7 ++++++-
- tools/error.h          | 27 +++++++++++++++++++++++++++
- tools/sepdebugcrcfix.c |  7 ++++++-
- 3 files changed, 39 insertions(+), 2 deletions(-)
- create mode 100644 tools/error.h
-
-diff --git a/tools/debugedit.c b/tools/debugedit.c
-index 668777a..a72c3c0 100644
---- a/tools/debugedit.c
-+++ b/tools/debugedit.c
-@@ -25,7 +25,6 @@
- #include <byteswap.h>
- #include <endian.h>
- #include <errno.h>
--#include <error.h>
- #include <limits.h>
- #include <string.h>
- #include <stdlib.h>
-@@ -40,6 +39,12 @@
- #include <gelf.h>
- #include <dwarf.h>
- 
-+#ifdef __GLIBC__
-+#include <error.h>
-+#else
-+#include "error.h"
-+#endif
-+
- #ifndef MAX
- #define MAX(m, n) ((m) < (n) ? (n) : (m))
- #endif
-diff --git a/tools/error.h b/tools/error.h
-new file mode 100644
-index 0000000..9b24418
---- /dev/null
-+++ b/tools/error.h
-@@ -0,0 +1,27 @@
-+#ifndef _ERROR_H_
-+#define _ERROR_H_
-+
-+#include <stdarg.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+
-+static unsigned int error_message_count = 0;
-+
-+static inline void error(int status, int errnum, const char* format, ...)
-+{
-+	va_list ap;
-+	fprintf(stderr, "%s: ", program_invocation_name);
-+	va_start(ap, format);
-+	vfprintf(stderr, format, ap);
-+	va_end(ap);
-+	if (errnum)
-+		fprintf(stderr, ": %s", strerror(errnum));
-+	fprintf(stderr, "\n");
-+	error_message_count++;
-+	if (status)
-+		exit(status);
-+}
-+
-+#endif        /* _ERROR_H_ */
-diff --git a/tools/sepdebugcrcfix.c b/tools/sepdebugcrcfix.c
-index da50e6c..c4a9d56 100644
---- a/tools/sepdebugcrcfix.c
-+++ b/tools/sepdebugcrcfix.c
-@@ -29,10 +29,15 @@
- #include <endian.h>
- #include <stdio.h>
- #include <stdlib.h>
--#include <error.h>
- #include <libelf.h>
- #include <gelf.h>
- 
-+#ifdef __GLIBC__
-+#include <error.h>
-+#else
-+#include "error.h"
-+#endif
-+
- #ifndef _
- #define _(x) x
- #endif
--- 
-2.17.1
-
diff --git a/poky/meta/recipes-devtools/devel-config/nfs-export-root.bb b/poky/meta/recipes-devtools/devel-config/nfs-export-root.bb
index 0aaec36..5e69962 100644
--- a/poky/meta/recipes-devtools/devel-config/nfs-export-root.bb
+++ b/poky/meta/recipes-devtools/devel-config/nfs-export-root.bb
@@ -3,7 +3,6 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
-PR = "r1"
 
 SRC_URI = "file://exports"
 
diff --git a/poky/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch b/poky/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
index 21b50de..eb0309d 100644
--- a/poky/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
+++ b/poky/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
@@ -1,4 +1,4 @@
-From 5e07c16a506b19cbb107d5e99fca41d679b23b9a Mon Sep 17 00:00:00 2001
+From 3bd0faf58cc9ad531e6b63d5660c4b8316e8daed Mon Sep 17 00:00:00 2001
 From: Alexander Kanavin <alex.kanavin@gmail.com>
 Date: Tue, 28 Apr 2020 15:55:00 +0200
 Subject: [PATCH] dnf: write the log lock to root
@@ -10,15 +10,16 @@
 
 Upstream-Status: Inappropriate [oe-core specific]
 Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+
 ---
  dnf/logging.py | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/dnf/logging.py b/dnf/logging.py
-index bd660470..a9d808b1 100644
+index ef0b25f3..94610af6 100644
 --- a/dnf/logging.py
 +++ b/dnf/logging.py
-@@ -94,7 +94,7 @@ class MultiprocessRotatingFileHandler(logging.handlers.RotatingFileHandler):
+@@ -118,7 +118,7 @@ class MultiprocessRotatingFileHandler(logging.handlers.RotatingFileHandler):
      def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
          super(MultiprocessRotatingFileHandler, self).__init__(
              filename, mode, maxBytes, backupCount, encoding, delay)
diff --git a/poky/meta/recipes-devtools/dnf/dnf_4.16.1.bb b/poky/meta/recipes-devtools/dnf/dnf_4.16.1.bb
deleted file mode 100644
index 9134411..0000000
--- a/poky/meta/recipes-devtools/dnf/dnf_4.16.1.bb
+++ /dev/null
@@ -1,97 +0,0 @@
-SUMMARY = "Package manager forked from Yum, using libsolv as a dependency resolver"
-DESCRIPTION = "Software package manager that installs, updates, and removes \
-packages on RPM-based Linux distributions. It automatically computes \
-dependencies and determines the actions required to install packages."
-HOMEPAGE = "https://github.com/rpm-software-management/dnf"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-                    file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
-                    "
-
-SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https \
-           file://0001-Corretly-install-tmpfiles.d-configuration.patch \
-           file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
-           file://0005-Do-not-prepend-installroot-to-logdir.patch \
-           file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
-           file://0030-Run-python-scripts-using-env.patch \
-           file://0001-set-python-path-for-completion_helper.patch \
-           "
-
-SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch"
-
-SRCREV = "94b7cc7956580405b219329541d6b40db6499cf1"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-inherit cmake gettext bash-completion setuptools3-base systemd
-
-DEPENDS += "libdnf librepo libcomps python3-iniparse"
-
-# manpages generation requires http://www.sphinx-doc.org/
-EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS:${PN} += " \
-  python3-core \
-  python3-codecs \
-  python3-netclient \
-  python3-email \
-  python3-threading \
-  python3-logging \
-  python3-fcntl \
-  librepo \
-  python3-shell \
-  libcomps \
-  libdnf \
-  python3-sqlite3 \
-  python3-compression \
-  python3-rpm \
-  python3-iniparse \
-  python3-json \
-  python3-curses \
-  python3-misc \
-  python3-gpg \
-  "
-
-RDEPENDS:${PN}:class-native = ""
-
-RRECOMMENDS:${PN}:class-target += "gnupg"
-
-# Create a symlink called 'dnf' as 'make install' does not do it, but
-# .spec file in dnf source tree does (and then Fedora and dnf documentation
-# says that dnf binary is plain 'dnf').
-do_install:append() {
-        ln -rs ${D}/${bindir}/dnf-3 ${D}/${bindir}/dnf
-        ln -rs ${D}/${bindir}/dnf-automatic-3 ${D}/${bindir}/dnf-automatic
-}
-
-# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
-do_install:append:class-native() {
-        create_wrapper ${D}/${bindir}/dnf \
-                RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
-                RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-do_install:append:class-nativesdk() {
-        create_wrapper ${D}/${bindir}/dnf \
-                RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
-                RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-SYSTEMD_SERVICE:${PN} = "dnf-makecache.service dnf-makecache.timer \
-                         dnf-automatic.service dnf-automatic.timer \
-                         dnf-automatic-download.service dnf-automatic-download.timer \
-                         dnf-automatic-install.service dnf-automatic-install.timer \
-                         dnf-automatic-notifyonly.service dnf-automatic-notifyonly.timer \
-"
-SYSTEMD_AUTO_ENABLE ?= "disable"
-
-SKIP_RECIPE[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
-
-# Packages for testing purposes
-PACKAGES += "${PN}-test-main ${PN}-test-dep"
-ALLOW_EMPTY:${PN}-test-main = "1"
-ALLOW_EMPTY:${PN}-test-dep = "1"
-RRECOMMENDS:${PN}-test-main = "${PN}-test-dep"
diff --git a/poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb b/poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb
new file mode 100644
index 0000000..ec4e48d
--- /dev/null
+++ b/poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb
@@ -0,0 +1,97 @@
+SUMMARY = "Package manager forked from Yum, using libsolv as a dependency resolver"
+DESCRIPTION = "Software package manager that installs, updates, and removes \
+packages on RPM-based Linux distributions. It automatically computes \
+dependencies and determines the actions required to install packages."
+HOMEPAGE = "https://github.com/rpm-software-management/dnf"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
+                    "
+
+SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https \
+           file://0001-Corretly-install-tmpfiles.d-configuration.patch \
+           file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
+           file://0005-Do-not-prepend-installroot-to-logdir.patch \
+           file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
+           file://0030-Run-python-scripts-using-env.patch \
+           file://0001-set-python-path-for-completion_helper.patch \
+           "
+
+SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch"
+
+SRCREV = "a31687c169095de1acb5c0a3762bf78993661776"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit cmake gettext bash-completion setuptools3-base systemd
+
+DEPENDS += "libdnf librepo libcomps python3-iniparse"
+
+# manpages generation requires http://www.sphinx-doc.org/
+EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS:${PN} += " \
+  python3-core \
+  python3-codecs \
+  python3-netclient \
+  python3-email \
+  python3-threading \
+  python3-logging \
+  python3-fcntl \
+  librepo \
+  python3-shell \
+  libcomps \
+  libdnf \
+  python3-sqlite3 \
+  python3-compression \
+  python3-rpm \
+  python3-iniparse \
+  python3-json \
+  python3-curses \
+  python3-misc \
+  python3-gpg \
+  "
+
+RDEPENDS:${PN}:class-native = ""
+
+RRECOMMENDS:${PN}:class-target += "gnupg"
+
+# Create a symlink called 'dnf' as 'make install' does not do it, but
+# .spec file in dnf source tree does (and then Fedora and dnf documentation
+# says that dnf binary is plain 'dnf').
+do_install:append() {
+        ln -rs ${D}/${bindir}/dnf-3 ${D}/${bindir}/dnf
+        ln -rs ${D}/${bindir}/dnf-automatic-3 ${D}/${bindir}/dnf-automatic
+}
+
+# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
+do_install:append:class-native() {
+        create_wrapper ${D}/${bindir}/dnf \
+                RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+                RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+do_install:append:class-nativesdk() {
+        create_wrapper ${D}/${bindir}/dnf \
+                RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
+                RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+SYSTEMD_SERVICE:${PN} = "dnf-makecache.service dnf-makecache.timer \
+                         dnf-automatic.service dnf-automatic.timer \
+                         dnf-automatic-download.service dnf-automatic-download.timer \
+                         dnf-automatic-install.service dnf-automatic-install.timer \
+                         dnf-automatic-notifyonly.service dnf-automatic-notifyonly.timer \
+"
+SYSTEMD_AUTO_ENABLE ?= "disable"
+
+SKIP_RECIPE[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
+
+# Packages for testing purposes
+PACKAGES += "${PN}-test-main ${PN}-test-dep"
+ALLOW_EMPTY:${PN}-test-main = "1"
+ALLOW_EMPTY:${PN}-test-dep = "1"
+RRECOMMENDS:${PN}-test-main = "${PN}-test-dep"
diff --git a/poky/meta/recipes-devtools/elfutils/elfutils_0.189.bb b/poky/meta/recipes-devtools/elfutils/elfutils_0.189.bb
index 236f8ce..d8bf82b 100644
--- a/poky/meta/recipes-devtools/elfutils/elfutils_0.189.bb
+++ b/poky/meta/recipes-devtools/elfutils/elfutils_0.189.bb
@@ -7,7 +7,7 @@
                     file://debuginfod/debuginfod-client.c;endline=28;md5=f0a7c3170776866ee94e8f9225a6ad79 \
                     "
 DEPENDS = "zlib virtual/libintl"
-DEPENDS:append:libc-musl = " argp-standalone fts musl-obstack "
+DEPENDS:append:libc-musl = " argp-standalone fts musl-legacy-error musl-obstack"
 # The Debian patches below are from:
 # http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.176-1.debian.tar.xz
 SRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \
@@ -24,7 +24,6 @@
            "
 SRC_URI:append:libc-musl = " \
            file://0003-musl-utils.patch \
-           file://0015-config-eu.am-do-not-use-Werror.patch \
            "
 SRC_URI[sha256sum] = "39bd8f1a338e2b7cd4abc3ff11a0eddc6e690f69578a57478d8179b4148708c8"
 
@@ -32,6 +31,9 @@
 
 EXTRA_OECONF = "--program-prefix=eu-"
 
+# Only used at runtime for make check but we want deterministic makefiles for ptest so hardcode
+CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes"
+
 BUILD_CFLAGS += "-Wno-error=stringop-overflow"
 
 DEPENDS_BZIP2 = "bzip2-replacement-native"
diff --git a/poky/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch b/poky/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch
deleted file mode 100644
index 9ee5801..0000000
--- a/poky/meta/recipes-devtools/elfutils/files/0015-config-eu.am-do-not-use-Werror.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From c209233857a73970d7a7dd8da664903570efc7ea Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Mon, 22 Jun 2020 21:35:16 +0000
-Subject: [PATCH] config/eu.am: do not use -Werror
-
-Due to re-definition of error() on musl, gcc starts throwing
-errors where none happen with glibc. Since upstream is not
-likely to be interested in musl builds, lets just disable
-Werror.
-
-Upstream-Status: Inappropriate [oe core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- config/eu.am | 2 --
- 1 file changed, 2 deletions(-)
-diff --git a/config/eu.am b/config/eu.am
-index e6c241f..4136e7c 100644
---- a/config/eu.am
-+++ b/config/eu.am
-@@ -99,7 +99,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \
- 	    $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
- 	    $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
- 	    $(USE_AFTER_FREE3_WARNING) \
--	    $(if $($(*F)_no_Werror),,-Werror) \
- 	    $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- 	    $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
- 	    $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \
-@@ -109,7 +108,6 @@ AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \
- 	   $(TRAMPOLINES_WARNING) \
- 	   $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
- 	   $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
--	   $(if $($(*F)_no_Werror),,-Werror) \
- 	   $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
- 	   $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
- 	   $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \
--- 
diff --git a/poky/meta/recipes-devtools/gcc/gcc-13.2.inc b/poky/meta/recipes-devtools/gcc/gcc-13.2.inc
index 7f97ecc..359db1e 100644
--- a/poky/meta/recipes-devtools/gcc/gcc-13.2.inc
+++ b/poky/meta/recipes-devtools/gcc/gcc-13.2.inc
@@ -10,7 +10,7 @@
 
 FILESEXTRAPATHS =. "${FILE_DIRNAME}/gcc:${FILE_DIRNAME}/gcc/backport:"
 
-DEPENDS =+ "mpfr gmp libmpc zlib flex-native"
+DEPENDS =+ "mpfr gmp libmpc zlib zstd flex-native"
 NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native flex-native zstd-native"
 
 LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0-only"
@@ -64,7 +64,9 @@
            file://0022-libatomic-Do-not-enforce-march-on-aarch64.patch \
            file://0023-Fix-install-path-of-linux64.h.patch \
            file://0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch \
-           file://0025-gcc-testsuite-mips.patch \
+           file://0025-gcc-testsuite-tweaks-for-mips-OE.patch \
+           file://CVE-2023-4039.patch \
+           file://0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch \
 "
 SRC_URI[sha256sum] = "e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da"
 
diff --git a/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch b/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch
deleted file mode 100644
index 49eaece..0000000
--- a/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-gcc testsuite tweaks for mips/OE
-
-Disable loongson-mmi runtine, qemu doesn't appear to fully support them even if some
-of the instruction decoding is there.
-
-Also disable MSA mips runtime extensions. For some reason qemu appears to accept the test
-code when it shouldn't. Our selected MIPS cpu for QEMU doesn't support them.
-
-MIPS is unusual in the gcc testsuite as it uses EFFECTIVE_TARGETS and loops
-multiple times through the vector testsuite. In the case of the two above, we can
-compile/link them but not run them. Even with the runtime disabled, if the code
-marks it as a runtime test, it will elevate itself to that. Setting the default
-target to compile therefore isn't enough.
-
-Therefore add code to downgrade runtime tests to link tests if the hardware
-support isn't there to run them. This avoids thousands of test failures. To do
-this we have to hook downgrade code into the main test runner.
-
-Enable that downgrading for other cases where hardware to run vector extensions is
-unavailable to remove test failures on other architectures too.
-
-Also, for gcc.target tests, add checks on wheter loongson or msa code can
-be run before trying that, allowing downgrading of tests there to work too.
-
-Upstream-Status: Pending
-[Parts of the patch may be able to be split off and acceptable to upstream with
-discussion. Need to investigate why qemu-user passes the 'bad' instructions']
-
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: gcc-13.2.0/gcc/testsuite/lib/target-supports.exp
-===================================================================
---- gcc-13.2.0.orig/gcc/testsuite/lib/target-supports.exp
-+++ gcc-13.2.0/gcc/testsuite/lib/target-supports.exp
-@@ -2155,14 +2155,7 @@ proc check_mips_loongson_mmi_hw_availabl
- 	if { !([istarget mips*-*-*]) } {
- 	    expr 0
- 	} else {
--	    check_runtime_nocache mips_loongson_mmi_hw_available {
--	      #include <loongson-mmiintrin.h>
--	      int main()
--	      {
--		asm volatile ("paddw $f2,$f4,$f6");
--		return 0;
--	      }
--	    } "-mloongson-mmi"
-+	    expr 0
- 	}
-     }]
- }
-@@ -2176,29 +2169,7 @@ proc check_mips_msa_hw_available { } {
-     if { !([istarget mips*-*-*]) } {
-       expr 0
-     } else {
--      check_runtime_nocache mips_msa_hw_available {
--	#if !defined(__mips_msa)
--	#error "MSA NOT AVAIL"
--	#else
--	#if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2))
--	#error "MSA NOT AVAIL FOR ISA REV < 2"
--	#endif
--	#if !defined(__mips_hard_float)
--	#error "MSA HARD_FLOAT REQUIRED"
--	#endif
--	#if __mips_fpr != 64
--	#error "MSA 64-bit FPR REQUIRED"
--	#endif
--	#include <msa.h>
--
--	int main()
--	{
--	  v8i16 v = __builtin_msa_ldi_h (0);
--	  v[0] = 0;
--	  return v[0];
--	}
--	#endif
--      } "-mmsa"
-+      expr 0
-     }
-   }]
- }
-@@ -9187,6 +9158,7 @@ proc is-effective-target-keyword { arg }
- 
- proc et-dg-runtest { runtest testcases flags default-extra-flags } {
-     global dg-do-what-default
-+    global do-what-limit
-     global EFFECTIVE_TARGETS
-     global et_index
- 
-@@ -9194,6 +9166,7 @@ proc et-dg-runtest { runtest testcases f
- 	foreach target $EFFECTIVE_TARGETS {
- 	    set target_flags $flags
- 	    set dg-do-what-default compile
-+            set do-what-limit link
- 	    set et_index [lsearch -exact $EFFECTIVE_TARGETS $target]
- 	    if { [info procs add_options_for_${target}] != [list] } {
- 		set target_flags [add_options_for_${target} "$flags"]
-@@ -9201,8 +9174,10 @@ proc et-dg-runtest { runtest testcases f
- 	    if { [info procs check_effective_target_${target}_runtime]
- 		 != [list] && [check_effective_target_${target}_runtime] } {
- 		set dg-do-what-default run
-+		set do-what-limit run
- 	    }
- 	    $runtest $testcases $target_flags ${default-extra-flags}
-+	    unset do-what-limit
- 	}
-     } else {
- 	set et_index 0
-@@ -10789,6 +10764,7 @@ proc check_effective_target_sigsetjmp {}
- proc check_vect_support_and_set_flags { } {
-     global DEFAULT_VECTCFLAGS
-     global dg-do-what-default
-+    global do-what-limit
-     global EFFECTIVE_TARGETS
- 
-     if  [istarget powerpc-*paired*]  {
-@@ -10797,6 +10773,7 @@ proc check_vect_support_and_set_flags {
-             set dg-do-what-default run
-         } else {
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif [istarget powerpc*-*-*] {
-         # Skip targets not supporting -maltivec.
-@@ -10821,6 +10798,7 @@ proc check_vect_support_and_set_flags {
-                 lappend DEFAULT_VECTCFLAGS "-mcpu=970"
-             }
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif { [istarget i?86-*-*] || [istarget x86_64-*-*] } {
-         lappend DEFAULT_VECTCFLAGS "-msse2"
-@@ -10828,6 +10806,7 @@ proc check_vect_support_and_set_flags {
-             set dg-do-what-default run
-         } else {
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif { [istarget mips*-*-*]
- 	       && [check_effective_target_nomips16] } {
-@@ -10847,6 +10826,7 @@ proc check_vect_support_and_set_flags {
-             set dg-do-what-default run
-         } else {
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif [istarget alpha*-*-*] {
-         # Alpha's vectorization capabilities are extremely limited.
-@@ -10860,6 +10840,7 @@ proc check_vect_support_and_set_flags {
-             set dg-do-what-default run
-         } else {
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif [istarget ia64-*-*] {
-         set dg-do-what-default run
-@@ -10873,6 +10854,7 @@ proc check_vect_support_and_set_flags {
-             set dg-do-what-default run
-         } else {
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif [istarget aarch64*-*-*] {
-         set dg-do-what-default run
-@@ -10897,6 +10879,7 @@ proc check_vect_support_and_set_flags {
-         } else {
- 	    lappend DEFAULT_VECTCFLAGS "-march=z14" "-mzarch"
-             set dg-do-what-default compile
-+            set do-what-limit link
-         }
-     } elseif [istarget amdgcn-*-*] {
-         set dg-do-what-default run
-Index: gcc-13.2.0/gcc/testsuite/gcc.target/mips/mips.exp
-===================================================================
---- gcc-13.2.0.orig/gcc/testsuite/gcc.target/mips/mips.exp
-+++ gcc-13.2.0/gcc/testsuite/gcc.target/mips/mips.exp
-@@ -709,7 +709,23 @@ proc mips_first_unsupported_option { ups
-     global mips_option_tests
-     upvar $upstatus status
- 
-+    if { [mips_have_test_option_p status "-mmsa"] } {
-+        verbose -log "Found -mmsa"
-+	if { ![check_mips_msa_hw_available] } {
-+	    verbose -log "No MSA avail"
-+	    return "-mmsa"
-+	}
-+    }
-+    if { [mips_have_test_option_p status "-mloongson-mmi"] } {
-+        verbose -log "Found -mloonson-mmi"
-+        if { ![check_mips_loongson_mmi_hw_available] } {
-+	    verbose -log "No MMI avail"
-+   	    return "-mloonson-mmi"
-+	}
-+    }
-+
-     foreach { option code } [array get mips_option_tests] {
-+
- 	if { [mips_have_test_option_p status $option] } {
- 	    regsub -all "\n" $code "\\n\\\n" asm
- 	    # Use check_runtime from target-supports.exp, which caches
-Index: gcc-13.2.0/gcc/testsuite/lib/gcc-dg.exp
-===================================================================
---- gcc-13.2.0.orig/gcc/testsuite/lib/gcc-dg.exp
-+++ gcc-13.2.0/gcc/testsuite/lib/gcc-dg.exp
-@@ -240,9 +240,20 @@ proc schedule-cleanups { opts } {
- 
- proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {
-     # Set up the compiler flags, based on what we're going to do.
-+    global do-what-limit
- 
-     set options [list]
- 
-+    if [info exists do-what-limit] then {
-+        # Demote run tests to $do-what-limit if set
-+	switch $do_what {
-+	    run {
-+    	        set do_what $do-what-limit
-+  		set dg-do-what $do-what-limit
-+	    }
-+        }
-+    }
-+
-     switch $do_what {
- 	"preprocess" {
- 	    set compile_type "preprocess"
diff --git a/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch b/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch
new file mode 100644
index 0000000..c405d8d
--- /dev/null
+++ b/poky/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-tweaks-for-mips-OE.patch
@@ -0,0 +1,233 @@
+From f12acc6a383546d48da3bdfb2f25ca2adb7976d7 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Sun, 13 Aug 2023 10:24:05 +0100
+Subject: [PATCH] gcc testsuite tweaks for mips/OE
+
+Disable loongson-mmi runtine, qemu doesn't appear to fully support them even if some
+of the instruction decoding is there.
+
+Also disable MSA mips runtime extensions. For some reason qemu appears to accept the test
+code when it shouldn't. Our selected MIPS cpu for QEMU doesn't support them.
+
+MIPS is unusual in the gcc testsuite as it uses EFFECTIVE_TARGETS and loops
+multiple times through the vector testsuite. In the case of the two above, we can
+compile/link them but not run them. Even with the runtime disabled, if the code
+marks it as a runtime test, it will elevate itself to that. Setting the default
+target to compile therefore isn't enough.
+
+Therefore add code to downgrade runtime tests to link tests if the hardware
+support isn't there to run them. This avoids thousands of test failures. To do
+this we have to hook downgrade code into the main test runner.
+
+Enable that downgrading for other cases where hardware to run vector extensions is
+unavailable to remove test failures on other architectures too.
+
+Also, for gcc.target tests, add checks on wheter loongson or msa code can
+be run before trying that, allowing downgrading of tests there to work too.
+
+Upstream-Status: Pending
+[Parts of the patch may be able to be split off and acceptable to upstream with
+discussion. Need to investigate why qemu-user passes the 'bad' instructions']
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+---
+ gcc/testsuite/gcc.target/mips/mips.exp | 16 +++++++++
+ gcc/testsuite/lib/gcc-dg.exp           | 11 +++++++
+ gcc/testsuite/lib/target-supports.exp  | 45 ++++++++------------------
+ 3 files changed, 41 insertions(+), 31 deletions(-)
+
+diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
+index 15d574202d3..2cef9709774 100644
+--- a/gcc/testsuite/gcc.target/mips/mips.exp
++++ b/gcc/testsuite/gcc.target/mips/mips.exp
+@@ -709,7 +709,23 @@ proc mips_first_unsupported_option { upstatus } {
+     global mips_option_tests
+     upvar $upstatus status
+ 
++    if { [mips_have_test_option_p status "-mmsa"] } {
++        verbose -log "Found -mmsa"
++	if { ![check_mips_msa_hw_available] } {
++	    verbose -log "No MSA avail"
++	    return "-mmsa"
++	}
++    }
++    if { [mips_have_test_option_p status "-mloongson-mmi"] } {
++        verbose -log "Found -mloonson-mmi"
++        if { ![check_mips_loongson_mmi_hw_available] } {
++	    verbose -log "No MMI avail"
++   	    return "-mloonson-mmi"
++	}
++    }
++
+     foreach { option code } [array get mips_option_tests] {
++
+ 	if { [mips_have_test_option_p status $option] } {
+ 	    regsub -all "\n" $code "\\n\\\n" asm
+ 	    # Use check_runtime from target-supports.exp, which caches
+diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
+index 9d79b9402e9..e0e5cbb1af8 100644
+--- a/gcc/testsuite/lib/gcc-dg.exp
++++ b/gcc/testsuite/lib/gcc-dg.exp
+@@ -240,9 +240,20 @@ proc schedule-cleanups { opts } {
+ 
+ proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+     # Set up the compiler flags, based on what we're going to do.
++    global do-what-limit
+ 
+     set options [list]
+ 
++    if [info exists do-what-limit] then {
++        # Demote run tests to $do-what-limit if set
++	switch $do_what {
++	    run {
++    	        set do_what $do-what-limit
++  		set dg-do-what $do-what-limit
++	    }
++        }
++    }
++
+     switch $do_what {
+ 	"preprocess" {
+ 	    set compile_type "preprocess"
+diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
+index 40f71e9ed8b..10e267fa16d 100644
+--- a/gcc/testsuite/lib/target-supports.exp
++++ b/gcc/testsuite/lib/target-supports.exp
+@@ -2155,14 +2155,7 @@ proc check_mips_loongson_mmi_hw_available { } {
+ 	if { !([istarget mips*-*-*]) } {
+ 	    expr 0
+ 	} else {
+-	    check_runtime_nocache mips_loongson_mmi_hw_available {
+-	      #include <loongson-mmiintrin.h>
+-	      int main()
+-	      {
+-		asm volatile ("paddw $f2,$f4,$f6");
+-		return 0;
+-	      }
+-	    } "-mloongson-mmi"
++	    expr 0
+ 	}
+     }]
+ }
+@@ -2176,29 +2169,7 @@ proc check_mips_msa_hw_available { } {
+     if { !([istarget mips*-*-*]) } {
+       expr 0
+     } else {
+-      check_runtime_nocache mips_msa_hw_available {
+-	#if !defined(__mips_msa)
+-	#error "MSA NOT AVAIL"
+-	#else
+-	#if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2))
+-	#error "MSA NOT AVAIL FOR ISA REV < 2"
+-	#endif
+-	#if !defined(__mips_hard_float)
+-	#error "MSA HARD_FLOAT REQUIRED"
+-	#endif
+-	#if __mips_fpr != 64
+-	#error "MSA 64-bit FPR REQUIRED"
+-	#endif
+-	#include <msa.h>
+-
+-	int main()
+-	{
+-	  v8i16 v = __builtin_msa_ldi_h (0);
+-	  v[0] = 0;
+-	  return v[0];
+-	}
+-	#endif
+-      } "-mmsa"
++      expr 0
+     }
+   }]
+ }
+@@ -9187,6 +9158,7 @@ proc is-effective-target-keyword { arg } {
+ 
+ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+     global dg-do-what-default
++    global do-what-limit
+     global EFFECTIVE_TARGETS
+     global et_index
+ 
+@@ -9194,6 +9166,7 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+ 	foreach target $EFFECTIVE_TARGETS {
+ 	    set target_flags $flags
+ 	    set dg-do-what-default compile
++            set do-what-limit link
+ 	    set et_index [lsearch -exact $EFFECTIVE_TARGETS $target]
+ 	    if { [info procs add_options_for_${target}] != [list] } {
+ 		set target_flags [add_options_for_${target} "$flags"]
+@@ -9201,8 +9174,10 @@ proc et-dg-runtest { runtest testcases flags default-extra-flags } {
+ 	    if { [info procs check_effective_target_${target}_runtime]
+ 		 != [list] && [check_effective_target_${target}_runtime] } {
+ 		set dg-do-what-default run
++		set do-what-limit run
+ 	    }
+ 	    $runtest $testcases $target_flags ${default-extra-flags}
++	    unset do-what-limit
+ 	}
+     } else {
+ 	set et_index 0
+@@ -10789,6 +10764,7 @@ proc check_effective_target_sigsetjmp {} {
+ proc check_vect_support_and_set_flags { } {
+     global DEFAULT_VECTCFLAGS
+     global dg-do-what-default
++    global do-what-limit
+     global EFFECTIVE_TARGETS
+ 
+     if  [istarget powerpc-*paired*]  {
+@@ -10797,6 +10773,7 @@ proc check_vect_support_and_set_flags { } {
+             set dg-do-what-default run
+         } else {
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif [istarget powerpc*-*-*] {
+         # Skip targets not supporting -maltivec.
+@@ -10821,6 +10798,7 @@ proc check_vect_support_and_set_flags { } {
+                 lappend DEFAULT_VECTCFLAGS "-mcpu=970"
+             }
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif { [istarget i?86-*-*] || [istarget x86_64-*-*] } {
+         lappend DEFAULT_VECTCFLAGS "-msse2"
+@@ -10828,6 +10806,7 @@ proc check_vect_support_and_set_flags { } {
+             set dg-do-what-default run
+         } else {
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif { [istarget mips*-*-*]
+ 	       && [check_effective_target_nomips16] } {
+@@ -10847,6 +10826,7 @@ proc check_vect_support_and_set_flags { } {
+             set dg-do-what-default run
+         } else {
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif [istarget alpha*-*-*] {
+         # Alpha's vectorization capabilities are extremely limited.
+@@ -10860,6 +10840,7 @@ proc check_vect_support_and_set_flags { } {
+             set dg-do-what-default run
+         } else {
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif [istarget ia64-*-*] {
+         set dg-do-what-default run
+@@ -10873,6 +10854,7 @@ proc check_vect_support_and_set_flags { } {
+             set dg-do-what-default run
+         } else {
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif [istarget aarch64*-*-*] {
+         set dg-do-what-default run
+@@ -10897,6 +10879,7 @@ proc check_vect_support_and_set_flags { } {
+         } else {
+ 	    lappend DEFAULT_VECTCFLAGS "-march=z14" "-mzarch"
+             set dg-do-what-default compile
++            set do-what-limit link
+         }
+     } elseif [istarget amdgcn-*-*] {
+         set dg-do-what-default run
diff --git a/poky/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch b/poky/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch
new file mode 100644
index 0000000..a408a98
--- /dev/null
+++ b/poky/meta/recipes-devtools/gcc/gcc/0026-aarch64-Fix-loose-ldpstp-check-PR111411.patch
@@ -0,0 +1,117 @@
+From adb60dc78e0da4877747f32347cee339364775be Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Fri, 15 Sep 2023 09:19:14 +0100
+Subject: [PATCH] aarch64: Fix loose ldpstp check [PR111411]
+
+aarch64_operands_ok_for_ldpstp contained the code:
+
+  /* One of the memory accesses must be a mempair operand.
+     If it is not the first one, they need to be swapped by the
+     peephole.  */
+  if (!aarch64_mem_pair_operand (mem_1, GET_MODE (mem_1))
+       && !aarch64_mem_pair_operand (mem_2, GET_MODE (mem_2)))
+    return false;
+
+But the requirement isn't just that one of the accesses must be a
+valid mempair operand.  It's that the lower access must be, since
+that's the access that will be used for the instruction operand.
+
+gcc/
+	PR target/111411
+	* config/aarch64/aarch64.cc (aarch64_operands_ok_for_ldpstp): Require
+	the lower memory access to a mem-pair operand.
+
+gcc/testsuite/
+	PR target/111411
+	* gcc.dg/rtl/aarch64/pr111411.c: New test.
+
+Upstream-Status: Backport [https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=2d38f45bcca62ca0c7afef4b579f82c5c2a01610]
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+ gcc/config/aarch64/aarch64.cc               |  8 ++-
+ gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c | 57 +++++++++++++++++++++
+ 2 files changed, 60 insertions(+), 5 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 6118a3354ac..9b1f791ca8b 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -26154,11 +26154,9 @@ aarch64_operands_ok_for_ldpstp (rtx *operands, bool load,
+   gcc_assert (known_eq (GET_MODE_SIZE (GET_MODE (mem_1)),
+ 			GET_MODE_SIZE (GET_MODE (mem_2))));
+ 
+-  /* One of the memory accesses must be a mempair operand.
+-     If it is not the first one, they need to be swapped by the
+-     peephole.  */
+-  if (!aarch64_mem_pair_operand (mem_1, GET_MODE (mem_1))
+-       && !aarch64_mem_pair_operand (mem_2, GET_MODE (mem_2)))
++  /* The lower memory access must be a mem-pair operand.  */
++  rtx lower_mem = reversed ? mem_2 : mem_1;
++  if (!aarch64_mem_pair_operand (lower_mem, GET_MODE (lower_mem)))
+     return false;
+ 
+   if (REG_P (reg_1) && FP_REGNUM_P (REGNO (reg_1)))
+diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c b/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+new file mode 100644
+index 00000000000..ad07e9c6c89
+--- /dev/null
++++ b/gcc/testsuite/gcc.dg/rtl/aarch64/pr111411.c
+@@ -0,0 +1,57 @@
++/* { dg-do compile { target aarch64*-*-* } } */
++/* { dg-require-effective-target lp64 } */
++/* { dg-options "-O -fdisable-rtl-postreload -fpeephole2 -fno-schedule-fusion" } */
++
++extern int data[];
++
++void __RTL (startwith ("ira")) foo (void *ptr)
++{
++  (function "foo"
++    (param "ptr"
++      (DECL_RTL (reg/v:DI <0> [ ptr ]))
++      (DECL_RTL_INCOMING (reg/v:DI x0 [ ptr ]))
++    ) ;; param "ptr"
++    (insn-chain
++      (block 2
++	(edge-from entry (flags "FALLTHRU"))
++	(cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
++	(insn 4 (set (reg:DI <0>) (reg:DI x0)))
++	(insn 5 (set (reg:DI <1>)
++		     (plus:DI (reg:DI <0>) (const_int 768))))
++	(insn 6 (set (mem:SI (plus:DI (reg:DI <0>)
++				      (const_int 508)) [1 &data+508 S4 A4])
++		     (const_int 0)))
++	(insn 7 (set (mem:SI (plus:DI (reg:DI <1>)
++				      (const_int -256)) [1 &data+512 S4 A4])
++		     (const_int 0)))
++	(edge-to exit (flags "FALLTHRU"))
++      ) ;; block 2
++    ) ;; insn-chain
++  ) ;; function
++}
++
++void __RTL (startwith ("ira")) bar (void *ptr)
++{
++  (function "bar"
++    (param "ptr"
++      (DECL_RTL (reg/v:DI <0> [ ptr ]))
++      (DECL_RTL_INCOMING (reg/v:DI x0 [ ptr ]))
++    ) ;; param "ptr"
++    (insn-chain
++      (block 2
++	(edge-from entry (flags "FALLTHRU"))
++	(cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
++	(insn 4 (set (reg:DI <0>) (reg:DI x0)))
++	(insn 5 (set (reg:DI <1>)
++		     (plus:DI (reg:DI <0>) (const_int 768))))
++	(insn 6 (set (mem:SI (plus:DI (reg:DI <1>)
++				      (const_int -256)) [1 &data+512 S4 A4])
++		     (const_int 0)))
++	(insn 7 (set (mem:SI (plus:DI (reg:DI <0>)
++				      (const_int 508)) [1 &data+508 S4 A4])
++		     (const_int 0)))
++	(edge-to exit (flags "FALLTHRU"))
++      ) ;; block 2
++    ) ;; insn-chain
++  ) ;; function
++}
diff --git a/poky/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch b/poky/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch
new file mode 100644
index 0000000..81b5067
--- /dev/null
+++ b/poky/meta/recipes-devtools/gcc/gcc/CVE-2023-4039.patch
@@ -0,0 +1,3093 @@
+From: Richard Sandiford <richard.sandiford@arm.com>
+Subject: [PATCH 00/19] aarch64: Fix -fstack-protector issue
+Date: Tue, 12 Sep 2023 16:25:10 +0100
+
+This series of patches fixes deficiencies in GCC's -fstack-protector
+implementation for AArch64 when using dynamically allocated stack space.
+This is CVE-2023-4039.  See:
+
+https://developer.arm.com/Arm%20Security%20Center/GCC%20Stack%20Protector%20Vulnerability%20AArch64
+https://github.com/metaredteam/external-disclosures/security/advisories/GHSA-x7ch-h5rf-w2mf
+
+for more details.
+
+The fix is to put the saved registers above the locals area when
+-fstack-protector is used.
+
+The series also fixes a stack-clash problem that I found while working
+on the CVE.  In unpatched sources, the stack-clash problem would only
+trigger for unrealistic numbers of arguments (8K 64-bit arguments, or an
+equivalent).  But it would be a more significant issue with the new
+-fstack-protector frame layout.  It's therefore important that both
+problems are fixed together.
+
+Some reorganisation of the code seemed necessary to fix the problems in a
+cleanish way.  The series is therefore quite long, but only a handful of
+patches should have any effect on code generation.
+
+See the individual patches for a detailed description.
+
+Tested on aarch64-linux-gnu. Pushed to trunk and to all active branches.
+I've also pushed backports to GCC 7+ to vendors/ARM/heads/CVE-2023-4039.
+
+CVE: CVE-2023-4039
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+  
+  
+From 71a2aa2127283f450c623d3604dbcabe0e14a8d4 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:12 +0100
+Subject: [PATCH 01/19] aarch64: Use local frame vars in shrink-wrapping code
+
+aarch64_layout_frame uses a shorthand for referring to
+cfun->machine->frame:
+
+  aarch64_frame &frame = cfun->machine->frame;
+
+This patch does the same for some other heavy users of the structure.
+No functional change intended.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_save_callee_saves): Use
+	a local shorthand for cfun->machine->frame.
+	(aarch64_restore_callee_saves, aarch64_get_separate_components):
+	(aarch64_process_components): Likewise.
+	(aarch64_allocate_and_probe_stack_space): Likewise.
+	(aarch64_expand_prologue, aarch64_expand_epilogue): Likewise.
+	(aarch64_layout_frame): Use existing shorthand for one more case.
+---
+ gcc/config/aarch64/aarch64.cc | 123 ++++++++++++++++++----------------
+ 1 file changed, 64 insertions(+), 59 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 822a2b49a46..5d473d161d9 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8612,7 +8612,7 @@ aarch64_layout_frame (void)
+   frame.is_scs_enabled
+     = (!crtl->calls_eh_return
+        && sanitize_flags_p (SANITIZE_SHADOW_CALL_STACK)
+-       && known_ge (cfun->machine->frame.reg_offset[LR_REGNUM], 0));
++       && known_ge (frame.reg_offset[LR_REGNUM], 0));
+ 
+   /* When shadow call stack is enabled, the scs_pop in the epilogue will
+      restore x30, and we don't need to pop x30 again in the traditional
+@@ -9078,6 +9078,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ 			   unsigned start, unsigned limit, bool skip_wb,
+ 			   bool hard_fp_valid_p)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
+   rtx_insn *insn;
+   unsigned regno;
+   unsigned regno2;
+@@ -9092,8 +9093,8 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+       bool frame_related_p = aarch64_emit_cfi_for_reg_p (regno);
+ 
+       if (skip_wb
+-	  && (regno == cfun->machine->frame.wb_push_candidate1
+-	      || regno == cfun->machine->frame.wb_push_candidate2))
++	  && (regno == frame.wb_push_candidate1
++	      || regno == frame.wb_push_candidate2))
+ 	continue;
+ 
+       if (cfun->machine->reg_is_wrapped_separately[regno])
+@@ -9101,7 +9102,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = start_offset + cfun->machine->frame.reg_offset[regno];
++      offset = start_offset + frame.reg_offset[regno];
+       rtx base_rtx = stack_pointer_rtx;
+       poly_int64 sp_offset = offset;
+ 
+@@ -9114,7 +9115,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ 	{
+ 	  gcc_assert (known_eq (start_offset, 0));
+ 	  poly_int64 fp_offset
+-	    = cfun->machine->frame.below_hard_fp_saved_regs_size;
++	    = frame.below_hard_fp_saved_regs_size;
+ 	  if (hard_fp_valid_p)
+ 	    base_rtx = hard_frame_pointer_rtx;
+ 	  else
+@@ -9136,8 +9137,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ 	  && (regno2 = aarch64_next_callee_save (regno + 1, limit)) <= limit
+ 	  && !cfun->machine->reg_is_wrapped_separately[regno2]
+ 	  && known_eq (GET_MODE_SIZE (mode),
+-		       cfun->machine->frame.reg_offset[regno2]
+-		       - cfun->machine->frame.reg_offset[regno]))
++		       frame.reg_offset[regno2] - frame.reg_offset[regno]))
+ 	{
+ 	  rtx reg2 = gen_rtx_REG (mode, regno2);
+ 	  rtx mem2;
+@@ -9187,6 +9187,7 @@ static void
+ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ 			      unsigned limit, bool skip_wb, rtx *cfi_ops)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
+   unsigned regno;
+   unsigned regno2;
+   poly_int64 offset;
+@@ -9203,13 +9204,13 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+       rtx reg, mem;
+ 
+       if (skip_wb
+-	  && (regno == cfun->machine->frame.wb_pop_candidate1
+-	      || regno == cfun->machine->frame.wb_pop_candidate2))
++	  && (regno == frame.wb_pop_candidate1
++	      || regno == frame.wb_pop_candidate2))
+ 	continue;
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = start_offset + cfun->machine->frame.reg_offset[regno];
++      offset = start_offset + frame.reg_offset[regno];
+       rtx base_rtx = stack_pointer_rtx;
+       if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ 	aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9220,8 +9221,7 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ 	  && (regno2 = aarch64_next_callee_save (regno + 1, limit)) <= limit
+ 	  && !cfun->machine->reg_is_wrapped_separately[regno2]
+ 	  && known_eq (GET_MODE_SIZE (mode),
+-		       cfun->machine->frame.reg_offset[regno2]
+-		       - cfun->machine->frame.reg_offset[regno]))
++		       frame.reg_offset[regno2] - frame.reg_offset[regno]))
+ 	{
+ 	  rtx reg2 = gen_rtx_REG (mode, regno2);
+ 	  rtx mem2;
+@@ -9326,6 +9326,7 @@ offset_12bit_unsigned_scaled_p (machine_mode mode, poly_int64 offset)
+ static sbitmap
+ aarch64_get_separate_components (void)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
+   sbitmap components = sbitmap_alloc (LAST_SAVED_REGNUM + 1);
+   bitmap_clear (components);
+ 
+@@ -9342,18 +9343,18 @@ aarch64_get_separate_components (void)
+ 	if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ 	  continue;
+ 
+-	poly_int64 offset = cfun->machine->frame.reg_offset[regno];
++	poly_int64 offset = frame.reg_offset[regno];
+ 
+ 	/* If the register is saved in the first SVE save slot, we use
+ 	   it as a stack probe for -fstack-clash-protection.  */
+ 	if (flag_stack_clash_protection
+-	    && maybe_ne (cfun->machine->frame.below_hard_fp_saved_regs_size, 0)
++	    && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+ 	    && known_eq (offset, 0))
+ 	  continue;
+ 
+ 	/* Get the offset relative to the register we'll use.  */
+ 	if (frame_pointer_needed)
+-	  offset -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++	  offset -= frame.below_hard_fp_saved_regs_size;
+ 	else
+ 	  offset += crtl->outgoing_args_size;
+ 
+@@ -9372,11 +9373,11 @@ aarch64_get_separate_components (void)
+   /* If the spare predicate register used by big-endian SVE code
+      is call-preserved, it must be saved in the main prologue
+      before any saves that use it.  */
+-  if (cfun->machine->frame.spare_pred_reg != INVALID_REGNUM)
+-    bitmap_clear_bit (components, cfun->machine->frame.spare_pred_reg);
++  if (frame.spare_pred_reg != INVALID_REGNUM)
++    bitmap_clear_bit (components, frame.spare_pred_reg);
+ 
+-  unsigned reg1 = cfun->machine->frame.wb_push_candidate1;
+-  unsigned reg2 = cfun->machine->frame.wb_push_candidate2;
++  unsigned reg1 = frame.wb_push_candidate1;
++  unsigned reg2 = frame.wb_push_candidate2;
+   /* If registers have been chosen to be stored/restored with
+      writeback don't interfere with them to avoid having to output explicit
+      stack adjustment instructions.  */
+@@ -9485,6 +9486,7 @@ aarch64_get_next_set_bit (sbitmap bmp, unsigned int start)
+ static void
+ aarch64_process_components (sbitmap components, bool prologue_p)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
+   rtx ptr_reg = gen_rtx_REG (Pmode, frame_pointer_needed
+ 			     ? HARD_FRAME_POINTER_REGNUM
+ 			     : STACK_POINTER_REGNUM);
+@@ -9499,9 +9501,9 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       
+       rtx reg = gen_rtx_REG (mode, regno);
+-      poly_int64 offset = cfun->machine->frame.reg_offset[regno];
++      poly_int64 offset = frame.reg_offset[regno];
+       if (frame_pointer_needed)
+-	offset -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++	offset -= frame.below_hard_fp_saved_regs_size;
+       else
+ 	offset += crtl->outgoing_args_size;
+ 
+@@ -9526,14 +9528,14 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+ 	  break;
+ 	}
+ 
+-      poly_int64 offset2 = cfun->machine->frame.reg_offset[regno2];
++      poly_int64 offset2 = frame.reg_offset[regno2];
+       /* The next register is not of the same class or its offset is not
+ 	 mergeable with the current one into a pair.  */
+       if (aarch64_sve_mode_p (mode)
+ 	  || !satisfies_constraint_Ump (mem)
+ 	  || GP_REGNUM_P (regno) != GP_REGNUM_P (regno2)
+ 	  || (crtl->abi->id () == ARM_PCS_SIMD && FP_REGNUM_P (regno))
+-	  || maybe_ne ((offset2 - cfun->machine->frame.reg_offset[regno]),
++	  || maybe_ne ((offset2 - frame.reg_offset[regno]),
+ 		       GET_MODE_SIZE (mode)))
+ 	{
+ 	  insn = emit_insn (set);
+@@ -9555,7 +9557,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       /* REGNO2 can be saved/restored in a pair with REGNO.  */
+       rtx reg2 = gen_rtx_REG (mode, regno2);
+       if (frame_pointer_needed)
+-	offset2 -= cfun->machine->frame.below_hard_fp_saved_regs_size;
++	offset2 -= frame.below_hard_fp_saved_regs_size;
+       else
+ 	offset2 += crtl->outgoing_args_size;
+       rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+@@ -9650,6 +9652,7 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ 					bool frame_related_p,
+ 					bool final_adjustment_p)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
+   HOST_WIDE_INT guard_size
+     = 1 << param_stack_clash_protection_guard_size;
+   HOST_WIDE_INT guard_used_by_caller = STACK_CLASH_CALLER_GUARD;
+@@ -9670,25 +9673,25 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+        register as a probe.  We can't assume that LR was saved at position 0
+        though, so treat any space below it as unprobed.  */
+   if (final_adjustment_p
+-      && known_eq (cfun->machine->frame.below_hard_fp_saved_regs_size, 0))
++      && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+     {
+-      poly_int64 lr_offset = cfun->machine->frame.reg_offset[LR_REGNUM];
++      poly_int64 lr_offset = frame.reg_offset[LR_REGNUM];
+       if (known_ge (lr_offset, 0))
+ 	min_probe_threshold -= lr_offset.to_constant ();
+       else
+ 	gcc_assert (!flag_stack_clash_protection || known_eq (poly_size, 0));
+     }
+ 
+-  poly_int64 frame_size = cfun->machine->frame.frame_size;
++  poly_int64 frame_size = frame.frame_size;
+ 
+   /* We should always have a positive probe threshold.  */
+   gcc_assert (min_probe_threshold > 0);
+ 
+   if (flag_stack_clash_protection && !final_adjustment_p)
+     {
+-      poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+-      poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
+-      poly_int64 final_adjust = cfun->machine->frame.final_adjust;
++      poly_int64 initial_adjust = frame.initial_adjust;
++      poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
++      poly_int64 final_adjust = frame.final_adjust;
+ 
+       if (known_eq (frame_size, 0))
+ 	{
+@@ -9977,17 +9980,18 @@ aarch64_epilogue_uses (int regno)
+ void
+ aarch64_expand_prologue (void)
+ {
+-  poly_int64 frame_size = cfun->machine->frame.frame_size;
+-  poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+-  HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
+-  poly_int64 final_adjust = cfun->machine->frame.final_adjust;
+-  poly_int64 callee_offset = cfun->machine->frame.callee_offset;
+-  poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
++  aarch64_frame &frame = cfun->machine->frame;
++  poly_int64 frame_size = frame.frame_size;
++  poly_int64 initial_adjust = frame.initial_adjust;
++  HOST_WIDE_INT callee_adjust = frame.callee_adjust;
++  poly_int64 final_adjust = frame.final_adjust;
++  poly_int64 callee_offset = frame.callee_offset;
++  poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+   poly_int64 below_hard_fp_saved_regs_size
+-    = cfun->machine->frame.below_hard_fp_saved_regs_size;
+-  unsigned reg1 = cfun->machine->frame.wb_push_candidate1;
+-  unsigned reg2 = cfun->machine->frame.wb_push_candidate2;
+-  bool emit_frame_chain = cfun->machine->frame.emit_frame_chain;
++    = frame.below_hard_fp_saved_regs_size;
++  unsigned reg1 = frame.wb_push_candidate1;
++  unsigned reg2 = frame.wb_push_candidate2;
++  bool emit_frame_chain = frame.emit_frame_chain;
+   rtx_insn *insn;
+ 
+   if (flag_stack_clash_protection && known_eq (callee_adjust, 0))
+@@ -10018,7 +10022,7 @@ aarch64_expand_prologue (void)
+     }
+ 
+   /* Push return address to shadow call stack.  */
+-  if (cfun->machine->frame.is_scs_enabled)
++  if (frame.is_scs_enabled)
+     emit_insn (gen_scs_push ());
+ 
+   if (flag_stack_usage_info)
+@@ -10057,7 +10061,7 @@ aarch64_expand_prologue (void)
+ 
+   /* The offset of the frame chain record (if any) from the current SP.  */
+   poly_int64 chain_offset = (initial_adjust + callee_adjust
+-			     - cfun->machine->frame.hard_fp_offset);
++			     - frame.hard_fp_offset);
+   gcc_assert (known_ge (chain_offset, 0));
+ 
+   /* The offset of the bottom of the save area from the current SP.  */
+@@ -10160,16 +10164,17 @@ aarch64_use_return_insn_p (void)
+ void
+ aarch64_expand_epilogue (bool for_sibcall)
+ {
+-  poly_int64 initial_adjust = cfun->machine->frame.initial_adjust;
+-  HOST_WIDE_INT callee_adjust = cfun->machine->frame.callee_adjust;
+-  poly_int64 final_adjust = cfun->machine->frame.final_adjust;
+-  poly_int64 callee_offset = cfun->machine->frame.callee_offset;
+-  poly_int64 sve_callee_adjust = cfun->machine->frame.sve_callee_adjust;
++  aarch64_frame &frame = cfun->machine->frame;
++  poly_int64 initial_adjust = frame.initial_adjust;
++  HOST_WIDE_INT callee_adjust = frame.callee_adjust;
++  poly_int64 final_adjust = frame.final_adjust;
++  poly_int64 callee_offset = frame.callee_offset;
++  poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+   poly_int64 below_hard_fp_saved_regs_size
+-    = cfun->machine->frame.below_hard_fp_saved_regs_size;
+-  unsigned reg1 = cfun->machine->frame.wb_pop_candidate1;
+-  unsigned reg2 = cfun->machine->frame.wb_pop_candidate2;
+-  unsigned int last_gpr = (cfun->machine->frame.is_scs_enabled
++    = frame.below_hard_fp_saved_regs_size;
++  unsigned reg1 = frame.wb_pop_candidate1;
++  unsigned reg2 = frame.wb_pop_candidate2;
++  unsigned int last_gpr = (frame.is_scs_enabled
+ 			   ? R29_REGNUM : R30_REGNUM);
+   rtx cfi_ops = NULL;
+   rtx_insn *insn;
+@@ -10203,7 +10208,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+   /* We need to add memory barrier to prevent read from deallocated stack.  */
+   bool need_barrier_p
+     = maybe_ne (get_frame_size ()
+-		+ cfun->machine->frame.saved_varargs_size, 0);
++		+ frame.saved_varargs_size, 0);
+ 
+   /* Emit a barrier to prevent loads from a deallocated stack.  */
+   if (maybe_gt (final_adjust, crtl->outgoing_args_size)
+@@ -10284,7 +10289,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+     }
+ 
+   /* Pop return address from shadow call stack.  */
+-  if (cfun->machine->frame.is_scs_enabled)
++  if (frame.is_scs_enabled)
+     {
+       machine_mode mode = aarch64_reg_save_mode (R30_REGNUM);
+       rtx reg = gen_rtx_REG (mode, R30_REGNUM);
+@@ -12740,24 +12745,24 @@ aarch64_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
+ poly_int64
+ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ {
++  aarch64_frame &frame = cfun->machine->frame;
++
+   if (to == HARD_FRAME_POINTER_REGNUM)
+     {
+       if (from == ARG_POINTER_REGNUM)
+-	return cfun->machine->frame.hard_fp_offset;
++	return frame.hard_fp_offset;
+ 
+       if (from == FRAME_POINTER_REGNUM)
+-	return cfun->machine->frame.hard_fp_offset
+-	       - cfun->machine->frame.locals_offset;
++	return frame.hard_fp_offset - frame.locals_offset;
+     }
+ 
+   if (to == STACK_POINTER_REGNUM)
+     {
+       if (from == FRAME_POINTER_REGNUM)
+-	  return cfun->machine->frame.frame_size
+-		 - cfun->machine->frame.locals_offset;
++	return frame.frame_size - frame.locals_offset;
+     }
+ 
+-  return cfun->machine->frame.frame_size;
++  return frame.frame_size;
+ }
+ 
+ 
+-- 
+2.34.1
+
+
+From 89a9fa287706c5011f61926eaf65e7b996b963a3 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:12 +0100
+Subject: [PATCH 02/19] aarch64: Avoid a use of callee_offset
+
+When we emit the frame chain, i.e. when we reach Here in this statement
+of aarch64_expand_prologue:
+
+  if (emit_frame_chain)
+    {
+      // Here
+      ...
+    }
+
+the stack is in one of two states:
+
+- We've allocated up to the frame chain, but no more.
+
+- We've allocated the whole frame, and the frame chain is within easy
+  reach of the new SP.
+
+The offset of the frame chain from the current SP is available
+in aarch64_frame as callee_offset.  It is also available as the
+chain_offset local variable, where the latter is calculated from other
+data.  (However, chain_offset is not always equal to callee_offset when
+!emit_frame_chain, so chain_offset isn't redundant.)
+
+In c600df9a4060da3c6121ff4d0b93f179eafd69d1 I switched to using
+chain_offset for the initialisation of the hard frame pointer:
+
+       aarch64_add_offset (Pmode, hard_frame_pointer_rtx,
+-                         stack_pointer_rtx, callee_offset,
++                         stack_pointer_rtx, chain_offset,
+                          tmp1_rtx, tmp0_rtx, frame_pointer_needed);
+
+But the later REG_CFA_ADJUST_CFA handling still used callee_offset.
+
+I think the difference is harmless, but it's more logical for the
+CFA note to be in sync, and it's more convenient for later patches
+if it uses chain_offset.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_expand_prologue): Use
+	chain_offset rather than callee_offset.
+---
+ gcc/config/aarch64/aarch64.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 5d473d161d9..4f233c95140 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9985,7 +9985,6 @@ aarch64_expand_prologue (void)
+   poly_int64 initial_adjust = frame.initial_adjust;
+   HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+   poly_int64 final_adjust = frame.final_adjust;
+-  poly_int64 callee_offset = frame.callee_offset;
+   poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+   poly_int64 below_hard_fp_saved_regs_size
+     = frame.below_hard_fp_saved_regs_size;
+@@ -10098,8 +10097,7 @@ aarch64_expand_prologue (void)
+ 	     implicit.  */
+ 	  if (!find_reg_note (insn, REG_CFA_ADJUST_CFA, NULL_RTX))
+ 	    {
+-	      rtx src = plus_constant (Pmode, stack_pointer_rtx,
+-				       callee_offset);
++	      rtx src = plus_constant (Pmode, stack_pointer_rtx, chain_offset);
+ 	      add_reg_note (insn, REG_CFA_ADJUST_CFA,
+ 			    gen_rtx_SET (hard_frame_pointer_rtx, src));
+ 	    }
+-- 
+2.34.1
+
+
+From b36a2a78040722dab6124366c5d6baf8eaf80aef Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:13 +0100
+Subject: [PATCH 03/19] aarch64: Explicitly handle frames with no saved
+ registers
+
+If a frame has no saved registers, it can be allocated in one go.
+There is no need to treat the areas below and above the saved
+registers as separate.
+
+And if we allocate the frame in one go, it should be allocated
+as the initial_adjust rather than the final_adjust.  This allows the
+frame size to grow to guard_size - guard_used_by_caller before a stack
+probe is needed.  (A frame with no register saves is necessarily a
+leaf frame.)
+
+This is a no-op as thing stand, since a leaf function will have
+no outgoing arguments, and so all the frame will be above where
+the saved registers normally go.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Explicitly
+	allocate the frame in one go if there are no saved registers.
+---
+ gcc/config/aarch64/aarch64.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 4f233c95140..37643041ffb 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8639,9 +8639,11 @@ aarch64_layout_frame (void)
+ 
+   HOST_WIDE_INT const_size, const_outgoing_args_size, const_fp_offset;
+   HOST_WIDE_INT const_saved_regs_size;
+-  if (frame.frame_size.is_constant (&const_size)
+-      && const_size < max_push_offset
+-      && known_eq (frame.hard_fp_offset, const_size))
++  if (known_eq (frame.saved_regs_size, 0))
++    frame.initial_adjust = frame.frame_size;
++  else if (frame.frame_size.is_constant (&const_size)
++	   && const_size < max_push_offset
++	   && known_eq (frame.hard_fp_offset, const_size))
+     {
+       /* Simple, small frame with no outgoing arguments:
+ 
+-- 
+2.34.1
+
+
+From ada2ab0093596be707f23a3466ac82cff59fcffe Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:13 +0100
+Subject: [PATCH 04/19] aarch64: Add bytes_below_saved_regs to frame info
+
+The frame layout code currently hard-codes the assumption that
+the number of bytes below the saved registers is equal to the
+size of the outgoing arguments.  This patch abstracts that
+value into a new field of aarch64_frame.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::bytes_below_saved_regs): New
+	field.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize it,
+	and use it instead of crtl->outgoing_args_size.
+	(aarch64_get_separate_components): Use bytes_below_saved_regs instead
+	of outgoing_args_size.
+	(aarch64_process_components): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 71 ++++++++++++++++++-----------------
+ gcc/config/aarch64/aarch64.h  |  5 +++
+ 2 files changed, 41 insertions(+), 35 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 37643041ffb..dacc2b0e4dd 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8478,6 +8478,8 @@ aarch64_layout_frame (void)
+   gcc_assert (crtl->is_leaf
+ 	      || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+ 
++  frame.bytes_below_saved_regs = crtl->outgoing_args_size;
++
+   /* Now assign stack slots for the registers.  Start with the predicate
+      registers, since predicate LDR and STR have a relatively small
+      offset range.  These saves happen below the hard frame pointer.  */
+@@ -8582,18 +8584,18 @@ aarch64_layout_frame (void)
+ 
+   poly_int64 varargs_and_saved_regs_size = offset + frame.saved_varargs_size;
+ 
+-  poly_int64 above_outgoing_args
++  poly_int64 saved_regs_and_above
+     = aligned_upper_bound (varargs_and_saved_regs_size
+ 			   + get_frame_size (),
+ 			   STACK_BOUNDARY / BITS_PER_UNIT);
+ 
+   frame.hard_fp_offset
+-    = above_outgoing_args - frame.below_hard_fp_saved_regs_size;
++    = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
+ 
+   /* Both these values are already aligned.  */
+-  gcc_assert (multiple_p (crtl->outgoing_args_size,
++  gcc_assert (multiple_p (frame.bytes_below_saved_regs,
+ 			  STACK_BOUNDARY / BITS_PER_UNIT));
+-  frame.frame_size = above_outgoing_args + crtl->outgoing_args_size;
++  frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
+ 
+   frame.locals_offset = frame.saved_varargs_size;
+ 
+@@ -8637,7 +8639,7 @@ aarch64_layout_frame (void)
+   else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+     max_push_offset = 256;
+ 
+-  HOST_WIDE_INT const_size, const_outgoing_args_size, const_fp_offset;
++  HOST_WIDE_INT const_size, const_below_saved_regs, const_fp_offset;
+   HOST_WIDE_INT const_saved_regs_size;
+   if (known_eq (frame.saved_regs_size, 0))
+     frame.initial_adjust = frame.frame_size;
+@@ -8645,31 +8647,31 @@ aarch64_layout_frame (void)
+ 	   && const_size < max_push_offset
+ 	   && known_eq (frame.hard_fp_offset, const_size))
+     {
+-      /* Simple, small frame with no outgoing arguments:
++      /* Simple, small frame with no data below the saved registers.
+ 
+ 	 stp reg1, reg2, [sp, -frame_size]!
+ 	 stp reg3, reg4, [sp, 16]  */
+       frame.callee_adjust = const_size;
+     }
+-  else if (crtl->outgoing_args_size.is_constant (&const_outgoing_args_size)
++  else if (frame.bytes_below_saved_regs.is_constant (&const_below_saved_regs)
+ 	   && frame.saved_regs_size.is_constant (&const_saved_regs_size)
+-	   && const_outgoing_args_size + const_saved_regs_size < 512
+-	   /* We could handle this case even with outgoing args, provided
+-	      that the number of args left us with valid offsets for all
+-	      predicate and vector save slots.  It's such a rare case that
+-	      it hardly seems worth the effort though.  */
+-	   && (!saves_below_hard_fp_p || const_outgoing_args_size == 0)
++	   && const_below_saved_regs + const_saved_regs_size < 512
++	   /* We could handle this case even with data below the saved
++	      registers, provided that that data left us with valid offsets
++	      for all predicate and vector save slots.  It's such a rare
++	      case that it hardly seems worth the effort though.  */
++	   && (!saves_below_hard_fp_p || const_below_saved_regs == 0)
+ 	   && !(cfun->calls_alloca
+ 		&& frame.hard_fp_offset.is_constant (&const_fp_offset)
+ 		&& const_fp_offset < max_push_offset))
+     {
+-      /* Frame with small outgoing arguments:
++      /* Frame with small area below the saved registers:
+ 
+ 	 sub sp, sp, frame_size
+-	 stp reg1, reg2, [sp, outgoing_args_size]
+-	 stp reg3, reg4, [sp, outgoing_args_size + 16]  */
++	 stp reg1, reg2, [sp, bytes_below_saved_regs]
++	 stp reg3, reg4, [sp, bytes_below_saved_regs + 16]  */
+       frame.initial_adjust = frame.frame_size;
+-      frame.callee_offset = const_outgoing_args_size;
++      frame.callee_offset = const_below_saved_regs;
+     }
+   else if (saves_below_hard_fp_p
+ 	   && known_eq (frame.saved_regs_size,
+@@ -8679,30 +8681,29 @@ aarch64_layout_frame (void)
+ 
+ 	 sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
+ 	 save SVE registers relative to SP
+-	 sub sp, sp, outgoing_args_size  */
++	 sub sp, sp, bytes_below_saved_regs  */
+       frame.initial_adjust = (frame.hard_fp_offset
+ 			      + frame.below_hard_fp_saved_regs_size);
+-      frame.final_adjust = crtl->outgoing_args_size;
++      frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+   else if (frame.hard_fp_offset.is_constant (&const_fp_offset)
+ 	   && const_fp_offset < max_push_offset)
+     {
+-      /* Frame with large outgoing arguments or SVE saves, but with
+-	 a small local area:
++      /* Frame with large area below the saved registers, or with SVE saves,
++	 but with a small area above:
+ 
+ 	 stp reg1, reg2, [sp, -hard_fp_offset]!
+ 	 stp reg3, reg4, [sp, 16]
+ 	 [sub sp, sp, below_hard_fp_saved_regs_size]
+ 	 [save SVE registers relative to SP]
+-	 sub sp, sp, outgoing_args_size  */
++	 sub sp, sp, bytes_below_saved_regs  */
+       frame.callee_adjust = const_fp_offset;
+       frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+-      frame.final_adjust = crtl->outgoing_args_size;
++      frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+   else
+     {
+-      /* Frame with large local area and outgoing arguments or SVE saves,
+-	 using frame pointer:
++      /* General case:
+ 
+ 	 sub sp, sp, hard_fp_offset
+ 	 stp x29, x30, [sp, 0]
+@@ -8710,10 +8711,10 @@ aarch64_layout_frame (void)
+ 	 stp reg3, reg4, [sp, 16]
+ 	 [sub sp, sp, below_hard_fp_saved_regs_size]
+ 	 [save SVE registers relative to SP]
+-	 sub sp, sp, outgoing_args_size  */
++	 sub sp, sp, bytes_below_saved_regs  */
+       frame.initial_adjust = frame.hard_fp_offset;
+       frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+-      frame.final_adjust = crtl->outgoing_args_size;
++      frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+ 
+   /* Make sure the individual adjustments add up to the full frame size.  */
+@@ -9358,7 +9359,7 @@ aarch64_get_separate_components (void)
+ 	if (frame_pointer_needed)
+ 	  offset -= frame.below_hard_fp_saved_regs_size;
+ 	else
+-	  offset += crtl->outgoing_args_size;
++	  offset += frame.bytes_below_saved_regs;
+ 
+ 	/* Check that we can access the stack slot of the register with one
+ 	   direct load with no adjustments needed.  */
+@@ -9507,7 +9508,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       if (frame_pointer_needed)
+ 	offset -= frame.below_hard_fp_saved_regs_size;
+       else
+-	offset += crtl->outgoing_args_size;
++	offset += frame.bytes_below_saved_regs;
+ 
+       rtx addr = plus_constant (Pmode, ptr_reg, offset);
+       rtx mem = gen_frame_mem (mode, addr);
+@@ -9561,7 +9562,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       if (frame_pointer_needed)
+ 	offset2 -= frame.below_hard_fp_saved_regs_size;
+       else
+-	offset2 += crtl->outgoing_args_size;
++	offset2 += frame.bytes_below_saved_regs;
+       rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+       rtx mem2 = gen_frame_mem (mode, addr2);
+       rtx set2 = prologue_p ? gen_rtx_SET (mem2, reg2)
+@@ -9635,10 +9636,10 @@ aarch64_stack_clash_protection_alloca_probe_range (void)
+    registers.  If POLY_SIZE is not large enough to require a probe this function
+    will only adjust the stack.  When allocating the stack space
+    FRAME_RELATED_P is then used to indicate if the allocation is frame related.
+-   FINAL_ADJUSTMENT_P indicates whether we are allocating the outgoing
+-   arguments.  If we are then we ensure that any allocation larger than the ABI
+-   defined buffer needs a probe so that the invariant of having a 1KB buffer is
+-   maintained.
++   FINAL_ADJUSTMENT_P indicates whether we are allocating the area below
++   the saved registers.  If we are then we ensure that any allocation
++   larger than the ABI defined buffer needs a probe so that the
++   invariant of having a 1KB buffer is maintained.
+ 
+    We emit barriers after each stack adjustment to prevent optimizations from
+    breaking the invariant that we never drop the stack more than a page.  This
+@@ -9847,7 +9848,7 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+   /* Handle any residuals.  Residuals of at least MIN_PROBE_THRESHOLD have to
+      be probed.  This maintains the requirement that each page is probed at
+      least once.  For initial probing we probe only if the allocation is
+-     more than GUARD_SIZE - buffer, and for the outgoing arguments we probe
++     more than GUARD_SIZE - buffer, and below the saved registers we probe
+      if the amount is larger than buffer.  GUARD_SIZE - buffer + buffer ==
+      GUARD_SIZE.  This works that for any allocation that is large enough to
+      trigger a probe here, we'll have at least one, and if they're not large
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 73b09e20508..0b6faa3ddf1 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -777,6 +777,11 @@ struct GTY (()) aarch64_frame
+   /* The size of the callee-save registers with a slot in REG_OFFSET.  */
+   poly_int64 saved_regs_size;
+ 
++  /* The number of bytes between the bottom of the static frame (the bottom
++     of the outgoing arguments) and the bottom of the register save area.
++     This value is always a multiple of STACK_BOUNDARY.  */
++  poly_int64 bytes_below_saved_regs;
++
+   /* The size of the callee-save registers with a slot in REG_OFFSET that
+      are saved below the hard frame pointer.  */
+   poly_int64 below_hard_fp_saved_regs_size;
+-- 
+2.34.1
+
+
+From 82f6b3e1b596ef0f4e3ac3bb9c6e88fb4458f402 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:14 +0100
+Subject: [PATCH 05/19] aarch64: Add bytes_below_hard_fp to frame info
+
+Following on from the previous bytes_below_saved_regs patch, this one
+records the number of bytes that are below the hard frame pointer.
+This eventually replaces below_hard_fp_saved_regs_size.
+
+If a frame pointer is not needed, the epilogue adds final_adjust
+to the stack pointer before restoring registers:
+
+     aarch64_add_sp (tmp1_rtx, tmp0_rtx, final_adjust, true);
+
+Therefore, if the epilogue needs to restore the stack pointer from
+the hard frame pointer, the directly corresponding offset is:
+
+     -bytes_below_hard_fp + final_adjust
+
+i.e. go from the hard frame pointer to the bottom of the frame,
+then add the same amount as if we were using the stack pointer
+from the outset.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::bytes_below_hard_fp): New
+	field.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize it.
+	(aarch64_expand_epilogue): Use it instead of
+	below_hard_fp_saved_regs_size.
+---
+ gcc/config/aarch64/aarch64.cc | 6 +++---
+ gcc/config/aarch64/aarch64.h  | 5 +++++
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index dacc2b0e4dd..a3f7aabcc59 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8530,6 +8530,7 @@ aarch64_layout_frame (void)
+      of the callee save area.  */
+   bool saves_below_hard_fp_p = maybe_ne (offset, 0);
+   frame.below_hard_fp_saved_regs_size = offset;
++  frame.bytes_below_hard_fp = offset + frame.bytes_below_saved_regs;
+   if (frame.emit_frame_chain)
+     {
+       /* FP and LR are placed in the linkage record.  */
+@@ -10171,8 +10172,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+   poly_int64 final_adjust = frame.final_adjust;
+   poly_int64 callee_offset = frame.callee_offset;
+   poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+-  poly_int64 below_hard_fp_saved_regs_size
+-    = frame.below_hard_fp_saved_regs_size;
++  poly_int64 bytes_below_hard_fp = frame.bytes_below_hard_fp;
+   unsigned reg1 = frame.wb_pop_candidate1;
+   unsigned reg2 = frame.wb_pop_candidate2;
+   unsigned int last_gpr = (frame.is_scs_enabled
+@@ -10230,7 +10230,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+        is restored on the instruction doing the writeback.  */
+     aarch64_add_offset (Pmode, stack_pointer_rtx,
+ 			hard_frame_pointer_rtx,
+-			-callee_offset - below_hard_fp_saved_regs_size,
++			-bytes_below_hard_fp + final_adjust,
+ 			tmp1_rtx, tmp0_rtx, callee_adjust == 0);
+   else
+      /* The case where we need to re-use the register here is very rare, so
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 0b6faa3ddf1..4263d29d29d 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -786,6 +786,11 @@ struct GTY (()) aarch64_frame
+      are saved below the hard frame pointer.  */
+   poly_int64 below_hard_fp_saved_regs_size;
+ 
++  /* The number of bytes between the bottom of the static frame (the bottom
++     of the outgoing arguments) and the hard frame pointer.  This value is
++     always a multiple of STACK_BOUNDARY.  */
++  poly_int64 bytes_below_hard_fp;
++
+   /* Offset from the base of the frame (incomming SP) to the
+      top of the locals area.  This value is always a multiple of
+      STACK_BOUNDARY.  */
+-- 
+2.34.1
+
+
+From 86fa43e9fe4a8bf954f2919f07cbe3646d1d1df3 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:14 +0100
+Subject: [PATCH 06/19] aarch64: Tweak aarch64_save/restore_callee_saves
+
+aarch64_save_callee_saves and aarch64_restore_callee_saves took
+a parameter called start_offset that gives the offset of the
+bottom of the saved register area from the current stack pointer.
+However, it's more convenient for later patches if we use the
+bottom of the entire frame as the reference point, rather than
+the bottom of the saved registers.
+
+Doing that removes the need for the callee_offset field.
+Other than that, this is not a win on its own.  It only really
+makes sense in combination with the follow-on patches.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::callee_offset): Delete.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Remove
+	callee_offset handling.
+	(aarch64_save_callee_saves): Replace the start_offset parameter
+	with a bytes_below_sp parameter.
+	(aarch64_restore_callee_saves): Likewise.
+	(aarch64_expand_prologue): Update accordingly.
+	(aarch64_expand_epilogue): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 56 +++++++++++++++++------------------
+ gcc/config/aarch64/aarch64.h  |  4 ---
+ 2 files changed, 28 insertions(+), 32 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index a3f7aabcc59..46ae5cf7673 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8604,7 +8604,6 @@ aarch64_layout_frame (void)
+   frame.final_adjust = 0;
+   frame.callee_adjust = 0;
+   frame.sve_callee_adjust = 0;
+-  frame.callee_offset = 0;
+ 
+   frame.wb_pop_candidate1 = frame.wb_push_candidate1;
+   frame.wb_pop_candidate2 = frame.wb_push_candidate2;
+@@ -8672,7 +8671,6 @@ aarch64_layout_frame (void)
+ 	 stp reg1, reg2, [sp, bytes_below_saved_regs]
+ 	 stp reg3, reg4, [sp, bytes_below_saved_regs + 16]  */
+       frame.initial_adjust = frame.frame_size;
+-      frame.callee_offset = const_below_saved_regs;
+     }
+   else if (saves_below_hard_fp_p
+ 	   && known_eq (frame.saved_regs_size,
+@@ -9073,12 +9071,13 @@ aarch64_add_cfa_expression (rtx_insn *insn, rtx reg,
+ }
+ 
+ /* Emit code to save the callee-saved registers from register number START
+-   to LIMIT to the stack at the location starting at offset START_OFFSET,
+-   skipping any write-back candidates if SKIP_WB is true.  HARD_FP_VALID_P
+-   is true if the hard frame pointer has been set up.  */
++   to LIMIT to the stack.  The stack pointer is currently BYTES_BELOW_SP
++   bytes above the bottom of the static frame.  Skip any write-back
++   candidates if SKIP_WB is true.  HARD_FP_VALID_P is true if the hard
++   frame pointer has been set up.  */
+ 
+ static void
+-aarch64_save_callee_saves (poly_int64 start_offset,
++aarch64_save_callee_saves (poly_int64 bytes_below_sp,
+ 			   unsigned start, unsigned limit, bool skip_wb,
+ 			   bool hard_fp_valid_p)
+ {
+@@ -9106,7 +9105,9 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = start_offset + frame.reg_offset[regno];
++      offset = (frame.reg_offset[regno]
++		+ frame.bytes_below_saved_regs
++		- bytes_below_sp);
+       rtx base_rtx = stack_pointer_rtx;
+       poly_int64 sp_offset = offset;
+ 
+@@ -9117,9 +9118,7 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+       else if (GP_REGNUM_P (regno)
+ 	       && (!offset.is_constant (&const_offset) || const_offset >= 512))
+ 	{
+-	  gcc_assert (known_eq (start_offset, 0));
+-	  poly_int64 fp_offset
+-	    = frame.below_hard_fp_saved_regs_size;
++	  poly_int64 fp_offset = frame.bytes_below_hard_fp - bytes_below_sp;
+ 	  if (hard_fp_valid_p)
+ 	    base_rtx = hard_frame_pointer_rtx;
+ 	  else
+@@ -9183,12 +9182,13 @@ aarch64_save_callee_saves (poly_int64 start_offset,
+ }
+ 
+ /* Emit code to restore the callee registers from register number START
+-   up to and including LIMIT.  Restore from the stack offset START_OFFSET,
+-   skipping any write-back candidates if SKIP_WB is true.  Write the
+-   appropriate REG_CFA_RESTORE notes into CFI_OPS.  */
++   up to and including LIMIT.  The stack pointer is currently BYTES_BELOW_SP
++   bytes above the bottom of the static frame.  Skip any write-back
++   candidates if SKIP_WB is true.  Write the appropriate REG_CFA_RESTORE
++   notes into CFI_OPS.  */
+ 
+ static void
+-aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
++aarch64_restore_callee_saves (poly_int64 bytes_below_sp, unsigned start,
+ 			      unsigned limit, bool skip_wb, rtx *cfi_ops)
+ {
+   aarch64_frame &frame = cfun->machine->frame;
+@@ -9214,7 +9214,9 @@ aarch64_restore_callee_saves (poly_int64 start_offset, unsigned start,
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = start_offset + frame.reg_offset[regno];
++      offset = (frame.reg_offset[regno]
++		+ frame.bytes_below_saved_regs
++		- bytes_below_sp);
+       rtx base_rtx = stack_pointer_rtx;
+       if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ 	aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9990,8 +9992,6 @@ aarch64_expand_prologue (void)
+   HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+   poly_int64 final_adjust = frame.final_adjust;
+   poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+-  poly_int64 below_hard_fp_saved_regs_size
+-    = frame.below_hard_fp_saved_regs_size;
+   unsigned reg1 = frame.wb_push_candidate1;
+   unsigned reg2 = frame.wb_push_candidate2;
+   bool emit_frame_chain = frame.emit_frame_chain;
+@@ -10067,8 +10067,8 @@ aarch64_expand_prologue (void)
+ 			     - frame.hard_fp_offset);
+   gcc_assert (known_ge (chain_offset, 0));
+ 
+-  /* The offset of the bottom of the save area from the current SP.  */
+-  poly_int64 saved_regs_offset = chain_offset - below_hard_fp_saved_regs_size;
++  /* The offset of the current SP from the bottom of the static frame.  */
++  poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust;
+ 
+   if (emit_frame_chain)
+     {
+@@ -10076,7 +10076,7 @@ aarch64_expand_prologue (void)
+ 	{
+ 	  reg1 = R29_REGNUM;
+ 	  reg2 = R30_REGNUM;
+-	  aarch64_save_callee_saves (saved_regs_offset, reg1, reg2,
++	  aarch64_save_callee_saves (bytes_below_sp, reg1, reg2,
+ 				     false, false);
+ 	}
+       else
+@@ -10116,7 +10116,7 @@ aarch64_expand_prologue (void)
+       emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+     }
+ 
+-  aarch64_save_callee_saves (saved_regs_offset, R0_REGNUM, R30_REGNUM,
++  aarch64_save_callee_saves (bytes_below_sp, R0_REGNUM, R30_REGNUM,
+ 			     callee_adjust != 0 || emit_frame_chain,
+ 			     emit_frame_chain);
+   if (maybe_ne (sve_callee_adjust, 0))
+@@ -10126,16 +10126,17 @@ aarch64_expand_prologue (void)
+       aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx,
+ 					      sve_callee_adjust,
+ 					      !frame_pointer_needed, false);
+-      saved_regs_offset += sve_callee_adjust;
++      bytes_below_sp -= sve_callee_adjust;
+     }
+-  aarch64_save_callee_saves (saved_regs_offset, P0_REGNUM, P15_REGNUM,
++  aarch64_save_callee_saves (bytes_below_sp, P0_REGNUM, P15_REGNUM,
+ 			     false, emit_frame_chain);
+-  aarch64_save_callee_saves (saved_regs_offset, V0_REGNUM, V31_REGNUM,
++  aarch64_save_callee_saves (bytes_below_sp, V0_REGNUM, V31_REGNUM,
+ 			     callee_adjust != 0 || emit_frame_chain,
+ 			     emit_frame_chain);
+ 
+   /* We may need to probe the final adjustment if it is larger than the guard
+      that is assumed by the called.  */
++  gcc_assert (known_eq (bytes_below_sp, final_adjust));
+   aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
+ 					  !frame_pointer_needed, true);
+ }
+@@ -10170,7 +10171,6 @@ aarch64_expand_epilogue (bool for_sibcall)
+   poly_int64 initial_adjust = frame.initial_adjust;
+   HOST_WIDE_INT callee_adjust = frame.callee_adjust;
+   poly_int64 final_adjust = frame.final_adjust;
+-  poly_int64 callee_offset = frame.callee_offset;
+   poly_int64 sve_callee_adjust = frame.sve_callee_adjust;
+   poly_int64 bytes_below_hard_fp = frame.bytes_below_hard_fp;
+   unsigned reg1 = frame.wb_pop_candidate1;
+@@ -10240,9 +10240,9 @@ aarch64_expand_epilogue (bool for_sibcall)
+ 
+   /* Restore the vector registers before the predicate registers,
+      so that we can use P4 as a temporary for big-endian SVE frames.  */
+-  aarch64_restore_callee_saves (callee_offset, V0_REGNUM, V31_REGNUM,
++  aarch64_restore_callee_saves (final_adjust, V0_REGNUM, V31_REGNUM,
+ 				callee_adjust != 0, &cfi_ops);
+-  aarch64_restore_callee_saves (callee_offset, P0_REGNUM, P15_REGNUM,
++  aarch64_restore_callee_saves (final_adjust, P0_REGNUM, P15_REGNUM,
+ 				false, &cfi_ops);
+   if (maybe_ne (sve_callee_adjust, 0))
+     aarch64_add_sp (NULL_RTX, NULL_RTX, sve_callee_adjust, true);
+@@ -10250,7 +10250,7 @@ aarch64_expand_epilogue (bool for_sibcall)
+   /* When shadow call stack is enabled, the scs_pop in the epilogue will
+      restore x30, we don't need to restore x30 again in the traditional
+      way.  */
+-  aarch64_restore_callee_saves (callee_offset - sve_callee_adjust,
++  aarch64_restore_callee_saves (final_adjust + sve_callee_adjust,
+ 				R0_REGNUM, last_gpr,
+ 				callee_adjust != 0, &cfi_ops);
+ 
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 4263d29d29d..fd820b1be4e 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -813,10 +813,6 @@ struct GTY (()) aarch64_frame
+      It is zero when no push is used.  */
+   HOST_WIDE_INT callee_adjust;
+ 
+-  /* The offset from SP to the callee-save registers after initial_adjust.
+-     It may be non-zero if no push is used (ie. callee_adjust == 0).  */
+-  poly_int64 callee_offset;
+-
+   /* The size of the stack adjustment before saving or after restoring
+      SVE registers.  */
+   poly_int64 sve_callee_adjust;
+-- 
+2.34.1
+
+
+From 8ae9181426f2700c2e5a2909487fa630e6fa406b Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:15 +0100
+Subject: [PATCH 07/19] aarch64: Only calculate chain_offset if there is a
+ chain
+
+After previous patches, it is no longer necessary to calculate
+a chain_offset in cases where there is no chain record.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_expand_prologue): Move the
+	calculation of chain_offset into the emit_frame_chain block.
+---
+ gcc/config/aarch64/aarch64.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 46ae5cf7673..0e9b9717c08 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -10062,16 +10062,16 @@ aarch64_expand_prologue (void)
+   if (callee_adjust != 0)
+     aarch64_push_regs (reg1, reg2, callee_adjust);
+ 
+-  /* The offset of the frame chain record (if any) from the current SP.  */
+-  poly_int64 chain_offset = (initial_adjust + callee_adjust
+-			     - frame.hard_fp_offset);
+-  gcc_assert (known_ge (chain_offset, 0));
+-
+   /* The offset of the current SP from the bottom of the static frame.  */
+   poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust;
+ 
+   if (emit_frame_chain)
+     {
++      /* The offset of the frame chain record (if any) from the current SP.  */
++      poly_int64 chain_offset = (initial_adjust + callee_adjust
++				 - frame.hard_fp_offset);
++      gcc_assert (known_ge (chain_offset, 0));
++
+       if (callee_adjust == 0)
+ 	{
+ 	  reg1 = R29_REGNUM;
+-- 
+2.34.1
+
+
+From 375794feb614cee1f41b710b9cc1b6f25da6c1cb Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:15 +0100
+Subject: [PATCH 08/19] aarch64: Rename locals_offset to bytes_above_locals
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+locals_offset was described as:
+
+  /* Offset from the base of the frame (incomming SP) to the
+     top of the locals area.  This value is always a multiple of
+     STACK_BOUNDARY.  */
+
+This is implicitly an “upside down” view of the frame: the incoming
+SP is at offset 0, and anything N bytes below the incoming SP is at
+offset N (rather than -N).
+
+However, reg_offset instead uses a “right way up” view; that is,
+it views offsets in address terms.  Something above X is at a
+positive offset from X and something below X is at a negative
+offset from X.
+
+Also, even on FRAME_GROWS_DOWNWARD targets like AArch64,
+target-independent code views offsets in address terms too:
+locals are allocated at negative offsets to virtual_stack_vars.
+
+It seems confusing to have *_offset fields of the same structure
+using different polarities like this.  This patch tries to avoid
+that by renaming locals_offset to bytes_above_locals.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::locals_offset): Rename to...
+	(aarch64_frame::bytes_above_locals): ...this.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame)
+	(aarch64_initial_elimination_offset): Update accordingly.
+---
+ gcc/config/aarch64/aarch64.cc | 6 +++---
+ gcc/config/aarch64/aarch64.h  | 6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 0e9b9717c08..0a22f91520e 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8598,7 +8598,7 @@ aarch64_layout_frame (void)
+ 			  STACK_BOUNDARY / BITS_PER_UNIT));
+   frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
+ 
+-  frame.locals_offset = frame.saved_varargs_size;
++  frame.bytes_above_locals = frame.saved_varargs_size;
+ 
+   frame.initial_adjust = 0;
+   frame.final_adjust = 0;
+@@ -12754,13 +12754,13 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+ 	return frame.hard_fp_offset;
+ 
+       if (from == FRAME_POINTER_REGNUM)
+-	return frame.hard_fp_offset - frame.locals_offset;
++	return frame.hard_fp_offset - frame.bytes_above_locals;
+     }
+ 
+   if (to == STACK_POINTER_REGNUM)
+     {
+       if (from == FRAME_POINTER_REGNUM)
+-	return frame.frame_size - frame.locals_offset;
++	return frame.frame_size - frame.bytes_above_locals;
+     }
+ 
+   return frame.frame_size;
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index fd820b1be4e..7ae12d13e2b 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -791,10 +791,10 @@ struct GTY (()) aarch64_frame
+      always a multiple of STACK_BOUNDARY.  */
+   poly_int64 bytes_below_hard_fp;
+ 
+-  /* Offset from the base of the frame (incomming SP) to the
+-     top of the locals area.  This value is always a multiple of
++  /* The number of bytes between the top of the locals area and the top
++     of the frame (the incomming SP).  This value is always a multiple of
+      STACK_BOUNDARY.  */
+-  poly_int64 locals_offset;
++  poly_int64 bytes_above_locals;
+ 
+   /* Offset from the base of the frame (incomming SP) to the
+      hard_frame_pointer.  This value is always a multiple of
+-- 
+2.34.1
+
+
+From 1a9ea1c45c75615ffbfabe652b3598a1d7be2168 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:16 +0100
+Subject: [PATCH 09/19] aarch64: Rename hard_fp_offset to bytes_above_hard_fp
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Similarly to the previous locals_offset patch, hard_fp_offset
+was described as:
+
+  /* Offset from the base of the frame (incomming SP) to the
+     hard_frame_pointer.  This value is always a multiple of
+     STACK_BOUNDARY.  */
+  poly_int64 hard_fp_offset;
+
+which again took an “upside-down” view: higher offsets meant lower
+addresses.  This patch renames the field to bytes_above_hard_fp instead.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::hard_fp_offset): Rename
+	to...
+	(aarch64_frame::bytes_above_hard_fp): ...this.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame)
+	(aarch64_expand_prologue): Update accordingly.
+	(aarch64_initial_elimination_offset): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 26 +++++++++++++-------------
+ gcc/config/aarch64/aarch64.h  |  6 +++---
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 0a22f91520e..95499ae49ba 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8590,7 +8590,7 @@ aarch64_layout_frame (void)
+ 			   + get_frame_size (),
+ 			   STACK_BOUNDARY / BITS_PER_UNIT);
+ 
+-  frame.hard_fp_offset
++  frame.bytes_above_hard_fp
+     = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
+ 
+   /* Both these values are already aligned.  */
+@@ -8639,13 +8639,13 @@ aarch64_layout_frame (void)
+   else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+     max_push_offset = 256;
+ 
+-  HOST_WIDE_INT const_size, const_below_saved_regs, const_fp_offset;
++  HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+   HOST_WIDE_INT const_saved_regs_size;
+   if (known_eq (frame.saved_regs_size, 0))
+     frame.initial_adjust = frame.frame_size;
+   else if (frame.frame_size.is_constant (&const_size)
+ 	   && const_size < max_push_offset
+-	   && known_eq (frame.hard_fp_offset, const_size))
++	   && known_eq (frame.bytes_above_hard_fp, const_size))
+     {
+       /* Simple, small frame with no data below the saved registers.
+ 
+@@ -8662,8 +8662,8 @@ aarch64_layout_frame (void)
+ 	      case that it hardly seems worth the effort though.  */
+ 	   && (!saves_below_hard_fp_p || const_below_saved_regs == 0)
+ 	   && !(cfun->calls_alloca
+-		&& frame.hard_fp_offset.is_constant (&const_fp_offset)
+-		&& const_fp_offset < max_push_offset))
++		&& frame.bytes_above_hard_fp.is_constant (&const_above_fp)
++		&& const_above_fp < max_push_offset))
+     {
+       /* Frame with small area below the saved registers:
+ 
+@@ -8681,12 +8681,12 @@ aarch64_layout_frame (void)
+ 	 sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
+ 	 save SVE registers relative to SP
+ 	 sub sp, sp, bytes_below_saved_regs  */
+-      frame.initial_adjust = (frame.hard_fp_offset
++      frame.initial_adjust = (frame.bytes_above_hard_fp
+ 			      + frame.below_hard_fp_saved_regs_size);
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+-  else if (frame.hard_fp_offset.is_constant (&const_fp_offset)
+-	   && const_fp_offset < max_push_offset)
++  else if (frame.bytes_above_hard_fp.is_constant (&const_above_fp)
++	   && const_above_fp < max_push_offset)
+     {
+       /* Frame with large area below the saved registers, or with SVE saves,
+ 	 but with a small area above:
+@@ -8696,7 +8696,7 @@ aarch64_layout_frame (void)
+ 	 [sub sp, sp, below_hard_fp_saved_regs_size]
+ 	 [save SVE registers relative to SP]
+ 	 sub sp, sp, bytes_below_saved_regs  */
+-      frame.callee_adjust = const_fp_offset;
++      frame.callee_adjust = const_above_fp;
+       frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+@@ -8711,7 +8711,7 @@ aarch64_layout_frame (void)
+ 	 [sub sp, sp, below_hard_fp_saved_regs_size]
+ 	 [save SVE registers relative to SP]
+ 	 sub sp, sp, bytes_below_saved_regs  */
+-      frame.initial_adjust = frame.hard_fp_offset;
++      frame.initial_adjust = frame.bytes_above_hard_fp;
+       frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+@@ -10069,7 +10069,7 @@ aarch64_expand_prologue (void)
+     {
+       /* The offset of the frame chain record (if any) from the current SP.  */
+       poly_int64 chain_offset = (initial_adjust + callee_adjust
+-				 - frame.hard_fp_offset);
++				 - frame.bytes_above_hard_fp);
+       gcc_assert (known_ge (chain_offset, 0));
+ 
+       if (callee_adjust == 0)
+@@ -12751,10 +12751,10 @@ aarch64_initial_elimination_offset (unsigned from, unsigned to)
+   if (to == HARD_FRAME_POINTER_REGNUM)
+     {
+       if (from == ARG_POINTER_REGNUM)
+-	return frame.hard_fp_offset;
++	return frame.bytes_above_hard_fp;
+ 
+       if (from == FRAME_POINTER_REGNUM)
+-	return frame.hard_fp_offset - frame.bytes_above_locals;
++	return frame.bytes_above_hard_fp - frame.bytes_above_locals;
+     }
+ 
+   if (to == STACK_POINTER_REGNUM)
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 7ae12d13e2b..3808f49e9ca 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -796,10 +796,10 @@ struct GTY (()) aarch64_frame
+      STACK_BOUNDARY.  */
+   poly_int64 bytes_above_locals;
+ 
+-  /* Offset from the base of the frame (incomming SP) to the
+-     hard_frame_pointer.  This value is always a multiple of
++  /* The number of bytes between the hard_frame_pointer and the top of
++     the frame (the incomming SP).  This value is always a multiple of
+      STACK_BOUNDARY.  */
+-  poly_int64 hard_fp_offset;
++  poly_int64 bytes_above_hard_fp;
+ 
+   /* The size of the frame.  This value is the offset from base of the
+      frame (incomming SP) to the stack_pointer.  This value is always
+-- 
+2.34.1
+
+
+From d202ce1ecf60a36a3e1009917dd76109248ce9be Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:16 +0100
+Subject: [PATCH 10/19] aarch64: Tweak frame_size comment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch fixes another case in which a value was described with
+an “upside-down” view.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::frame_size): Tweak comment.
+---
+ gcc/config/aarch64/aarch64.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 3808f49e9ca..108a5731b0d 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -801,8 +801,8 @@ struct GTY (()) aarch64_frame
+      STACK_BOUNDARY.  */
+   poly_int64 bytes_above_hard_fp;
+ 
+-  /* The size of the frame.  This value is the offset from base of the
+-     frame (incomming SP) to the stack_pointer.  This value is always
++  /* The size of the frame, i.e. the number of bytes between the bottom
++     of the outgoing arguments and the incoming SP.  This value is always
+      a multiple of STACK_BOUNDARY.  */
+   poly_int64 frame_size;
+ 
+-- 
+2.34.1
+
+
+From f2b585375205b0a1802d79c682ba33766ecd1f0f Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:17 +0100
+Subject: [PATCH 11/19] aarch64: Measure reg_offset from the bottom of the
+ frame
+
+reg_offset was measured from the bottom of the saved register area.
+This made perfect sense with the original layout, since the bottom
+of the saved register area was also the hard frame pointer address.
+It became slightly less obvious with SVE, since we save SVE
+registers below the hard frame pointer, but it still made sense.
+
+However, if we want to allow different frame layouts, it's more
+convenient and obvious to measure reg_offset from the bottom of
+the frame.  After previous patches, it's also a slight simplification
+in its own right.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame): Add comment above
+	reg_offset.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Walk offsets
+	from the bottom of the frame, rather than the bottom of the saved
+	register area.  Measure reg_offset from the bottom of the frame
+	rather than the bottom of the saved register area.
+	(aarch64_save_callee_saves): Update accordingly.
+	(aarch64_restore_callee_saves): Likewise.
+	(aarch64_get_separate_components): Likewise.
+	(aarch64_process_components): Likewise.
+---
+ gcc/config/aarch64/aarch64.cc | 53 ++++++++++++++++-------------------
+ gcc/config/aarch64/aarch64.h  |  3 ++
+ 2 files changed, 27 insertions(+), 29 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 95499ae49ba..af99807ef8a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8400,7 +8400,6 @@ aarch64_needs_frame_chain (void)
+ static void
+ aarch64_layout_frame (void)
+ {
+-  poly_int64 offset = 0;
+   int regno, last_fp_reg = INVALID_REGNUM;
+   machine_mode vector_save_mode = aarch64_reg_save_mode (V8_REGNUM);
+   poly_int64 vector_save_size = GET_MODE_SIZE (vector_save_mode);
+@@ -8478,7 +8477,9 @@ aarch64_layout_frame (void)
+   gcc_assert (crtl->is_leaf
+ 	      || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+ 
+-  frame.bytes_below_saved_regs = crtl->outgoing_args_size;
++  poly_int64 offset = crtl->outgoing_args_size;
++  gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++  frame.bytes_below_saved_regs = offset;
+ 
+   /* Now assign stack slots for the registers.  Start with the predicate
+      registers, since predicate LDR and STR have a relatively small
+@@ -8490,7 +8491,8 @@ aarch64_layout_frame (void)
+ 	offset += BYTES_PER_SVE_PRED;
+       }
+ 
+-  if (maybe_ne (offset, 0))
++  poly_int64 saved_prs_size = offset - frame.bytes_below_saved_regs;
++  if (maybe_ne (saved_prs_size, 0))
+     {
+       /* If we have any vector registers to save above the predicate registers,
+ 	 the offset of the vector register save slots need to be a multiple
+@@ -8508,10 +8510,10 @@ aarch64_layout_frame (void)
+ 	offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+       else
+ 	{
+-	  if (known_le (offset, vector_save_size))
+-	    offset = vector_save_size;
+-	  else if (known_le (offset, vector_save_size * 2))
+-	    offset = vector_save_size * 2;
++	  if (known_le (saved_prs_size, vector_save_size))
++	    offset = frame.bytes_below_saved_regs + vector_save_size;
++	  else if (known_le (saved_prs_size, vector_save_size * 2))
++	    offset = frame.bytes_below_saved_regs + vector_save_size * 2;
+ 	  else
+ 	    gcc_unreachable ();
+ 	}
+@@ -8528,9 +8530,10 @@ aarch64_layout_frame (void)
+ 
+   /* OFFSET is now the offset of the hard frame pointer from the bottom
+      of the callee save area.  */
+-  bool saves_below_hard_fp_p = maybe_ne (offset, 0);
+-  frame.below_hard_fp_saved_regs_size = offset;
+-  frame.bytes_below_hard_fp = offset + frame.bytes_below_saved_regs;
++  frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
++  bool saves_below_hard_fp_p
++    = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++  frame.bytes_below_hard_fp = offset;
+   if (frame.emit_frame_chain)
+     {
+       /* FP and LR are placed in the linkage record.  */
+@@ -8581,9 +8584,10 @@ aarch64_layout_frame (void)
+ 
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+ 
+-  frame.saved_regs_size = offset;
++  frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+ 
+-  poly_int64 varargs_and_saved_regs_size = offset + frame.saved_varargs_size;
++  poly_int64 varargs_and_saved_regs_size
++    = frame.saved_regs_size + frame.saved_varargs_size;
+ 
+   poly_int64 saved_regs_and_above
+     = aligned_upper_bound (varargs_and_saved_regs_size
+@@ -9105,9 +9109,7 @@ aarch64_save_callee_saves (poly_int64 bytes_below_sp,
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = (frame.reg_offset[regno]
+-		+ frame.bytes_below_saved_regs
+-		- bytes_below_sp);
++      offset = frame.reg_offset[regno] - bytes_below_sp;
+       rtx base_rtx = stack_pointer_rtx;
+       poly_int64 sp_offset = offset;
+ 
+@@ -9214,9 +9216,7 @@ aarch64_restore_callee_saves (poly_int64 bytes_below_sp, unsigned start,
+ 
+       machine_mode mode = aarch64_reg_save_mode (regno);
+       reg = gen_rtx_REG (mode, regno);
+-      offset = (frame.reg_offset[regno]
+-		+ frame.bytes_below_saved_regs
+-		- bytes_below_sp);
++      offset = frame.reg_offset[regno] - bytes_below_sp;
+       rtx base_rtx = stack_pointer_rtx;
+       if (mode == VNx2DImode && BYTES_BIG_ENDIAN)
+ 	aarch64_adjust_sve_callee_save_base (mode, base_rtx, anchor_reg,
+@@ -9355,14 +9355,12 @@ aarch64_get_separate_components (void)
+ 	   it as a stack probe for -fstack-clash-protection.  */
+ 	if (flag_stack_clash_protection
+ 	    && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+-	    && known_eq (offset, 0))
++	    && known_eq (offset, frame.bytes_below_saved_regs))
+ 	  continue;
+ 
+ 	/* Get the offset relative to the register we'll use.  */
+ 	if (frame_pointer_needed)
+-	  offset -= frame.below_hard_fp_saved_regs_size;
+-	else
+-	  offset += frame.bytes_below_saved_regs;
++	  offset -= frame.bytes_below_hard_fp;
+ 
+ 	/* Check that we can access the stack slot of the register with one
+ 	   direct load with no adjustments needed.  */
+@@ -9509,9 +9507,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       rtx reg = gen_rtx_REG (mode, regno);
+       poly_int64 offset = frame.reg_offset[regno];
+       if (frame_pointer_needed)
+-	offset -= frame.below_hard_fp_saved_regs_size;
+-      else
+-	offset += frame.bytes_below_saved_regs;
++	offset -= frame.bytes_below_hard_fp;
+ 
+       rtx addr = plus_constant (Pmode, ptr_reg, offset);
+       rtx mem = gen_frame_mem (mode, addr);
+@@ -9563,9 +9559,7 @@ aarch64_process_components (sbitmap components, bool prologue_p)
+       /* REGNO2 can be saved/restored in a pair with REGNO.  */
+       rtx reg2 = gen_rtx_REG (mode, regno2);
+       if (frame_pointer_needed)
+-	offset2 -= frame.below_hard_fp_saved_regs_size;
+-      else
+-	offset2 += frame.bytes_below_saved_regs;
++	offset2 -= frame.bytes_below_hard_fp;
+       rtx addr2 = plus_constant (Pmode, ptr_reg, offset2);
+       rtx mem2 = gen_frame_mem (mode, addr2);
+       rtx set2 = prologue_p ? gen_rtx_SET (mem2, reg2)
+@@ -9681,7 +9675,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+   if (final_adjustment_p
+       && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+     {
+-      poly_int64 lr_offset = frame.reg_offset[LR_REGNUM];
++      poly_int64 lr_offset = (frame.reg_offset[LR_REGNUM]
++			      - frame.bytes_below_saved_regs);
+       if (known_ge (lr_offset, 0))
+ 	min_probe_threshold -= lr_offset.to_constant ();
+       else
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index 108a5731b0d..c8becb098c8 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -766,6 +766,9 @@ extern enum aarch64_processor aarch64_tune;
+ #ifdef HAVE_POLY_INT_H
+ struct GTY (()) aarch64_frame
+ {
++  /* The offset from the bottom of the static frame (the bottom of the
++     outgoing arguments) of each register save slot, or -2 if no save is
++     needed.  */
+   poly_int64 reg_offset[LAST_SAVED_REGNUM + 1];
+ 
+   /* The number of extra stack bytes taken up by register varargs.
+-- 
+2.34.1
+
+
+From 79faabda181d0d9fd29a3cf5726ba65bdee945b5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:17 +0100
+Subject: [PATCH 12/19] aarch64: Simplify top of frame allocation
+
+After previous patches, it no longer really makes sense to allocate
+the top of the frame in terms of varargs_and_saved_regs_size and
+saved_regs_and_above.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Simplify
+	the allocation of the top of the frame.
+---
+ gcc/config/aarch64/aarch64.cc | 23 ++++++++---------------
+ 1 file changed, 8 insertions(+), 15 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index af99807ef8a..31b00094c2a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8586,23 +8586,16 @@ aarch64_layout_frame (void)
+ 
+   frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+ 
+-  poly_int64 varargs_and_saved_regs_size
+-    = frame.saved_regs_size + frame.saved_varargs_size;
+-
+-  poly_int64 saved_regs_and_above
+-    = aligned_upper_bound (varargs_and_saved_regs_size
+-			   + get_frame_size (),
+-			   STACK_BOUNDARY / BITS_PER_UNIT);
+-
+-  frame.bytes_above_hard_fp
+-    = saved_regs_and_above - frame.below_hard_fp_saved_regs_size;
++  offset += get_frame_size ();
++  offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++  auto top_of_locals = offset;
+ 
+-  /* Both these values are already aligned.  */
+-  gcc_assert (multiple_p (frame.bytes_below_saved_regs,
+-			  STACK_BOUNDARY / BITS_PER_UNIT));
+-  frame.frame_size = saved_regs_and_above + frame.bytes_below_saved_regs;
++  offset += frame.saved_varargs_size;
++  gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++  frame.frame_size = offset;
+ 
+-  frame.bytes_above_locals = frame.saved_varargs_size;
++  frame.bytes_above_hard_fp = frame.frame_size - frame.bytes_below_hard_fp;
++  frame.bytes_above_locals = frame.frame_size - top_of_locals;
+ 
+   frame.initial_adjust = 0;
+   frame.final_adjust = 0;
+-- 
+2.34.1
+
+
+From 4e62049e403b141e6f916176160dac8cbd65fe47 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:18 +0100
+Subject: [PATCH 13/19] aarch64: Minor initial adjustment tweak
+
+This patch just changes a calculation of initial_adjust
+to one that makes it slightly more obvious that the total
+adjustment is frame.frame_size.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Tweak
+	calculation of initial_adjust for frames in which all saves
+	are SVE saves.
+---
+ gcc/config/aarch64/aarch64.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 31b00094c2a..1aa79da0673 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8675,11 +8675,10 @@ aarch64_layout_frame (void)
+     {
+       /* Frame in which all saves are SVE saves:
+ 
+-	 sub sp, sp, hard_fp_offset + below_hard_fp_saved_regs_size
++	 sub sp, sp, frame_size - bytes_below_saved_regs
+ 	 save SVE registers relative to SP
+ 	 sub sp, sp, bytes_below_saved_regs  */
+-      frame.initial_adjust = (frame.bytes_above_hard_fp
+-			      + frame.below_hard_fp_saved_regs_size);
++      frame.initial_adjust = frame.frame_size - frame.bytes_below_saved_regs;
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+   else if (frame.bytes_above_hard_fp.is_constant (&const_above_fp)
+-- 
+2.34.1
+
+
+From aaa1a0a5912d9e5d571e5f1c6f09ceac99544ab5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:18 +0100
+Subject: [PATCH 14/19] aarch64: Tweak stack clash boundary condition
+
+The AArch64 ABI says that, when stack clash protection is used,
+there can be a maximum of 1KiB of unprobed space at sp on entry
+to a function.  Therefore, we need to probe when allocating
+>= guard_size - 1KiB of data (>= rather than >).  This is what
+GCC does.
+
+If an allocation is exactly guard_size bytes, it is enough to allocate
+those bytes and probe once at offset 1024.  It isn't possible to use a
+single probe at any other offset: higher would conmplicate later code,
+by leaving more unprobed space than usual, while lower would risk
+leaving an entire page unprobed.  For simplicity, the code probes all
+allocations at offset 1024.
+
+Some register saves also act as probes.  If we need to allocate
+more space below the last such register save probe, we need to
+probe the allocation if it is > 1KiB.  Again, this allocation is
+then sometimes (but not always) probed at offset 1024.  This sort of
+allocation is currently only used for outgoing arguments, which are
+rarely this big.
+
+However, the code also probed if this final outgoing-arguments
+allocation was == 1KiB, rather than just > 1KiB.  This isn't
+necessary, since the register save then probes at offset 1024
+as required.  Continuing to probe allocations of exactly 1KiB
+would complicate later patches.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space):
+	Don't probe final allocations that are exactly 1KiB in size (after
+	unprobed space above the final allocation has been deducted).
+
+gcc/testsuite/
+	* gcc.target/aarch64/stack-check-prologue-17.c: New test.
+---
+ gcc/config/aarch64/aarch64.cc                 |  4 +-
+ .../aarch64/stack-check-prologue-17.c         | 55 +++++++++++++++++++
+ 2 files changed, 58 insertions(+), 1 deletion(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 1aa79da0673..5cad847977a 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9648,9 +9648,11 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+   HOST_WIDE_INT guard_size
+     = 1 << param_stack_clash_protection_guard_size;
+   HOST_WIDE_INT guard_used_by_caller = STACK_CLASH_CALLER_GUARD;
++  HOST_WIDE_INT byte_sp_alignment = STACK_BOUNDARY / BITS_PER_UNIT;
++  gcc_assert (multiple_p (poly_size, byte_sp_alignment));
+   HOST_WIDE_INT min_probe_threshold
+     = (final_adjustment_p
+-       ? guard_used_by_caller
++       ? guard_used_by_caller + byte_sp_alignment
+        : guard_size - guard_used_by_caller);
+   /* When doing the final adjustment for the outgoing arguments, take into
+      account any unprobed space there is above the current SP.  There are
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+new file mode 100644
+index 00000000000..0d8a25d73a2
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+@@ -0,0 +1,55 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1024
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test1(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++    }
++  g();
++  return 1;
++}
++
++/*
++** test2:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1040
++**	str	xzr, \[sp\]
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test2(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x);
++    }
++  g();
++  return 1;
++}
+-- 
+2.34.1
+
+
+From 8433953434a7b58c0923140d39eb3c5988c1d097 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:19 +0100
+Subject: [PATCH 15/19] aarch64: Put LR save probe in first 16 bytes
+
+-fstack-clash-protection uses the save of LR as a probe for the next
+allocation.  The next allocation could be:
+
+* another part of the static frame, e.g. when allocating SVE save slots
+  or outgoing arguments
+
+* an alloca in the same function
+
+* an allocation made by a callee function
+
+However, when -fomit-frame-pointer is used, the LR save slot is placed
+above the other GPR save slots.  It could therefore be up to 80 bytes
+above the base of the GPR save area (which is also the hard fp address).
+
+aarch64_allocate_and_probe_stack_space took this into account when
+deciding how much subsequent space could be allocated without needing
+a probe.  However, it interacted badly with:
+
+      /* If doing a small final adjustment, we always probe at offset 0.
+	 This is done to avoid issues when LR is not at position 0 or when
+	 the final adjustment is smaller than the probing offset.  */
+      else if (final_adjustment_p && rounded_size == 0)
+	residual_probe_offset = 0;
+
+which forces any allocation that is smaller than the guard page size
+to be probed at offset 0 rather than the usual offset 1024.  It was
+therefore possible to construct cases in which we had:
+
+* a probe using LR at SP + 80 bytes (or some other value >= 16)
+* an allocation of the guard page size - 16 bytes
+* a probe at SP + 0
+
+which allocates guard page size + 64 consecutive unprobed bytes.
+
+This patch requires the LR probe to be in the first 16 bytes of the
+save area when stack clash protection is active.  Doing it
+unconditionally would cause code-quality regressions.
+
+Putting LR before other registers prevents push/pop allocation
+when shadow call stacks are enabled, since LR is restored
+separately from the other callee-saved registers.
+
+The new comment doesn't say that the probe register is required
+to be LR, since a later patch removes that restriction.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Ensure that
+	the LR save slot is in the first 16 bytes of the register save area.
+	Only form STP/LDP push/pop candidates if both registers are valid.
+	(aarch64_allocate_and_probe_stack_space): Remove workaround for
+	when LR was not in the first 16 bytes.
+
+gcc/testsuite/
+	* gcc.target/aarch64/stack-check-prologue-18.c: New test.
+	* gcc.target/aarch64/stack-check-prologue-19.c: Likewise.
+	* gcc.target/aarch64/stack-check-prologue-20.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc                 |  72 ++++++-------
+ .../aarch64/stack-check-prologue-18.c         | 100 ++++++++++++++++++
+ .../aarch64/stack-check-prologue-19.c         | 100 ++++++++++++++++++
+ .../aarch64/stack-check-prologue-20.c         |   3 +
+ 4 files changed, 233 insertions(+), 42 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 5cad847977a..a765f92329d 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8534,26 +8534,34 @@ aarch64_layout_frame (void)
+   bool saves_below_hard_fp_p
+     = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
+   frame.bytes_below_hard_fp = offset;
++
++  auto allocate_gpr_slot = [&](unsigned int regno)
++    {
++      frame.reg_offset[regno] = offset;
++      if (frame.wb_push_candidate1 == INVALID_REGNUM)
++	frame.wb_push_candidate1 = regno;
++      else if (frame.wb_push_candidate2 == INVALID_REGNUM)
++	frame.wb_push_candidate2 = regno;
++      offset += UNITS_PER_WORD;
++    };
++
+   if (frame.emit_frame_chain)
+     {
+       /* FP and LR are placed in the linkage record.  */
+-      frame.reg_offset[R29_REGNUM] = offset;
+-      frame.wb_push_candidate1 = R29_REGNUM;
+-      frame.reg_offset[R30_REGNUM] = offset + UNITS_PER_WORD;
+-      frame.wb_push_candidate2 = R30_REGNUM;
+-      offset += 2 * UNITS_PER_WORD;
++      allocate_gpr_slot (R29_REGNUM);
++      allocate_gpr_slot (R30_REGNUM);
+     }
++  else if (flag_stack_clash_protection
++	   && known_eq (frame.reg_offset[R30_REGNUM], SLOT_REQUIRED))
++    /* Put the LR save slot first, since it makes a good choice of probe
++       for stack clash purposes.  The idea is that the link register usually
++       has to be saved before a call anyway, and so we lose little by
++       stopping it from being individually shrink-wrapped.  */
++    allocate_gpr_slot (R30_REGNUM);
+ 
+   for (regno = R0_REGNUM; regno <= R30_REGNUM; regno++)
+     if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+-      {
+-	frame.reg_offset[regno] = offset;
+-	if (frame.wb_push_candidate1 == INVALID_REGNUM)
+-	  frame.wb_push_candidate1 = regno;
+-	else if (frame.wb_push_candidate2 == INVALID_REGNUM)
+-	  frame.wb_push_candidate2 = regno;
+-	offset += UNITS_PER_WORD;
+-      }
++      allocate_gpr_slot (regno);
+ 
+   poly_int64 max_int_offset = offset;
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8631,10 +8639,13 @@ aarch64_layout_frame (void)
+      max_push_offset to 0, because no registers are popped at this time,
+      so callee_adjust cannot be adjusted.  */
+   HOST_WIDE_INT max_push_offset = 0;
+-  if (frame.wb_pop_candidate2 != INVALID_REGNUM)
+-    max_push_offset = 512;
+-  else if (frame.wb_pop_candidate1 != INVALID_REGNUM)
+-    max_push_offset = 256;
++  if (frame.wb_pop_candidate1 != INVALID_REGNUM)
++    {
++      if (frame.wb_pop_candidate2 != INVALID_REGNUM)
++	max_push_offset = 512;
++      else
++	max_push_offset = 256;
++    }
+ 
+   HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+   HOST_WIDE_INT const_saved_regs_size;
+@@ -9654,29 +9665,6 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+     = (final_adjustment_p
+        ? guard_used_by_caller + byte_sp_alignment
+        : guard_size - guard_used_by_caller);
+-  /* When doing the final adjustment for the outgoing arguments, take into
+-     account any unprobed space there is above the current SP.  There are
+-     two cases:
+-
+-     - When saving SVE registers below the hard frame pointer, we force
+-       the lowest save to take place in the prologue before doing the final
+-       adjustment (i.e. we don't allow the save to be shrink-wrapped).
+-       This acts as a probe at SP, so there is no unprobed space.
+-
+-     - When there are no SVE register saves, we use the store of the link
+-       register as a probe.  We can't assume that LR was saved at position 0
+-       though, so treat any space below it as unprobed.  */
+-  if (final_adjustment_p
+-      && known_eq (frame.below_hard_fp_saved_regs_size, 0))
+-    {
+-      poly_int64 lr_offset = (frame.reg_offset[LR_REGNUM]
+-			      - frame.bytes_below_saved_regs);
+-      if (known_ge (lr_offset, 0))
+-	min_probe_threshold -= lr_offset.to_constant ();
+-      else
+-	gcc_assert (!flag_stack_clash_protection || known_eq (poly_size, 0));
+-    }
+-
+   poly_int64 frame_size = frame.frame_size;
+ 
+   /* We should always have a positive probe threshold.  */
+@@ -9856,8 +9844,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+       if (final_adjustment_p && rounded_size != 0)
+ 	min_probe_threshold = 0;
+       /* If doing a small final adjustment, we always probe at offset 0.
+-	 This is done to avoid issues when LR is not at position 0 or when
+-	 the final adjustment is smaller than the probing offset.  */
++	 This is done to avoid issues when the final adjustment is smaller
++	 than the probing offset.  */
+       else if (final_adjustment_p && rounded_size == 0)
+ 	residual_probe_offset = 0;
+ 
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+new file mode 100644
+index 00000000000..82447d20fff
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+@@ -0,0 +1,100 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #4064
++**	str	xzr, \[sp\]
++**	cbnz	w0, .*
++**	bl	g
++**	...
++**	str	x26, \[sp, #?4128\]
++**	...
++*/
++int test1(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++    }
++  g();
++  return 1;
++}
++
++/*
++** test2:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1040
++**	str	xzr, \[sp\]
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test2(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x);
++    }
++  g();
++  return 1;
++}
++
++/*
++** test3:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1024
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test3(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++    }
++  g();
++  return 1;
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+new file mode 100644
+index 00000000000..73ac3e4e4eb
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+@@ -0,0 +1,100 @@
++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fsanitize=shadow-call-stack -ffixed-x18" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void f(int, ...);
++void g();
++
++/*
++** test1:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #4064
++**	str	xzr, \[sp\]
++**	cbnz	w0, .*
++**	bl	g
++**	...
++**	str	x26, \[sp, #?4128\]
++**	...
++*/
++int test1(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++    }
++  g();
++  return 1;
++}
++
++/*
++** test2:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1040
++**	str	xzr, \[sp\]
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test2(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x);
++    }
++  g();
++  return 1;
++}
++
++/*
++** test3:
++**	...
++**	str	x30, \[sp\]
++**	sub	sp, sp, #1024
++**	cbnz	w0, .*
++**	bl	g
++**	...
++*/
++int test3(int z) {
++  __uint128_t x = 0;
++  int y[0x400];
++  if (z)
++    {
++      asm volatile ("" :::
++		    "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26");
++      f(0, 0, 0, 0, 0, 0, 0, &y,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x,
++	x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
++    }
++  g();
++  return 1;
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+new file mode 100644
+index 00000000000..690aae8dfd5
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-20.c
+@@ -0,0 +1,3 @@
++/* { dg-options "-O2 -fstack-protector-all -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fsanitize=shadow-call-stack -ffixed-x18" } */
++
++#include "stack-check-prologue-19.c"
+-- 
+2.34.1
+
+
+From eea1759073e09dd1aefbc9a881601ab1eebfdd18 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:19 +0100
+Subject: [PATCH 16/19] aarch64: Simplify probe of final frame allocation
+
+Previous patches ensured that the final frame allocation only needs
+a probe when the size is strictly greater than 1KiB.  It's therefore
+safe to use the normal 1024 probe offset in all cases.
+
+The main motivation for doing this is to simplify the code and
+remove the number of special cases.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space):
+	Always probe the residual allocation at offset 1024, asserting
+	that that is in range.
+
+gcc/testsuite/
+	* gcc.target/aarch64/stack-check-prologue-17.c: Expect the probe
+	to be at offset 1024 rather than offset 0.
+	* gcc.target/aarch64/stack-check-prologue-18.c: Likewise.
+	* gcc.target/aarch64/stack-check-prologue-19.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc                        | 12 ++++--------
+ .../gcc.target/aarch64/stack-check-prologue-17.c     |  2 +-
+ .../gcc.target/aarch64/stack-check-prologue-18.c     |  4 ++--
+ .../gcc.target/aarch64/stack-check-prologue-19.c     |  4 ++--
+ 4 files changed, 9 insertions(+), 13 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index a765f92329d..37809a306f7 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -9838,16 +9838,12 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+      are still safe.  */
+   if (residual)
+     {
+-      HOST_WIDE_INT residual_probe_offset = guard_used_by_caller;
++      gcc_assert (guard_used_by_caller + byte_sp_alignment <= size);
++
+       /* If we're doing final adjustments, and we've done any full page
+ 	 allocations then any residual needs to be probed.  */
+       if (final_adjustment_p && rounded_size != 0)
+ 	min_probe_threshold = 0;
+-      /* If doing a small final adjustment, we always probe at offset 0.
+-	 This is done to avoid issues when the final adjustment is smaller
+-	 than the probing offset.  */
+-      else if (final_adjustment_p && rounded_size == 0)
+-	residual_probe_offset = 0;
+ 
+       aarch64_sub_sp (temp1, temp2, residual, frame_related_p);
+       if (residual >= min_probe_threshold)
+@@ -9858,8 +9854,8 @@ aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2,
+ 		     HOST_WIDE_INT_PRINT_DEC " bytes, probing will be required."
+ 		     "\n", residual);
+ 
+-	    emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
+-					     residual_probe_offset));
++	  emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
++					   guard_used_by_caller));
+ 	  emit_insn (gen_blockage ());
+ 	}
+     }
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+index 0d8a25d73a2..f0ec1389771 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
+@@ -33,7 +33,7 @@ int test1(int z) {
+ **	...
+ **	str	x30, \[sp\]
+ **	sub	sp, sp, #1040
+-**	str	xzr, \[sp\]
++**	str	xzr, \[sp, #?1024\]
+ **	cbnz	w0, .*
+ **	bl	g
+ **	...
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+index 82447d20fff..6383bec5ebc 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
+@@ -9,7 +9,7 @@ void g();
+ **	...
+ **	str	x30, \[sp\]
+ **	sub	sp, sp, #4064
+-**	str	xzr, \[sp\]
++**	str	xzr, \[sp, #?1024\]
+ **	cbnz	w0, .*
+ **	bl	g
+ **	...
+@@ -50,7 +50,7 @@ int test1(int z) {
+ **	...
+ **	str	x30, \[sp\]
+ **	sub	sp, sp, #1040
+-**	str	xzr, \[sp\]
++**	str	xzr, \[sp, #?1024\]
+ **	cbnz	w0, .*
+ **	bl	g
+ **	...
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+index 73ac3e4e4eb..562039b5e9b 100644
+--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-19.c
+@@ -9,7 +9,7 @@ void g();
+ **	...
+ **	str	x30, \[sp\]
+ **	sub	sp, sp, #4064
+-**	str	xzr, \[sp\]
++**	str	xzr, \[sp, #?1024\]
+ **	cbnz	w0, .*
+ **	bl	g
+ **	...
+@@ -50,7 +50,7 @@ int test1(int z) {
+ **	...
+ **	str	x30, \[sp\]
+ **	sub	sp, sp, #1040
+-**	str	xzr, \[sp\]
++**	str	xzr, \[sp, #?1024\]
+ **	cbnz	w0, .*
+ **	bl	g
+ **	...
+-- 
+2.34.1
+
+
+From 96d85187c3b9c9a7efc2fd698c3d452e80d8aa47 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:20 +0100
+Subject: [PATCH 17/19] aarch64: Explicitly record probe registers in frame
+ info
+
+The stack frame is currently divided into three areas:
+
+A: the area above the hard frame pointer
+B: the SVE saves below the hard frame pointer
+C: the outgoing arguments
+
+If the stack frame is allocated in one chunk, the allocation needs a
+probe if the frame size is >= guard_size - 1KiB.  In addition, if the
+function is not a leaf function, it must probe an address no more than
+1KiB above the outgoing SP.  We ensured the second condition by
+
+(1) using single-chunk allocations for non-leaf functions only if
+    the link register save slot is within 512 bytes of the bottom
+    of the frame; and
+
+(2) using the link register save as a probe (meaning, for instance,
+    that it can't be individually shrink wrapped)
+
+If instead the stack is allocated in multiple chunks, then:
+
+* an allocation involving only the outgoing arguments (C above) requires
+  a probe if the allocation size is > 1KiB
+
+* any other allocation requires a probe if the allocation size
+  is >= guard_size - 1KiB
+
+* second and subsequent allocations require the previous allocation
+  to probe at the bottom of the allocated area, regardless of the size
+  of that previous allocation
+
+The final point means that, unlike for single allocations,
+it can be necessary to have both a non-SVE register probe and
+an SVE register probe.  For example:
+
+* allocate A, probe using a non-SVE register save
+* allocate B, probe using an SVE register save
+* allocate C
+
+The non-SVE register used in this case was again the link register.
+It was previously used even if the link register save slot was some
+bytes above the bottom of the non-SVE register saves, but an earlier
+patch avoided that by putting the link register save slot first.
+
+As a belt-and-braces fix, this patch explicitly records which
+probe registers we're using and allows the non-SVE probe to be
+whichever register comes first (as for SVE).
+
+The patch also avoids unnecessary probes in sve/pcs/stack_clash_3.c.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::sve_save_and_probe)
+	(aarch64_frame::hard_fp_save_and_probe): New fields.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Initialize them.
+	Rather than asserting that a leaf function saves LR, instead assert
+	that a leaf function saves something.
+	(aarch64_get_separate_components): Prevent the chosen probe
+	registers from being individually shrink-wrapped.
+	(aarch64_allocate_and_probe_stack_space): Remove workaround for
+	probe registers that aren't at the bottom of the previous allocation.
+
+gcc/testsuite/
+	* gcc.target/aarch64/sve/pcs/stack_clash_3.c: Avoid redundant probes.
+---
+ gcc/config/aarch64/aarch64.cc                 | 68 +++++++++++++++----
+ gcc/config/aarch64/aarch64.h                  |  8 +++
+ .../aarch64/sve/pcs/stack_clash_3.c           |  6 +-
+ 3 files changed, 64 insertions(+), 18 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 37809a306f7..6c59c39a639 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8471,15 +8471,11 @@ aarch64_layout_frame (void)
+ 	&& !crtl->abi->clobbers_full_reg_p (regno))
+       frame.reg_offset[regno] = SLOT_REQUIRED;
+ 
+-  /* With stack-clash, LR must be saved in non-leaf functions.  The saving of
+-     LR counts as an implicit probe which allows us to maintain the invariant
+-     described in the comment at expand_prologue.  */
+-  gcc_assert (crtl->is_leaf
+-	      || maybe_ne (frame.reg_offset[R30_REGNUM], SLOT_NOT_REQUIRED));
+ 
+   poly_int64 offset = crtl->outgoing_args_size;
+   gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
+   frame.bytes_below_saved_regs = offset;
++  frame.sve_save_and_probe = INVALID_REGNUM;
+ 
+   /* Now assign stack slots for the registers.  Start with the predicate
+      registers, since predicate LDR and STR have a relatively small
+@@ -8487,6 +8483,8 @@ aarch64_layout_frame (void)
+   for (regno = P0_REGNUM; regno <= P15_REGNUM; regno++)
+     if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+       {
++	if (frame.sve_save_and_probe == INVALID_REGNUM)
++	  frame.sve_save_and_probe = regno;
+ 	frame.reg_offset[regno] = offset;
+ 	offset += BYTES_PER_SVE_PRED;
+       }
+@@ -8524,6 +8522,8 @@ aarch64_layout_frame (void)
+     for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+       if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+ 	{
++	  if (frame.sve_save_and_probe == INVALID_REGNUM)
++	    frame.sve_save_and_probe = regno;
+ 	  frame.reg_offset[regno] = offset;
+ 	  offset += vector_save_size;
+ 	}
+@@ -8533,10 +8533,18 @@ aarch64_layout_frame (void)
+   frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
+   bool saves_below_hard_fp_p
+     = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++  gcc_assert (!saves_below_hard_fp_p
++	      || (frame.sve_save_and_probe != INVALID_REGNUM
++		  && known_eq (frame.reg_offset[frame.sve_save_and_probe],
++			       frame.bytes_below_saved_regs)));
++
+   frame.bytes_below_hard_fp = offset;
++  frame.hard_fp_save_and_probe = INVALID_REGNUM;
+ 
+   auto allocate_gpr_slot = [&](unsigned int regno)
+     {
++      if (frame.hard_fp_save_and_probe == INVALID_REGNUM)
++	frame.hard_fp_save_and_probe = regno;
+       frame.reg_offset[regno] = offset;
+       if (frame.wb_push_candidate1 == INVALID_REGNUM)
+ 	frame.wb_push_candidate1 = regno;
+@@ -8570,6 +8578,8 @@ aarch64_layout_frame (void)
+   for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+     if (known_eq (frame.reg_offset[regno], SLOT_REQUIRED))
+       {
++	if (frame.hard_fp_save_and_probe == INVALID_REGNUM)
++	  frame.hard_fp_save_and_probe = regno;
+ 	/* If there is an alignment gap between integer and fp callee-saves,
+ 	   allocate the last fp register to it if possible.  */
+ 	if (regno == last_fp_reg
+@@ -8593,6 +8603,17 @@ aarch64_layout_frame (void)
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+ 
+   frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
++  gcc_assert (known_eq (frame.saved_regs_size,
++			frame.below_hard_fp_saved_regs_size)
++	      || (frame.hard_fp_save_and_probe != INVALID_REGNUM
++		  && known_eq (frame.reg_offset[frame.hard_fp_save_and_probe],
++			       frame.bytes_below_hard_fp)));
++
++  /* With stack-clash, a register must be saved in non-leaf functions.
++     The saving of the bottommost register counts as an implicit probe,
++     which allows us to maintain the invariant described in the comment
++     at expand_prologue.  */
++  gcc_assert (crtl->is_leaf || maybe_ne (frame.saved_regs_size, 0));
+ 
+   offset += get_frame_size ();
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8723,6 +8744,25 @@ aarch64_layout_frame (void)
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+ 
++  /* The frame is allocated in pieces, with each non-final piece
++     including a register save at offset 0 that acts as a probe for
++     the following piece.  In addition, the save of the bottommost register
++     acts as a probe for callees and allocas.  Roll back any probes that
++     aren't needed.
++
++     A probe isn't needed if it is associated with the final allocation
++     (including callees and allocas) that happens before the epilogue is
++     executed.  */
++  if (crtl->is_leaf
++      && !cfun->calls_alloca
++      && known_eq (frame.final_adjust, 0))
++    {
++      if (maybe_ne (frame.sve_callee_adjust, 0))
++	frame.sve_save_and_probe = INVALID_REGNUM;
++      else
++	frame.hard_fp_save_and_probe = INVALID_REGNUM;
++    }
++
+   /* Make sure the individual adjustments add up to the full frame size.  */
+   gcc_assert (known_eq (frame.initial_adjust
+ 			+ frame.callee_adjust
+@@ -9354,13 +9394,6 @@ aarch64_get_separate_components (void)
+ 
+ 	poly_int64 offset = frame.reg_offset[regno];
+ 
+-	/* If the register is saved in the first SVE save slot, we use
+-	   it as a stack probe for -fstack-clash-protection.  */
+-	if (flag_stack_clash_protection
+-	    && maybe_ne (frame.below_hard_fp_saved_regs_size, 0)
+-	    && known_eq (offset, frame.bytes_below_saved_regs))
+-	  continue;
+-
+ 	/* Get the offset relative to the register we'll use.  */
+ 	if (frame_pointer_needed)
+ 	  offset -= frame.bytes_below_hard_fp;
+@@ -9395,6 +9428,13 @@ aarch64_get_separate_components (void)
+ 
+   bitmap_clear_bit (components, LR_REGNUM);
+   bitmap_clear_bit (components, SP_REGNUM);
++  if (flag_stack_clash_protection)
++    {
++      if (frame.sve_save_and_probe != INVALID_REGNUM)
++	bitmap_clear_bit (components, frame.sve_save_and_probe);
++      if (frame.hard_fp_save_and_probe != INVALID_REGNUM)
++	bitmap_clear_bit (components, frame.hard_fp_save_and_probe);
++    }
+ 
+   return components;
+ }
+@@ -9931,8 +9971,8 @@ aarch64_epilogue_uses (int regno)
+    When probing is needed, we emit a probe at the start of the prologue
+    and every PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE bytes thereafter.
+ 
+-   We have to track how much space has been allocated and the only stores
+-   to the stack we track as implicit probes are the FP/LR stores.
++   We can also use register saves as probes.  These are stored in
++   sve_save_and_probe and hard_fp_save_and_probe.
+ 
+    For outgoing arguments we probe if the size is larger than 1KB, such that
+    the ABI specified buffer is maintained for the next callee.
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index c8becb098c8..fbfb73545ba 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -863,6 +863,14 @@ struct GTY (()) aarch64_frame
+      This is the register they should use.  */
+   unsigned spare_pred_reg;
+ 
++  /* An SVE register that is saved below the hard frame pointer and that acts
++     as a probe for later allocations, or INVALID_REGNUM if none.  */
++  unsigned sve_save_and_probe;
++
++  /* A register that is saved at the hard frame pointer and that acts
++     as a probe for later allocations, or INVALID_REGNUM if none.  */
++  unsigned hard_fp_save_and_probe;
++
+   bool laid_out;
+ 
+   /* True if shadow call stack should be enabled for the current function.  */
+diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
+index 3e01ec36c3a..3530a0d504b 100644
+--- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
++++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/stack_clash_3.c
+@@ -11,11 +11,10 @@
+ **	mov	x11, sp
+ **	...
+ **	sub	sp, sp, x13
+-**	str	p4, \[sp\]
+ **	cbz	w0, [^\n]*
++**	str	p4, \[sp\]
+ **	...
+ **	ptrue	p0\.b, all
+-**	ldr	p4, \[sp\]
+ **	addvl	sp, sp, #1
+ **	ldr	x24, \[sp\], 32
+ **	ret
+@@ -39,13 +38,12 @@ test_1 (int n)
+ **	mov	x11, sp
+ **	...
+ **	sub	sp, sp, x13
+-**	str	p4, \[sp\]
+ **	cbz	w0, [^\n]*
++**	str	p4, \[sp\]
+ **	str	p5, \[sp, #1, mul vl\]
+ **	str	p6, \[sp, #2, mul vl\]
+ **	...
+ **	ptrue	p0\.b, all
+-**	ldr	p4, \[sp\]
+ **	addvl	sp, sp, #1
+ **	ldr	x24, \[sp\], 32
+ **	ret
+-- 
+2.34.1
+
+
+From 56df065080950bb30dda9c260f71be54269bdda5 Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:20 +0100
+Subject: [PATCH 18/19] aarch64: Remove below_hard_fp_saved_regs_size
+
+After previous patches, it's no longer necessary to store
+saved_regs_size and below_hard_fp_saved_regs_size in the frame info.
+All measurements instead use the top or bottom of the frame as
+reference points.
+
+gcc/
+	* config/aarch64/aarch64.h (aarch64_frame::saved_regs_size)
+	(aarch64_frame::below_hard_fp_saved_regs_size): Delete.
+	* config/aarch64/aarch64.cc (aarch64_layout_frame): Update accordingly.
+---
+ gcc/config/aarch64/aarch64.cc | 45 ++++++++++++++++-------------------
+ gcc/config/aarch64/aarch64.h  |  7 ------
+ 2 files changed, 21 insertions(+), 31 deletions(-)
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index 6c59c39a639..b95e805a8cc 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8530,9 +8530,8 @@ aarch64_layout_frame (void)
+ 
+   /* OFFSET is now the offset of the hard frame pointer from the bottom
+      of the callee save area.  */
+-  frame.below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
+-  bool saves_below_hard_fp_p
+-    = maybe_ne (frame.below_hard_fp_saved_regs_size, 0);
++  auto below_hard_fp_saved_regs_size = offset - frame.bytes_below_saved_regs;
++  bool saves_below_hard_fp_p = maybe_ne (below_hard_fp_saved_regs_size, 0);
+   gcc_assert (!saves_below_hard_fp_p
+ 	      || (frame.sve_save_and_probe != INVALID_REGNUM
+ 		  && known_eq (frame.reg_offset[frame.sve_save_and_probe],
+@@ -8602,9 +8601,8 @@ aarch64_layout_frame (void)
+ 
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+ 
+-  frame.saved_regs_size = offset - frame.bytes_below_saved_regs;
+-  gcc_assert (known_eq (frame.saved_regs_size,
+-			frame.below_hard_fp_saved_regs_size)
++  auto saved_regs_size = offset - frame.bytes_below_saved_regs;
++  gcc_assert (known_eq (saved_regs_size, below_hard_fp_saved_regs_size)
+ 	      || (frame.hard_fp_save_and_probe != INVALID_REGNUM
+ 		  && known_eq (frame.reg_offset[frame.hard_fp_save_and_probe],
+ 			       frame.bytes_below_hard_fp)));
+@@ -8613,7 +8611,7 @@ aarch64_layout_frame (void)
+      The saving of the bottommost register counts as an implicit probe,
+      which allows us to maintain the invariant described in the comment
+      at expand_prologue.  */
+-  gcc_assert (crtl->is_leaf || maybe_ne (frame.saved_regs_size, 0));
++  gcc_assert (crtl->is_leaf || maybe_ne (saved_regs_size, 0));
+ 
+   offset += get_frame_size ();
+   offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+@@ -8670,7 +8668,7 @@ aarch64_layout_frame (void)
+ 
+   HOST_WIDE_INT const_size, const_below_saved_regs, const_above_fp;
+   HOST_WIDE_INT const_saved_regs_size;
+-  if (known_eq (frame.saved_regs_size, 0))
++  if (known_eq (saved_regs_size, 0))
+     frame.initial_adjust = frame.frame_size;
+   else if (frame.frame_size.is_constant (&const_size)
+ 	   && const_size < max_push_offset
+@@ -8683,7 +8681,7 @@ aarch64_layout_frame (void)
+       frame.callee_adjust = const_size;
+     }
+   else if (frame.bytes_below_saved_regs.is_constant (&const_below_saved_regs)
+-	   && frame.saved_regs_size.is_constant (&const_saved_regs_size)
++	   && saved_regs_size.is_constant (&const_saved_regs_size)
+ 	   && const_below_saved_regs + const_saved_regs_size < 512
+ 	   /* We could handle this case even with data below the saved
+ 	      registers, provided that that data left us with valid offsets
+@@ -8702,8 +8700,7 @@ aarch64_layout_frame (void)
+       frame.initial_adjust = frame.frame_size;
+     }
+   else if (saves_below_hard_fp_p
+-	   && known_eq (frame.saved_regs_size,
+-			frame.below_hard_fp_saved_regs_size))
++	   && known_eq (saved_regs_size, below_hard_fp_saved_regs_size))
+     {
+       /* Frame in which all saves are SVE saves:
+ 
+@@ -8725,7 +8722,7 @@ aarch64_layout_frame (void)
+ 	 [save SVE registers relative to SP]
+ 	 sub sp, sp, bytes_below_saved_regs  */
+       frame.callee_adjust = const_above_fp;
+-      frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
++      frame.sve_callee_adjust = below_hard_fp_saved_regs_size;
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+   else
+@@ -8740,7 +8737,7 @@ aarch64_layout_frame (void)
+ 	 [save SVE registers relative to SP]
+ 	 sub sp, sp, bytes_below_saved_regs  */
+       frame.initial_adjust = frame.bytes_above_hard_fp;
+-      frame.sve_callee_adjust = frame.below_hard_fp_saved_regs_size;
++      frame.sve_callee_adjust = below_hard_fp_saved_regs_size;
+       frame.final_adjust = frame.bytes_below_saved_regs;
+     }
+ 
+@@ -9936,17 +9933,17 @@ aarch64_epilogue_uses (int regno)
+ 	|  local variables              | <-- frame_pointer_rtx
+ 	|                               |
+ 	+-------------------------------+
+-	|  padding                      | \
+-	+-------------------------------+  |
+-	|  callee-saved registers       |  | frame.saved_regs_size
+-	+-------------------------------+  |
+-	|  LR'                          |  |
+-	+-------------------------------+  |
+-	|  FP'                          |  |
+-	+-------------------------------+  |<- hard_frame_pointer_rtx (aligned)
+-	|  SVE vector registers         |  | \
+-	+-------------------------------+  |  | below_hard_fp_saved_regs_size
+-	|  SVE predicate registers      | /  /
++	|  padding                      |
++	+-------------------------------+
++	|  callee-saved registers       |
++	+-------------------------------+
++	|  LR'                          |
++	+-------------------------------+
++	|  FP'                          |
++	+-------------------------------+ <-- hard_frame_pointer_rtx (aligned)
++	|  SVE vector registers         |
++	+-------------------------------+
++	|  SVE predicate registers      |
+ 	+-------------------------------+
+ 	|  dynamic allocation           |
+ 	+-------------------------------+
+diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
+index fbfb73545ba..cfeaf4657ab 100644
+--- a/gcc/config/aarch64/aarch64.h
++++ b/gcc/config/aarch64/aarch64.h
+@@ -777,18 +777,11 @@ struct GTY (()) aarch64_frame
+      STACK_BOUNDARY.  */
+   HOST_WIDE_INT saved_varargs_size;
+ 
+-  /* The size of the callee-save registers with a slot in REG_OFFSET.  */
+-  poly_int64 saved_regs_size;
+-
+   /* The number of bytes between the bottom of the static frame (the bottom
+      of the outgoing arguments) and the bottom of the register save area.
+      This value is always a multiple of STACK_BOUNDARY.  */
+   poly_int64 bytes_below_saved_regs;
+ 
+-  /* The size of the callee-save registers with a slot in REG_OFFSET that
+-     are saved below the hard frame pointer.  */
+-  poly_int64 below_hard_fp_saved_regs_size;
+-
+   /* The number of bytes between the bottom of the static frame (the bottom
+      of the outgoing arguments) and the hard frame pointer.  This value is
+      always a multiple of STACK_BOUNDARY.  */
+-- 
+2.34.1
+
+
+From b96e66fd4ef3e36983969fb8cdd1956f551a074b Mon Sep 17 00:00:00 2001
+From: Richard Sandiford <richard.sandiford@arm.com>
+Date: Tue, 12 Sep 2023 16:07:21 +0100
+Subject: [PATCH 19/19] aarch64: Make stack smash canary protect saved
+ registers
+
+AArch64 normally puts the saved registers near the bottom of the frame,
+immediately above any dynamic allocations.  But this means that a
+stack-smash attack on those dynamic allocations could overwrite the
+saved registers without needing to reach as far as the stack smash
+canary.
+
+The same thing could also happen for variable-sized arguments that are
+passed by value, since those are allocated before a call and popped on
+return.
+
+This patch avoids that by putting the locals (and thus the canary) below
+the saved registers when stack smash protection is active.
+
+The patch fixes CVE-2023-4039.
+
+gcc/
+	* config/aarch64/aarch64.cc (aarch64_save_regs_above_locals_p):
+	New function.
+	(aarch64_layout_frame): Use it to decide whether locals should
+	go above or below the saved registers.
+	(aarch64_expand_prologue): Update stack layout comment.
+	Emit a stack tie after the final adjustment.
+
+gcc/testsuite/
+	* gcc.target/aarch64/stack-protector-8.c: New test.
+	* gcc.target/aarch64/stack-protector-9.c: Likewise.
+---
+ gcc/config/aarch64/aarch64.cc                 | 46 +++++++--
+ .../gcc.target/aarch64/stack-protector-8.c    | 95 +++++++++++++++++++
+ .../gcc.target/aarch64/stack-protector-9.c    | 33 +++++++
+ 3 files changed, 168 insertions(+), 6 deletions(-)
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+ create mode 100644 gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+
+diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
+index b95e805a8cc..389c0e29353 100644
+--- a/gcc/config/aarch64/aarch64.cc
++++ b/gcc/config/aarch64/aarch64.cc
+@@ -8394,6 +8394,20 @@ aarch64_needs_frame_chain (void)
+   return aarch64_use_frame_pointer;
+ }
+ 
++/* Return true if the current function should save registers above
++   the locals area, rather than below it.  */
++
++static bool
++aarch64_save_regs_above_locals_p ()
++{
++  /* When using stack smash protection, make sure that the canary slot
++     comes between the locals and the saved registers.  Otherwise,
++     it would be possible for a carefully sized smash attack to change
++     the saved registers (particularly LR and FP) without reaching the
++     canary.  */
++  return crtl->stack_protect_guard;
++}
++
+ /* Mark the registers that need to be saved by the callee and calculate
+    the size of the callee-saved registers area and frame record (both FP
+    and LR may be omitted).  */
+@@ -8405,6 +8419,7 @@ aarch64_layout_frame (void)
+   poly_int64 vector_save_size = GET_MODE_SIZE (vector_save_mode);
+   bool frame_related_fp_reg_p = false;
+   aarch64_frame &frame = cfun->machine->frame;
++  poly_int64 top_of_locals = -1;
+ 
+   frame.emit_frame_chain = aarch64_needs_frame_chain ();
+ 
+@@ -8471,9 +8486,16 @@ aarch64_layout_frame (void)
+ 	&& !crtl->abi->clobbers_full_reg_p (regno))
+       frame.reg_offset[regno] = SLOT_REQUIRED;
+ 
++  bool regs_at_top_p = aarch64_save_regs_above_locals_p ();
+ 
+   poly_int64 offset = crtl->outgoing_args_size;
+   gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
++  if (regs_at_top_p)
++    {
++      offset += get_frame_size ();
++      offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++      top_of_locals = offset;
++    }
+   frame.bytes_below_saved_regs = offset;
+   frame.sve_save_and_probe = INVALID_REGNUM;
+ 
+@@ -8613,15 +8635,18 @@ aarch64_layout_frame (void)
+      at expand_prologue.  */
+   gcc_assert (crtl->is_leaf || maybe_ne (saved_regs_size, 0));
+ 
+-  offset += get_frame_size ();
+-  offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
+-  auto top_of_locals = offset;
+-
++  if (!regs_at_top_p)
++    {
++      offset += get_frame_size ();
++      offset = aligned_upper_bound (offset, STACK_BOUNDARY / BITS_PER_UNIT);
++      top_of_locals = offset;
++    }
+   offset += frame.saved_varargs_size;
+   gcc_assert (multiple_p (offset, STACK_BOUNDARY / BITS_PER_UNIT));
+   frame.frame_size = offset;
+ 
+   frame.bytes_above_hard_fp = frame.frame_size - frame.bytes_below_hard_fp;
++  gcc_assert (known_ge (top_of_locals, 0));
+   frame.bytes_above_locals = frame.frame_size - top_of_locals;
+ 
+   frame.initial_adjust = 0;
+@@ -9930,10 +9955,10 @@ aarch64_epilogue_uses (int regno)
+ 	|  for register varargs         |
+ 	|                               |
+ 	+-------------------------------+
+-	|  local variables              | <-- frame_pointer_rtx
++	|  local variables (1)          | <-- frame_pointer_rtx
+ 	|                               |
+ 	+-------------------------------+
+-	|  padding                      |
++	|  padding (1)                  |
+ 	+-------------------------------+
+ 	|  callee-saved registers       |
+ 	+-------------------------------+
+@@ -9945,6 +9970,10 @@ aarch64_epilogue_uses (int regno)
+ 	+-------------------------------+
+ 	|  SVE predicate registers      |
+ 	+-------------------------------+
++	|  local variables (2)          |
++	+-------------------------------+
++	|  padding (2)                  |
++	+-------------------------------+
+ 	|  dynamic allocation           |
+ 	+-------------------------------+
+ 	|  padding                      |
+@@ -9954,6 +9983,9 @@ aarch64_epilogue_uses (int regno)
+ 	+-------------------------------+
+ 	|                               | <-- stack_pointer_rtx (aligned)
+ 
++   The regions marked (1) and (2) are mutually exclusive.  (2) is used
++   when aarch64_save_regs_above_locals_p is true.
++
+    Dynamic stack allocations via alloca() decrease stack_pointer_rtx
+    but leave frame_pointer_rtx and hard_frame_pointer_rtx
+    unchanged.
+@@ -10149,6 +10181,8 @@ aarch64_expand_prologue (void)
+   gcc_assert (known_eq (bytes_below_sp, final_adjust));
+   aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust,
+ 					  !frame_pointer_needed, true);
++  if (emit_frame_chain && maybe_ne (final_adjust, 0))
++    emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
+ }
+ 
+ /* Return TRUE if we can use a simple_return insn.
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+new file mode 100644
+index 00000000000..e71d820e365
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-8.c
+@@ -0,0 +1,95 @@
++/* { dg-options " -O -fstack-protector-strong -mstack-protector-guard=sysreg -mstack-protector-guard-reg=tpidr2_el0 -mstack-protector-guard-offset=16" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++void g(void *);
++__SVBool_t *h(void *);
++
++/*
++** test1:
++**	sub	sp, sp, #288
++**	stp	x29, x30, \[sp, #?272\]
++**	add	x29, sp, #?272
++**	mrs	(x[0-9]+), tpidr2_el0
++**	ldr	(x[0-9]+), \[\1, #?16\]
++**	str	\2, \[sp, #?264\]
++**	mov	\2, #?0
++**	add	x0, sp, #?8
++**	bl	g
++**	...
++**	mrs	.*
++**	...
++**	bne	.*
++**	...
++**	ldp	x29, x30, \[sp, #?272\]
++**	add	sp, sp, #?288
++**	ret
++**	bl	__stack_chk_fail
++*/
++int test1() {
++  int y[0x40];
++  g(y);
++  return 1;
++}
++
++/*
++** test2:
++**	stp	x29, x30, \[sp, #?-16\]!
++**	mov	x29, sp
++**	sub	sp, sp, #1040
++**	mrs	(x[0-9]+), tpidr2_el0
++**	ldr	(x[0-9]+), \[\1, #?16\]
++**	str	\2, \[sp, #?1032\]
++**	mov	\2, #?0
++**	add	x0, sp, #?8
++**	bl	g
++**	...
++**	mrs	.*
++**	...
++**	bne	.*
++**	...
++**	add	sp, sp, #?1040
++**	ldp	x29, x30, \[sp\], #?16
++**	ret
++**	bl	__stack_chk_fail
++*/
++int test2() {
++  int y[0x100];
++  g(y);
++  return 1;
++}
++
++#pragma GCC target "+sve"
++
++/*
++** test3:
++**	stp	x29, x30, \[sp, #?-16\]!
++**	mov	x29, sp
++**	addvl	sp, sp, #-18
++**	...
++**	str	p4, \[sp\]
++**	...
++**	sub	sp, sp, #272
++**	mrs	(x[0-9]+), tpidr2_el0
++**	ldr	(x[0-9]+), \[\1, #?16\]
++**	str	\2, \[sp, #?264\]
++**	mov	\2, #?0
++**	add	x0, sp, #?8
++**	bl	h
++**	...
++**	mrs	.*
++**	...
++**	bne	.*
++**	...
++**	add	sp, sp, #?272
++**	...
++**	ldr	p4, \[sp\]
++**	...
++**	addvl	sp, sp, #18
++**	ldp	x29, x30, \[sp\], #?16
++**	ret
++**	bl	__stack_chk_fail
++*/
++__SVBool_t test3() {
++  int y[0x40];
++  return *h(y);
++}
+diff --git a/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c b/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+new file mode 100644
+index 00000000000..58f322aa480
+--- /dev/null
++++ b/gcc/testsuite/gcc.target/aarch64/stack-protector-9.c
+@@ -0,0 +1,33 @@
++/* { dg-options "-O2 -mcpu=neoverse-v1 -fstack-protector-all" } */
++/* { dg-final { check-function-bodies "**" "" } } */
++
++/*
++** main:
++**	...
++**	stp	x29, x30, \[sp, #?-[0-9]+\]!
++**	...
++**	sub	sp, sp, #[0-9]+
++**	...
++**	str	x[0-9]+, \[x29, #?-8\]
++**	...
++*/
++int f(const char *);
++void g(void *);
++int main(int argc, char* argv[])
++{
++  int a;
++  int b;
++  char c[2+f(argv[1])];
++  int d[0x100];
++  char y;
++
++  y=42; a=4; b=10;
++  c[0] = 'h'; c[1] = '\0';
++
++  c[f(argv[2])] = '\0';
++
++  __builtin_printf("%d %d\n%s\n", a, b, c);
++  g(d);
++
++  return 0;
++}
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-devtools/gdb/gdb-common.inc b/poky/meta/recipes-devtools/gdb/gdb-common.inc
index 12292f0..3349719 100644
--- a/poky/meta/recipes-devtools/gdb/gdb-common.inc
+++ b/poky/meta/recipes-devtools/gdb/gdb-common.inc
@@ -35,8 +35,7 @@
 PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,readline"
 PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python3,python3-codecs"
 PACKAGECONFIG[babeltrace] = "--with-babeltrace,--without-babeltrace,babeltrace"
-# ncurses is already a hard DEPENDS, but would be added here if it weren't
-PACKAGECONFIG[tui] = "--enable-tui,--disable-tui"
+PACKAGECONFIG[tui] = "--enable-tui,--disable-tui,,ncurses-terminfo-base"
 PACKAGECONFIG[xz] = "--with-lzma --with-liblzma-prefix=${STAGING_DIR_HOST},--without-lzma,xz"
 PACKAGECONFIG[debuginfod] = "--with-debuginfod, --without-debuginfod, elfutils"
 
diff --git a/poky/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb b/poky/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
index b716b02..1826c7a 100644
--- a/poky/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
+++ b/poky/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
@@ -7,7 +7,6 @@
 LICENSE = "GPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
 
-PR = "r2"
 
 DEPENDS = ""
 INHIBIT_DEFAULT_DEPS = "1"
diff --git a/poky/meta/recipes-devtools/jquery/jquery_3.7.0.bb b/poky/meta/recipes-devtools/jquery/jquery_3.7.0.bb
deleted file mode 100644
index eceed9c..0000000
--- a/poky/meta/recipes-devtools/jquery/jquery_3.7.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "jQuery is a fast, small, and feature-rich JavaScript library"
-HOMEPAGE = "https://jquery.com/"
-DESCRIPTION = "${SUMMARY}"
-LICENSE = "MIT"
-SECTION = "devel"
-LIC_FILES_CHKSUM = "file://${S}/${BP}.js;beginline=5;endline=7;md5=9c7c6e9ab275fc1e0d99cb7180ecd14c"
-
-# unpack items to ${S} so the archiver can see them
-#
-SRC_URI = "\
-    https://code.jquery.com/${BP}.js;name=js;subdir=${BP} \
-    https://code.jquery.com/${BP}.min.js;name=min;subdir=${BP} \
-    https://code.jquery.com/${BP}.min.map;name=map;subdir=${BP} \
-    "
-
-SRC_URI[js.sha256sum] = "265a924c42de4784cba8fd0e1bd77133bc833ea5f5a31fc77e08922c18fcfa43"
-SRC_URI[min.sha256sum] = "d8f9afbf492e4c139e9d2bcb9ba6ef7c14921eb509fb703bc7a3f911b774eff8"
-SRC_URI[map.sha256sum] = "cae47e834ee977975a48c851b165cc52ea916cc968ba7d280b1293f573cd1a48"
-
-UPSTREAM_CHECK_REGEX = "jquery-(?P<pver>\d+(\.\d+)+)\.js"
-
-# https://github.com/jquery/jquery/issues/3927
-CVE_STATUS[CVE-2007-2379] = "upstream-wontfix: There are ways jquery can expose security issues but any issues \
-are in the apps exposing them and there is little we can directly do."
-
-inherit allarch
-
-do_install() {
-    install -d ${D}${datadir}/javascript/${BPN}/
-    install -m 644 ${S}/${BP}.js ${D}${datadir}/javascript/${BPN}/${BPN}.js
-    install -m 644 ${S}/${BP}.min.js ${D}${datadir}/javascript/${BPN}/${BPN}.min.js
-    install -m 644 ${S}/${BP}.min.map ${D}${datadir}/javascript/${BPN}/${BPN}.min.map
-}
-
-PACKAGES = "${PN}"
-FILES:${PN} = "${datadir}"
-
-BBCLASSEXTEND += "native nativesdk"
diff --git a/poky/meta/recipes-devtools/jquery/jquery_3.7.1.bb b/poky/meta/recipes-devtools/jquery/jquery_3.7.1.bb
new file mode 100644
index 0000000..33147b4
--- /dev/null
+++ b/poky/meta/recipes-devtools/jquery/jquery_3.7.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "jQuery is a fast, small, and feature-rich JavaScript library"
+HOMEPAGE = "https://jquery.com/"
+DESCRIPTION = "${SUMMARY}"
+LICENSE = "MIT"
+SECTION = "devel"
+LIC_FILES_CHKSUM = "file://${S}/${BP}.js;beginline=5;endline=7;md5=9c7c6e9ab275fc1e0d99cb7180ecd14c"
+
+# unpack items to ${S} so the archiver can see them
+#
+SRC_URI = "\
+    https://code.jquery.com/${BP}.js;name=js;subdir=${BP} \
+    https://code.jquery.com/${BP}.min.js;name=min;subdir=${BP} \
+    https://code.jquery.com/${BP}.min.map;name=map;subdir=${BP} \
+    "
+
+SRC_URI[js.sha256sum] = "78a85aca2f0b110c29e0d2b137e09f0a1fb7a8e554b499f740d6744dc8962cfe"
+SRC_URI[min.sha256sum] = "fc9a93dd241f6b045cbff0481cf4e1901becd0e12fb45166a8f17f95823f0b1a"
+SRC_URI[map.sha256sum] = "5e7d6d9c28b7f21006535e8875eb47e9667852a14c4624eed301c6cea19ae62b"
+
+UPSTREAM_CHECK_REGEX = "jquery-(?P<pver>\d+(\.\d+)+)\.js"
+
+# https://github.com/jquery/jquery/issues/3927
+CVE_STATUS[CVE-2007-2379] = "upstream-wontfix: There are ways jquery can expose security issues but any issues \
+are in the apps exposing them and there is little we can directly do."
+
+inherit allarch
+
+do_install() {
+    install -d ${D}${datadir}/javascript/${BPN}/
+    install -m 644 ${S}/${BP}.js ${D}${datadir}/javascript/${BPN}/${BPN}.js
+    install -m 644 ${S}/${BP}.min.js ${D}${datadir}/javascript/${BPN}/${BPN}.min.js
+    install -m 644 ${S}/${BP}.min.map ${D}${datadir}/javascript/${BPN}/${BPN}.min.map
+}
+
+PACKAGES = "${PN}"
+FILES:${PN} = "${datadir}"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/poky/meta/recipes-devtools/json-c/json-c/0001-Fix-build-with-clang-15.patch b/poky/meta/recipes-devtools/json-c/json-c/0001-Fix-build-with-clang-15.patch
deleted file mode 100644
index 215f4d8..0000000
--- a/poky/meta/recipes-devtools/json-c/json-c/0001-Fix-build-with-clang-15.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0145b575ac1fe6a77e00d639864f26fc91ceb12f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 13 Aug 2022 20:37:03 -0700
-Subject: [PATCH] Fix build with clang-15+
-
-Fixes
-json_util.c:63:35: error: a function declaration without a prototype is deprecated in all versions of C [-We
-rror,-Wstrict-prototypes]
-const char *json_util_get_last_err()
-                                  ^
-                                   void
-
-Upstream-Status: Backport [https://github.com/json-c/json-c/pull/783]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- json_util.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/json_util.c b/json_util.c
-index 952770a..83d9c68 100644
---- a/json_util.c
-+++ b/json_util.c
-@@ -60,7 +60,7 @@ static int _json_object_to_fd(int fd, struct json_object *obj, int flags, const
- 
- static char _last_err[256] = "";
- 
--const char *json_util_get_last_err()
-+const char *json_util_get_last_err(void)
- {
- 	if (_last_err[0] == '\0')
- 		return NULL;
--- 
-2.37.2
-
diff --git a/poky/meta/recipes-devtools/json-c/json-c/run-ptest b/poky/meta/recipes-devtools/json-c/json-c/run-ptest
index 9ee6095..2d0e94c 100644
--- a/poky/meta/recipes-devtools/json-c/json-c/run-ptest
+++ b/poky/meta/recipes-devtools/json-c/json-c/run-ptest
@@ -8,7 +8,7 @@
     # test_basic is not an own testcase, just
     # contains common code of other tests
     if [ "$i" != "test_basic.test" ]; then
-        if ./$i > json-c_test.log 2>&1 ; then
+        if ./$i >> json-c_test.log 2>&1 ; then
             echo PASS: $i
         else
             ret_val=1
diff --git a/poky/meta/recipes-devtools/json-c/json-c_0.16.bb b/poky/meta/recipes-devtools/json-c/json-c_0.16.bb
deleted file mode 100644
index 3aba41d..0000000
--- a/poky/meta/recipes-devtools/json-c/json-c_0.16.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "C bindings for apps which will manipulate JSON data"
-DESCRIPTION = "JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C."
-HOMEPAGE = "https://github.com/json-c/json-c/wiki"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=de54b60fbbc35123ba193fea8ee216f2"
-
-SRC_URI = " \
-    https://s3.amazonaws.com/json-c_releases/releases/${BP}.tar.gz \
-    file://0001-Fix-build-with-clang-15.patch \
-    file://run-ptest \
-"
-SRC_URI[sha256sum] = "8e45ac8f96ec7791eaf3bb7ee50e9c2100bbbc87b8d0f1d030c5ba8a0288d96b"
-
-UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/tags"
-UPSTREAM_CHECK_REGEX = "json-c-(?P<pver>\d+(\.\d+)+)-\d+"
-
-RPROVIDES:${PN} = "libjson"
-
-inherit cmake ptest
-
-do_install_ptest() {
-    install -d ${D}/${PTEST_PATH}/tests
-    install ${B}/tests/test* ${D}/${PTEST_PATH}/tests
-    install ${S}/tests/*.test ${D}/${PTEST_PATH}/tests
-    install ${S}/tests/*.expected ${D}/${PTEST_PATH}/tests
-    install ${S}/tests/test-defs.sh ${D}/${PTEST_PATH}/tests
-    install ${S}/tests/valid*json ${D}/${PTEST_PATH}/tests
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/json-c/json-c_0.17.bb b/poky/meta/recipes-devtools/json-c/json-c_0.17.bb
new file mode 100644
index 0000000..f4b7a32
--- /dev/null
+++ b/poky/meta/recipes-devtools/json-c/json-c_0.17.bb
@@ -0,0 +1,31 @@
+SUMMARY = "C bindings for apps which will manipulate JSON data"
+DESCRIPTION = "JSON-C implements a reference counting object model that allows you to easily construct JSON objects in C."
+HOMEPAGE = "https://github.com/json-c/json-c/wiki"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=de54b60fbbc35123ba193fea8ee216f2"
+
+SRC_URI = "https://s3.amazonaws.com/json-c_releases/releases/${BP}.tar.gz \
+           file://run-ptest \
+           "
+SRC_URI[sha256sum] = "7550914d58fb63b2c3546f3ccfbe11f1c094147bd31a69dcd23714d7956159e6"
+
+# NVD uses full tag name including date
+CVE_VERSION = "0.17-20230812"
+
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/tags"
+UPSTREAM_CHECK_REGEX = "json-c-(?P<pver>\d+(\.\d+)+)-\d+"
+
+RPROVIDES:${PN} = "libjson"
+
+inherit cmake ptest
+
+do_install_ptest() {
+    install -d ${D}/${PTEST_PATH}/tests
+    install ${B}/tests/test* ${D}/${PTEST_PATH}/tests
+    install ${S}/tests/*.test ${D}/${PTEST_PATH}/tests
+    install ${S}/tests/*.expected ${D}/${PTEST_PATH}/tests
+    install ${S}/tests/test-defs.sh ${D}/${PTEST_PATH}/tests
+    install ${S}/tests/*json ${D}/${PTEST_PATH}/tests
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch b/poky/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
index c7b2af8..08d0859 100644
--- a/poky/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
+++ b/poky/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
@@ -1,4 +1,4 @@
-From 9294cd19e5e3121fb8d37b44ee82dd7c4b3ab2c7 Mon Sep 17 00:00:00 2001
+From b87ae6860ea44996b677ad1c4a9793720b77c67c Mon Sep 17 00:00:00 2001
 From: Alexander Kanavin <alex.kanavin@gmail.com>
 Date: Tue, 7 Feb 2017 12:16:03 +0200
 Subject: [PATCH] Get parameters for both libsolv and libsolvext (libdnf is
@@ -13,15 +13,15 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index b722d4fb..ce88b9e3 100644
+index e99b28d0..548a9137 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -52,7 +52,7 @@ endif()
+@@ -51,7 +51,7 @@ endif()
+ 
  
  # build dependencies
- find_package(Gpgme REQUIRED)
 -PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
 +PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv libsolvext)
  set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
-
+ 
  
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch b/poky/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
index 643a5f3..32f2bb6 100644
--- a/poky/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
+++ b/poky/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
@@ -1,4 +1,4 @@
-From fbb181d25ad85778add7ed45b6aaf114e02d0f79 Mon Sep 17 00:00:00 2001
+From 0b8eceb9161711003cd25ab400cadde7c1601733 Mon Sep 17 00:00:00 2001
 From: Alexander Kanavin <alex.kanavin@gmail.com>
 Date: Fri, 30 Dec 2016 18:24:50 +0200
 Subject: [PATCH] Set libsolv variables with pkg-config (cmake's own module
@@ -13,13 +13,13 @@
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 405dc4e8..53837448 100644
+index 6444c374..e99b28d0 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -52,7 +52,8 @@ endif()
+@@ -51,7 +51,8 @@ endif()
+ 
  
  # build dependencies
- find_package(Gpgme REQUIRED)
 -find_package(LibSolv 0.7.21 REQUIRED COMPONENTS ext)
 +PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
 +set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch b/poky/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
index e3784cc..8b1a597 100644
--- a/poky/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
+++ b/poky/meta/recipes-devtools/libdnf/libdnf/enable_test_data_dir_set.patch
@@ -1,4 +1,7 @@
-libdnf: allow reproducible binary builds
+From dc83a79053597546b2b42fcf578f3a7727b13f3b Mon Sep 17 00:00:00 2001
+From: Joe Slater <joe.slater@windriver.com>
+Date: Wed, 22 Jul 2020 13:31:11 -0700
+Subject: [PATCH] libdnf: allow reproducible binary builds
 
 Use a dummy directory for test data if not built WITH_TESTS.  Allow for overriding
 TESTDATADIR, since the default is guaranteed to be wrong for target builds.
@@ -7,11 +10,16 @@
 
 Signed-off-by: Joe Slater <joe.slater@windriver.com>
 
+---
+ CMakeLists.txt | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
 
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 548a9137..c378e7d9 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -133,7 +133,12 @@ add_definitions(-DG_LOG_DOMAIN=\\"libdnf
- add_definitions(-D_FILE_OFFSET_BITS=64)
+@@ -132,7 +132,12 @@ add_definitions(-DGETTEXT_DOMAIN=\\"libdnf\\")
+ add_definitions(-DG_LOG_DOMAIN=\\"libdnf\\")
  
  # tests
 -add_definitions(-DTESTDATADIR=\\"${CMAKE_SOURCE_DIR}/data/tests\\")
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf_0.70.1.bb b/poky/meta/recipes-devtools/libdnf/libdnf_0.70.1.bb
deleted file mode 100644
index c44ae27..0000000
--- a/poky/meta/recipes-devtools/libdnf/libdnf_0.70.1.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Library providing simplified C and Python API to libsolv"
-HOMEPAGE = "https://github.com/rpm-software-management/libdnf"
-DESCRIPTION = "This library provides a high level package-manager. It's core library of dnf, PackageKit and rpm-ostree. It's replacement for deprecated hawkey library which it contains inside and uses librepo under the hood."
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https \
-           file://0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch \
-           file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
-           file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
-           file://enable_test_data_dir_set.patch \
-           file://0001-drop-FindPythonInstDir.cmake.patch \
-           "
-
-SRCREV = "3b8e59ad8ed3a3eb736d8a2e16b4fc04313d1f12"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!4\.90)\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = "glib-2.0 libsolv libcheck librepo rpm gtk-doc libmodulemd json-c swig-native util-linux"
-
-inherit gtk-doc gobject-introspection cmake pkgconfig setuptools3-base
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DWITH_MAN=OFF -DPYTHON_DESIRED=3 \
-                  ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DWITH_GIR=ON', '-DWITH_GIR=OFF', d)} \
-                  -DWITH_TESTS=OFF \
-                  -DWITH_ZCHUNK=OFF \
-                  -DWITH_HTML=OFF \
-                "
-EXTRA_OECMAKE:append:class-native = " -DWITH_GIR=OFF"
-EXTRA_OECMAKE:append:class-nativesdk = " -DWITH_GIR=OFF"
-
-BBCLASSEXTEND = "native nativesdk"
-SKIP_RECIPE[libdnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'Does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
-
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb b/poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb
new file mode 100644
index 0000000..396a666
--- /dev/null
+++ b/poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Library providing simplified C and Python API to libsolv"
+HOMEPAGE = "https://github.com/rpm-software-management/libdnf"
+DESCRIPTION = "This library provides a high level package-manager. It's core library of dnf, PackageKit and rpm-ostree. It's replacement for deprecated hawkey library which it contains inside and uses librepo under the hood."
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https \
+           file://0001-FindGtkDoc.cmake-drop-the-requirement-for-GTKDOC_SCA.patch \
+           file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
+           file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
+           file://enable_test_data_dir_set.patch \
+           file://0001-drop-FindPythonInstDir.cmake.patch \
+           "
+
+SRCREV = "39098f39806becdc87cf93e03a49ae89a33e7ede"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!4\.90)\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "glib-2.0 libsolv libcheck librepo rpm gtk-doc libmodulemd json-c swig-native util-linux"
+
+inherit gtk-doc gobject-introspection cmake pkgconfig setuptools3-base
+
+EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DWITH_MAN=OFF -DPYTHON_DESIRED=3 \
+                  ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DWITH_GIR=ON', '-DWITH_GIR=OFF', d)} \
+                  -DWITH_TESTS=OFF \
+                  -DWITH_ZCHUNK=OFF \
+                  -DWITH_HTML=OFF \
+                "
+EXTRA_OECMAKE:append:class-native = " -DWITH_GIR=OFF"
+EXTRA_OECMAKE:append:class-nativesdk = " -DWITH_GIR=OFF"
+
+BBCLASSEXTEND = "native nativesdk"
+SKIP_RECIPE[libdnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'Does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
+
diff --git a/poky/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch b/poky/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
index b01b864..add38b3 100644
--- a/poky/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
+++ b/poky/meta/recipes-devtools/llvm/llvm/0007-llvm-allow-env-override-of-exe-path.patch
@@ -1,27 +1,26 @@
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
-From 61b00e1e051e367f5483d7b5253b6c85a9e8a90f Mon Sep 17 00:00:00 2001
+From 588a8694c6540e31140c7e242bfb5e279d6ca08c Mon Sep 17 00:00:00 2001
 From: Martin Kelly <mkelly@xevo.com>
 Date: Fri, 19 May 2017 00:22:57 -0700
-Subject: [PATCH] llvm: allow env override of exe path
+Subject: [PATCH] llvm: allow env override of exe and libdir path
 
 When using a native llvm-config from inside a sysroot, we need llvm-config to
 return the libraries, include directories, etc. from inside the sysroot rather
 than from the native sysroot. Thus provide an env override for calling
 llvm-config from a target sysroot.
 
+Upstream-Status: Inappropriate [OE-specific]
+
 Signed-off-by: Martin Kelly <mkelly@xevo.com>
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
- llvm/tools/llvm-config/llvm-config.cpp | 7 +++++++
- 1 file changed, 7 insertions(+)
+ llvm/tools/llvm-config/llvm-config.cpp | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
 
 diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp
-index 7ef7c46a262..a4f7ed82c7b 100644
+index e86eb2b44b10..7b2abf318dbe 100644
 --- a/llvm/tools/llvm-config/llvm-config.cpp
 +++ b/llvm/tools/llvm-config/llvm-config.cpp
-@@ -225,6 +225,13 @@ Typical components:\n\
+@@ -246,6 +246,13 @@ Typical components:\n\
  
  /// Compute the path to the main executable.
  std::string GetExecutablePath(const char *Argv0) {
@@ -35,3 +34,4 @@
    // This just needs to be some symbol in the binary; C++ doesn't
    // allow taking the address of ::main however.
    void *P = (void *)(intptr_t)GetExecutablePath;
+ 
diff --git a/poky/meta/recipes-devtools/llvm/llvm_git.bb b/poky/meta/recipes-devtools/llvm/llvm_git.bb
index f3d6f24..934f842 100644
--- a/poky/meta/recipes-devtools/llvm/llvm_git.bb
+++ b/poky/meta/recipes-devtools/llvm/llvm_git.bb
@@ -14,14 +14,14 @@
 
 inherit cmake pkgconfig
 
-PV = "16.0.6"
+PV = "17.0.2"
 
 MAJOR_VERSION = "${@oe.utils.trim_version("${PV}", 1)}"
 
 LLVM_RELEASE = "${PV}"
 
 BRANCH = "release/${MAJOR_VERSION}.x"
-SRCREV = "7cbf1a2591520c2491aa35339f227775f4d3adf6"
+SRCREV = "481358974fb0f732e33d503c224492a543f4d7bd"
 SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH};protocol=https \
            file://0007-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
            file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
diff --git a/poky/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch b/poky/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
index 848dccf..8fbcb5a 100644
--- a/poky/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
+++ b/poky/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
@@ -1,4 +1,4 @@
-From 6c4eef1d92e9e42fdbc888365cab3c95fb33c605 Mon Sep 17 00:00:00 2001
+From fcd3260c03f313676720e6219c5953d412fb0a2c Mon Sep 17 00:00:00 2001
 From: Ross Burton <ross.burton@intel.com>
 Date: Tue, 3 Jul 2018 13:59:09 +0100
 Subject: [PATCH] Make CPU family warnings fatal
@@ -7,15 +7,15 @@
 Signed-off-by: Ross Burton <ross.burton@intel.com>
 
 ---
- mesonbuild/envconfig.py   | 2 +-
- mesonbuild/environment.py | 4 +---
- 2 files changed, 2 insertions(+), 4 deletions(-)
+ mesonbuild/envconfig.py   | 4 ++--
+ mesonbuild/environment.py | 6 ++----
+ 2 files changed, 4 insertions(+), 6 deletions(-)
 
-Index: meson-0.60.2/mesonbuild/envconfig.py
-===================================================================
---- meson-0.60.2.orig/mesonbuild/envconfig.py
-+++ meson-0.60.2/mesonbuild/envconfig.py
-@@ -266,8 +266,8 @@ class MachineInfo(HoldableObject):
+diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
+index 7e0c567..a180065 100644
+--- a/mesonbuild/envconfig.py
++++ b/mesonbuild/envconfig.py
+@@ -284,8 +284,8 @@ class MachineInfo(HoldableObject):
                  'but is missing {}.'.format(minimum_literal - set(literal)))
  
          cpu_family = literal['cpu_family']
@@ -26,13 +26,13 @@
  
          endian = literal['endian']
          if endian not in ('little', 'big'):
-Index: meson-0.60.2/mesonbuild/environment.py
-===================================================================
---- meson-0.60.2.orig/mesonbuild/environment.py
-+++ meson-0.60.2/mesonbuild/environment.py
-@@ -354,10 +354,8 @@ def detect_cpu_family(compilers: Compile
-         if any_compiler_has_define(compilers, '__64BIT__'):
-             trial = 'ppc64'
+diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
+index e212c7a..9d2bff3 100644
+--- a/mesonbuild/environment.py
++++ b/mesonbuild/environment.py
+@@ -345,10 +345,8 @@ def detect_cpu_family(compilers: CompilersDict) -> str:
+         if compilers and not any_compiler_has_define(compilers, '__mips64'):
+             trial = 'mips'
  
 -    if trial not in known_cpu_families:
 -        mlog.warning(f'Unknown CPU family {trial!r}, please report this at '
diff --git a/poky/meta/recipes-devtools/meson/meson_1.1.1.bb b/poky/meta/recipes-devtools/meson/meson_1.1.1.bb
deleted file mode 100644
index dd97f93..0000000
--- a/poky/meta/recipes-devtools/meson/meson_1.1.1.bb
+++ /dev/null
@@ -1,155 +0,0 @@
-HOMEPAGE = "http://mesonbuild.com"
-SUMMARY = "A high performance build system"
-DESCRIPTION = "Meson is a build system designed to increase programmer \
-productivity. It does this by providing a fast, simple and easy to use \
-interface for modern software development tools and practices."
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-GITHUB_BASE_URI = "https://github.com/mesonbuild/meson/releases/"
-SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/meson-${PV}.tar.gz \
-           file://meson-setup.py \
-           file://meson-wrapper \
-           file://0001-python-module-do-not-manipulate-the-environment-when.patch \
-           file://0001-Make-CPU-family-warnings-fatal.patch \
-           file://0002-Support-building-allarch-recipes-again.patch \
-           "
-SRC_URI[sha256sum] = "d04b541f97ca439fb82fab7d0d480988be4bd4e62563a5ca35fadb5400727b1c"
-
-inherit python_setuptools_build_meta github-releases
-
-RDEPENDS:${PN} = "ninja python3-modules python3-pkg-resources"
-
-FILES:${PN} += "${datadir}/polkit-1"
-
-do_install:append () {
-	# As per the same issue in the python recipe itself:
-	# Unfortunately the following pyc files are non-deterministc due to 'frozenset'
-	# being written without strict ordering, even with PYTHONHASHSEED = 0
-	# Upstream is discussing ways to solve the issue properly, until then let's
-	# just not install the problematic files.
-	# More info: http://benno.id.au/blog/2013/01/15/python-determinism
-	rm -f ${D}${libdir}/python*/site-packages/mesonbuild/dependencies/__pycache__/mpi.cpython*
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit meson-routines
-
-# The cross file logic is similar but not identical to that in meson.bbclass,
-# since it's generating for an SDK rather than a cross-compile. Important
-# differences are:
-# - We can't set vars like CC, CXX, etc. yet because they will be filled in with
-#   real paths by meson-setup.sh when the SDK is extracted.
-# - Some overrides aren't needed, since the SDK injects paths that take care of
-#   them.
-def var_list2str(var, d):
-    items = d.getVar(var).split()
-    return items[0] if len(items) == 1 else ', '.join(repr(s) for s in items)
-
-def generate_native_link_template(d):
-    val = ['-L@{OECORE_NATIVE_SYSROOT}${libdir_native}',
-           '-L@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
-           '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${libdir_native}',
-           '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
-           '-Wl,--allow-shlib-undefined'
-        ]
-    build_arch = d.getVar('BUILD_ARCH')
-    if 'x86_64' in build_arch:
-        loader = 'ld-linux-x86-64.so.2'
-    elif 'i686' in build_arch:
-        loader = 'ld-linux.so.2'
-    elif 'aarch64' in build_arch:
-        loader = 'ld-linux-aarch64.so.1'
-    elif 'ppc64le' in build_arch:
-        loader = 'ld64.so.2'
-    elif 'loongarch64' in build_arch:
-        loader = 'ld-linux-loongarch-lp64d.so.1'
-
-    if loader:
-        val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader]
-
-    return repr(val)
-
-install_templates() {
-    install -d ${D}${datadir}/meson
-
-    cat >${D}${datadir}/meson/meson.native.template <<EOF
-[binaries]
-c = ${@meson_array('BUILD_CC', d)}
-cpp = ${@meson_array('BUILD_CXX', d)}
-ar = ${@meson_array('BUILD_AR', d)}
-nm = ${@meson_array('BUILD_NM', d)}
-strip = ${@meson_array('BUILD_STRIP', d)}
-readelf = ${@meson_array('BUILD_READELF', d)}
-pkgconfig = 'pkg-config-native'
-
-[built-in options]
-c_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
-c_link_args = ${@generate_native_link_template(d)}
-cpp_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
-cpp_link_args = ${@generate_native_link_template(d)}
-[properties]
-sys_root = '@OECORE_NATIVE_SYSROOT'
-EOF
-
-    cat >${D}${datadir}/meson/meson.cross.template <<EOF
-[binaries]
-c = @CC
-cpp = @CXX
-ar = @AR
-nm = @NM
-strip = @STRIP
-pkgconfig = 'pkg-config'
-
-[built-in options]
-c_args = @CFLAGS
-c_link_args = @LDFLAGS
-cpp_args = @CPPFLAGS
-cpp_link_args = @LDFLAGS
-
-[properties]
-needs_exe_wrapper = true
-sys_root = @OECORE_TARGET_SYSROOT
-
-[host_machine]
-system = '$host_system'
-cpu_family = '$host_cpu_family'
-cpu = '$host_cpu'
-endian = '$host_endian'
-EOF
-}
-
-do_install:append:class-nativesdk() {
-    host_system=${SDK_OS}
-    host_cpu_family=${@meson_cpu_family("SDK_ARCH", d)}
-    host_cpu=${SDK_ARCH}
-    host_endian=${@meson_endian("SDK", d)}
-    install_templates
-
-    install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
-    install -m 0755 ${WORKDIR}/meson-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
-
-    # We need to wrap the real meson with a thin env setup wrapper.
-    mv ${D}${bindir}/meson ${D}${bindir}/meson.real
-    install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
-}
-
-FILES:${PN}:append:class-nativesdk = "${datadir}/meson ${SDKPATHNATIVE}"
-
-do_install:append:class-native() {
-    host_system=${HOST_OS}
-    host_cpu_family=${@meson_cpu_family("HOST_ARCH", d)}
-    host_cpu=${HOST_ARCH}
-    host_endian=${@meson_endian("HOST", d)}
-    install_templates
-
-    install -d ${D}${datadir}/post-relocate-setup.d
-    install -m 0755 ${WORKDIR}/meson-setup.py ${D}${datadir}/post-relocate-setup.d/
-
-    # We need to wrap the real meson with a thin wrapper that substitues native/cross files
-    # when running in a direct SDK environment.
-    mv ${D}${bindir}/meson ${D}${bindir}/meson.real
-    install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
-}
diff --git a/poky/meta/recipes-devtools/meson/meson_1.2.1.bb b/poky/meta/recipes-devtools/meson/meson_1.2.1.bb
new file mode 100644
index 0000000..fe45266
--- /dev/null
+++ b/poky/meta/recipes-devtools/meson/meson_1.2.1.bb
@@ -0,0 +1,155 @@
+HOMEPAGE = "http://mesonbuild.com"
+SUMMARY = "A high performance build system"
+DESCRIPTION = "Meson is a build system designed to increase programmer \
+productivity. It does this by providing a fast, simple and easy to use \
+interface for modern software development tools and practices."
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+GITHUB_BASE_URI = "https://github.com/mesonbuild/meson/releases/"
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/meson-${PV}.tar.gz \
+           file://meson-setup.py \
+           file://meson-wrapper \
+           file://0001-python-module-do-not-manipulate-the-environment-when.patch \
+           file://0001-Make-CPU-family-warnings-fatal.patch \
+           file://0002-Support-building-allarch-recipes-again.patch \
+           "
+SRC_URI[sha256sum] = "b1db3a153087549497ee52b1c938d2134e0338214fe14f7efd16fecd57b639f5"
+
+inherit python_setuptools_build_meta github-releases
+
+RDEPENDS:${PN} = "ninja python3-modules python3-pkg-resources"
+
+FILES:${PN} += "${datadir}/polkit-1"
+
+do_install:append () {
+	# As per the same issue in the python recipe itself:
+	# Unfortunately the following pyc files are non-deterministc due to 'frozenset'
+	# being written without strict ordering, even with PYTHONHASHSEED = 0
+	# Upstream is discussing ways to solve the issue properly, until then let's
+	# just not install the problematic files.
+	# More info: http://benno.id.au/blog/2013/01/15/python-determinism
+	rm -f ${D}${libdir}/python*/site-packages/mesonbuild/dependencies/__pycache__/mpi.cpython*
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit meson-routines
+
+# The cross file logic is similar but not identical to that in meson.bbclass,
+# since it's generating for an SDK rather than a cross-compile. Important
+# differences are:
+# - We can't set vars like CC, CXX, etc. yet because they will be filled in with
+#   real paths by meson-setup.sh when the SDK is extracted.
+# - Some overrides aren't needed, since the SDK injects paths that take care of
+#   them.
+def var_list2str(var, d):
+    items = d.getVar(var).split()
+    return items[0] if len(items) == 1 else ', '.join(repr(s) for s in items)
+
+def generate_native_link_template(d):
+    val = ['-L@{OECORE_NATIVE_SYSROOT}${libdir_native}',
+           '-L@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
+           '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${libdir_native}',
+           '-Wl,-rpath-link,@{OECORE_NATIVE_SYSROOT}${base_libdir_native}',
+           '-Wl,--allow-shlib-undefined'
+        ]
+    build_arch = d.getVar('BUILD_ARCH')
+    if 'x86_64' in build_arch:
+        loader = 'ld-linux-x86-64.so.2'
+    elif 'i686' in build_arch:
+        loader = 'ld-linux.so.2'
+    elif 'aarch64' in build_arch:
+        loader = 'ld-linux-aarch64.so.1'
+    elif 'ppc64le' in build_arch:
+        loader = 'ld64.so.2'
+    elif 'loongarch64' in build_arch:
+        loader = 'ld-linux-loongarch-lp64d.so.1'
+
+    if loader:
+        val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader]
+
+    return repr(val)
+
+install_templates() {
+    install -d ${D}${datadir}/meson
+
+    cat >${D}${datadir}/meson/meson.native.template <<EOF
+[binaries]
+c = ${@meson_array('BUILD_CC', d)}
+cpp = ${@meson_array('BUILD_CXX', d)}
+ar = ${@meson_array('BUILD_AR', d)}
+nm = ${@meson_array('BUILD_NM', d)}
+strip = ${@meson_array('BUILD_STRIP', d)}
+readelf = ${@meson_array('BUILD_READELF', d)}
+pkgconfig = 'pkg-config-native'
+
+[built-in options]
+c_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
+c_link_args = ${@generate_native_link_template(d)}
+cpp_args = ['-isystem@{OECORE_NATIVE_SYSROOT}${includedir_native}' , ${@var_list2str('BUILD_OPTIMIZATION', d)}]
+cpp_link_args = ${@generate_native_link_template(d)}
+[properties]
+sys_root = '@OECORE_NATIVE_SYSROOT'
+EOF
+
+    cat >${D}${datadir}/meson/meson.cross.template <<EOF
+[binaries]
+c = @CC
+cpp = @CXX
+ar = @AR
+nm = @NM
+strip = @STRIP
+pkgconfig = 'pkg-config'
+
+[built-in options]
+c_args = @CFLAGS
+c_link_args = @LDFLAGS
+cpp_args = @CPPFLAGS
+cpp_link_args = @LDFLAGS
+
+[properties]
+needs_exe_wrapper = true
+sys_root = @OECORE_TARGET_SYSROOT
+
+[host_machine]
+system = '$host_system'
+cpu_family = '$host_cpu_family'
+cpu = '$host_cpu'
+endian = '$host_endian'
+EOF
+}
+
+do_install:append:class-nativesdk() {
+    host_system=${SDK_OS}
+    host_cpu_family=${@meson_cpu_family("SDK_ARCH", d)}
+    host_cpu=${SDK_ARCH}
+    host_endian=${@meson_endian("SDK", d)}
+    install_templates
+
+    install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
+    install -m 0755 ${WORKDIR}/meson-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
+
+    # We need to wrap the real meson with a thin env setup wrapper.
+    mv ${D}${bindir}/meson ${D}${bindir}/meson.real
+    install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
+}
+
+FILES:${PN}:append:class-nativesdk = "${datadir}/meson ${SDKPATHNATIVE}"
+
+do_install:append:class-native() {
+    host_system=${HOST_OS}
+    host_cpu_family=${@meson_cpu_family("HOST_ARCH", d)}
+    host_cpu=${HOST_ARCH}
+    host_endian=${@meson_endian("HOST", d)}
+    install_templates
+
+    install -d ${D}${datadir}/post-relocate-setup.d
+    install -m 0755 ${WORKDIR}/meson-setup.py ${D}${datadir}/post-relocate-setup.d/
+
+    # We need to wrap the real meson with a thin wrapper that substitues native/cross files
+    # when running in a direct SDK environment.
+    mv ${D}${bindir}/meson ${D}${bindir}/meson.real
+    install -m 0755 ${WORKDIR}/meson-wrapper ${D}${bindir}/meson
+}
diff --git a/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb b/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
index 879c179..2d02927 100644
--- a/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
+++ b/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://mmc.c;beginline=1;endline=20;md5=fae32792e20f4d27ade1c5a762d16b7d"
 
 SRCBRANCH ?= "master"
-SRCREV = "958227890690290ee766aaad1b92f3413f67048c"
+SRCREV = "613495ecaca97a19fa7f8f3ea23306472b36453c"
 
 PV = "0.1+git"
 
diff --git a/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb b/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb
index cdcc766..4b27528 100644
--- a/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb
+++ b/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb
@@ -11,9 +11,9 @@
 DEPENDS = "zlib e2fsprogs util-linux"
 RDEPENDS:mtd-utils-tests += "bash"
 
-PV = "2.1.5"
+PV = "2.1.6"
 
-SRCREV = "3f3b4cc6c3120107e7aaa21c6415772a255ac49c"
+SRCREV = "219e741f40f4801bae263e0b581b64888d887b4a"
 SRC_URI = "git://git.infradead.org/mtd-utils.git;branch=master"
 
 S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb b/poky/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
index dc17de2..dfd66a1 100644
--- a/poky/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
+++ b/poky/meta/recipes-devtools/opkg/opkg-arch-config_1.0.bb
@@ -2,7 +2,6 @@
 HOMEPAGE = "http://code.google.com/p/opkg/"
 LICENSE = "MIT"
 PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r1"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-devtools/perl/files/run-ptest b/poky/meta/recipes-devtools/perl/files/run-ptest
index dad4d42..0547f81 100644
--- a/poky/meta/recipes-devtools/perl/files/run-ptest
+++ b/poky/meta/recipes-devtools/perl/files/run-ptest
@@ -1,2 +1,2 @@
 #!/bin/sh
-cd t && PERL_BUILD_PACKAGING=1 ./TEST | sed -u -e 's|\(.*\) .* ok$|PASS: \1|' -e 's|\(.*\) .* skipped|SKIP: \1|' -e 's|\(.*\) \.\(.*\)|FAIL: \1|'
+{ cd t && PERL_BUILD_PACKAGING=1 ./TEST || echo "FAIL: perl" ; } | sed -u -e 's|\(.*\) .* ok$|PASS: \1|' -e 's|\(.*\) .* skipped|SKIP: \1|' -e 's|\(.*\) \.\(.*\)|FAIL: \1|'
diff --git a/poky/meta/recipes-devtools/perl/liberror-perl_0.17029.bb b/poky/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
index 9585dfc..e54bb11 100644
--- a/poky/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
+++ b/poky/meta/recipes-devtools/perl/liberror-perl_0.17029.bb
@@ -9,7 +9,6 @@
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8f3499d09ee74a050c0319391ff9d100"
 
-PR = "r1"
 
 DEPENDS += "perl"
 
diff --git a/poky/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch b/poky/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch
index 68ccd06..ed1f251 100644
--- a/poky/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch
+++ b/poky/meta/recipes-devtools/perl/liburi-perl/0001-Skip-TODO-test-cases-that-fail.patch
@@ -1,4 +1,4 @@
-From 858daa5047b00e7d5aa795302a9fad5504c8f0b9 Mon Sep 17 00:00:00 2001
+From 5a4271456104bdf027644c81c3a208cde5cf522e Mon Sep 17 00:00:00 2001
 From: Tim Orling <tim.orling@konsulko.com>
 Date: Thu, 17 Nov 2022 16:33:20 -0800
 Subject: [PATCH] Skip TODO test cases that fail
@@ -47,19 +47,19 @@
  {
      my $str = "http://foo/\xE9";
 diff --git a/t/iri.t b/t/iri.t
-index 2eb64b2..9c663c9 100644
+index cf983d6..884b36e 100644
 --- a/t/iri.t
 +++ b/t/iri.t
 @@ -6,7 +6,7 @@ use Test::More;
  use Config qw( %Config );
  
  if (defined $Config{useperlio}) {
--    plan tests=>26;
-+    plan tests=>24;
+-    plan tests=>30;
++    plan tests=>28;
  } else {
-     plan skip_all=>'this perl doesn\'t support PerlIO layers';
+     plan skip_all=>"this perl doesn't support PerlIO layers";
  }
-@@ -60,17 +60,17 @@ is $u->as_iri, "http://➡.ws/";
+@@ -67,17 +67,17 @@ is $u->as_iri, "http://➡.ws/";
  # draft-duerst-iri-bis.txt examples (section 3.7.1):
  is(URI->new("http://www.example.org/D%C3%BCrst")->as_iri, "http://www.example.org/D\xFCrst");
  is(URI->new("http://www.example.org/D%FCrst")->as_iri, "http://www.example.org/D%FCrst");
diff --git a/poky/meta/recipes-devtools/perl/liburi-perl_5.17.bb b/poky/meta/recipes-devtools/perl/liburi-perl_5.17.bb
deleted file mode 100644
index 5e15004..0000000
--- a/poky/meta/recipes-devtools/perl/liburi-perl_5.17.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-SUMMARY = "Perl module to manipulate and access URI strings"
-DESCRIPTION = "This package contains the URI.pm module with friends. \
-The module implements the URI class. URI objects can be used to access \
-and manipulate the various components that make up these strings."
-HOMEPAGE = "https://metacpan.org/dist/URI"
-SECTION = "libs"
-LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d8ca5f628bf2cd180bc4fa044cb8ef41"
-
-SRC_URI = "${CPAN_MIRROR}/authors/id/O/OA/OALDERS/URI-${PV}.tar.gz \
-           file://0001-Skip-TODO-test-cases-that-fail.patch \
-           "
-
-SRC_URI[sha256sum] = "5f7e42b769cb27499113cfae4b786c37d49e7c7d32dbb469602cd808308568f8"
-
-S = "${WORKDIR}/URI-${PV}"
-
-EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
-
-inherit cpan ptest-perl
-
-do_compile() {
-	export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
-	cpan_do_compile
-}
-
-do_install:prepend() {
-	# these tests require "-T" (taint) command line option
-	rm -rf ${B}/t/cwd.t
-	rm -rf ${B}/t/file.t
-}
-
-RDEPENDS:${PN} += "\
-    perl-module-integer \
-    perl-module-mime-base64 \
-"
-
-RDEPENDS:${PN}-ptest += " \
-    libtest-fatal-perl \
-    libtest-needs-perl \
-    libtest-warnings-perl \
-    perl-module-encode \
-    perl-module-encode-encoding \
-    perl-module-extutils-makemaker \
-    perl-module-extutils-mm-unix \
-    perl-module-file-spec-functions \
-    perl-module-net-domain \
-    perl-module-perlio \
-    perl-module-perlio-encoding \
-    perl-module-test \
-    perl-module-test-more \
-    perl-module-utf8 \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/perl/liburi-perl_5.21.bb b/poky/meta/recipes-devtools/perl/liburi-perl_5.21.bb
new file mode 100644
index 0000000..0356469
--- /dev/null
+++ b/poky/meta/recipes-devtools/perl/liburi-perl_5.21.bb
@@ -0,0 +1,56 @@
+SUMMARY = "Perl module to manipulate and access URI strings"
+DESCRIPTION = "This package contains the URI.pm module with friends. \
+The module implements the URI class. URI objects can be used to access \
+and manipulate the various components that make up these strings."
+HOMEPAGE = "https://metacpan.org/dist/URI"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9944b87af51186f848ae558344aded9f"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/O/OA/OALDERS/URI-${PV}.tar.gz \
+           file://0001-Skip-TODO-test-cases-that-fail.patch \
+           "
+
+SRC_URI[sha256sum] = "96265860cd61bde16e8415dcfbf108056de162caa0ac37f81eb695c9d2e0ab77"
+
+S = "${WORKDIR}/URI-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+inherit cpan ptest-perl
+
+do_compile() {
+	export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+	cpan_do_compile
+}
+
+do_install:prepend() {
+	# these tests require "-T" (taint) command line option
+	rm -rf ${B}/t/cwd.t
+	rm -rf ${B}/t/file.t
+}
+
+RDEPENDS:${PN} += "\
+    perl-module-integer \
+    perl-module-mime-base64 \
+"
+
+RDEPENDS:${PN}-ptest += " \
+    libtest-fatal-perl \
+    libtest-needs-perl \
+    libtest-warnings-perl \
+    perl-module-encode \
+    perl-module-encode-encoding \
+    perl-module-extutils-makemaker \
+    perl-module-extutils-mm-unix \
+    perl-module-file-spec-functions \
+    perl-module-net-domain \
+    perl-module-perlio \
+    perl-module-perlio-encoding \
+    perl-module-test \
+    perl-module-test-more \
+    perl-module-utf8 \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/perl/libxml-perl_0.08.bb b/poky/meta/recipes-devtools/perl/libxml-perl_0.08.bb
index 1b03e63..89acb64 100644
--- a/poky/meta/recipes-devtools/perl/libxml-perl_0.08.bb
+++ b/poky/meta/recipes-devtools/perl/libxml-perl_0.08.bb
@@ -6,7 +6,6 @@
 SUMMARY = "Collection of Perl modules for working with XML"
 SECTION = "libs"
 LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
-PR = "r3"
 
 LIC_FILES_CHKSUM = "file://README;beginline=33;endline=35;md5=1705549eef7577a3d6ba71123a1f0ce8"
 
diff --git a/poky/meta/recipes-devtools/perl/perl_5.38.0.bb b/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
index 2103a39..956e4d6 100644
--- a/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
+++ b/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
@@ -38,8 +38,10 @@
 PERL_LIB_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}.0"
 
 PACKAGECONFIG ??= "gdbm"
+PACKAGECONFIG:append:libc-musl = " anylocale"
 PACKAGECONFIG[bdb] = ",-Ui_db,db"
 PACKAGECONFIG[gdbm] = ",-Ui_gdbm,gdbm"
+PACKAGECONFIG[anylocale] = "-Dd_setlocale_accepts_any_locale_name=define,,"
 
 # Don't generate comments in enc2xs output files. They are not reproducible
 export ENC2XS_NO_COMMENTS = "1"
@@ -56,6 +58,7 @@
 do_configure:class-target() {
     ./configure --prefix=${prefix} --libdir=${libdir} \
     --target=${TARGET_SYS} \
+    -Duse64bitint \
     -Duseshrplib \
     -Dusethreads \
     -Dsoname=libperl.so.5 \
diff --git a/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.2.bb b/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.2.bb
deleted file mode 100644
index c6badb1..0000000
--- a/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.2.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "pkgconf provides compiler and linker configuration for development frameworks."
-DESCRIPTION = "pkgconf is a program which helps to configure compiler and linker \
-flags for development frameworks. It is similar to pkg-config from \
-freedesktop.org, providing additional functionality while also maintaining \
-compatibility."
-HOMEPAGE = "http://pkgconf.org"
-BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
-SECTION = "devel"
-PROVIDES += "pkgconfig"
-RPROVIDES:${PN} += "pkgconfig"
-
-# The pkgconf license seems to be functionally equivalent to BSD-2-Clause or
-# ISC, but has different wording, so needs its own name.
-LICENSE = "pkgconf"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2214222ec1a820bd6cc75167a56925e0"
-
-SRC_URI = "\
-    https://distfiles.ariadne.space/pkgconf/pkgconf-${PV}.tar.xz \
-    file://pkg-config-wrapper \
-    file://pkg-config-native.in \
-    file://pkg-config-esdk.in \
-"
-SRC_URI[sha256sum] = "ea5a25ef8f251eb5377ec0e21c75fb61894433cfbdbf0b2559ba33e4c2664401"
-
-inherit autotools
-
-EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/pkgconfig'"
-
-do_install:append () {
-    # Install a wrapper which deals, as much as possible with pkgconf vs
-    # pkg-config compatibility issues.
-    install -m 0755 "${WORKDIR}/pkg-config-wrapper" "${D}${bindir}/pkg-config"
-}
-
-do_install:append:class-native () {
-    # Install a pkg-config-native wrapper that will use the native sysroot instead
-    # of the MACHINE sysroot, for using pkg-config when building native tools.
-    sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
-        < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
-    install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
-    sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
-        -e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
-        < ${WORKDIR}/pkg-config-esdk.in > ${B}/pkg-config-esdk
-    install -m755 ${B}/pkg-config-esdk ${D}${bindir}/pkg-config-esdk
-}
-
-# When using the RPM generated automatic package dependencies, some packages
-# will end up requiring 'pkgconfig(pkg-config)'.  Allow this behavior by
-# specifying an appropriate provide.
-RPROVIDES:${PN} += "pkgconfig(pkg-config)"
-
-# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
-FILES:${PN}-dev:remove = "${datadir}/aclocal"
-FILES:${PN} += "${datadir}/aclocal"
-
-BBCLASSEXTEND += "native nativesdk"
-
-pkgconf_sstate_fixup_esdk () {
-   if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
-       pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
-       mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
-       ln -rs $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
-       sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
-   fi
-}
-
-SSTATEPOSTUNPACKFUNCS:append:class-native = " pkgconf_sstate_fixup_esdk"
diff --git a/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.3.bb b/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.3.bb
new file mode 100644
index 0000000..5aa5a19
--- /dev/null
+++ b/poky/meta/recipes-devtools/pkgconf/pkgconf_2.0.3.bb
@@ -0,0 +1,67 @@
+SUMMARY = "pkgconf provides compiler and linker configuration for development frameworks."
+DESCRIPTION = "pkgconf is a program which helps to configure compiler and linker \
+flags for development frameworks. It is similar to pkg-config from \
+freedesktop.org, providing additional functionality while also maintaining \
+compatibility."
+HOMEPAGE = "http://pkgconf.org"
+BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
+SECTION = "devel"
+PROVIDES += "pkgconfig"
+RPROVIDES:${PN} += "pkgconfig"
+
+# The pkgconf license seems to be functionally equivalent to BSD-2-Clause or
+# ISC, but has different wording, so needs its own name.
+LICENSE = "pkgconf"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2214222ec1a820bd6cc75167a56925e0"
+
+SRC_URI = "\
+    https://distfiles.ariadne.space/pkgconf/pkgconf-${PV}.tar.xz \
+    file://pkg-config-wrapper \
+    file://pkg-config-native.in \
+    file://pkg-config-esdk.in \
+"
+SRC_URI[sha256sum] = "cabdf3c474529854f7ccce8573c5ac68ad34a7e621037535cbc3981f6b23836c"
+
+inherit autotools
+
+EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/pkgconfig'"
+
+do_install:append () {
+    # Install a wrapper which deals, as much as possible with pkgconf vs
+    # pkg-config compatibility issues.
+    install -m 0755 "${WORKDIR}/pkg-config-wrapper" "${D}${bindir}/pkg-config"
+}
+
+do_install:append:class-native () {
+    # Install a pkg-config-native wrapper that will use the native sysroot instead
+    # of the MACHINE sysroot, for using pkg-config when building native tools.
+    sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
+        < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
+    install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
+    sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
+        -e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
+        < ${WORKDIR}/pkg-config-esdk.in > ${B}/pkg-config-esdk
+    install -m755 ${B}/pkg-config-esdk ${D}${bindir}/pkg-config-esdk
+}
+
+# When using the RPM generated automatic package dependencies, some packages
+# will end up requiring 'pkgconfig(pkg-config)'.  Allow this behavior by
+# specifying an appropriate provide.
+RPROVIDES:${PN} += "pkgconfig(pkg-config)"
+
+# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
+FILES:${PN}-dev:remove = "${datadir}/aclocal"
+FILES:${PN} += "${datadir}/aclocal"
+
+BBCLASSEXTEND += "native nativesdk"
+
+pkgconf_sstate_fixup_esdk () {
+   if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
+       pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
+       mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
+       ln -rs $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
+       sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
+   fi
+}
+
+SSTATEPOSTUNPACKFUNCS:append:class-native = " pkgconf_sstate_fixup_esdk"
diff --git a/poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb b/poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb
new file mode 100644
index 0000000..14eda1d
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Unbearably fast runtime type checking in pure Python."
+HOMEPAGE = "https://beartype.readthedocs.io"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e40b52d8eb5553aa8f705cdd3f979d69"
+
+SRC_URI[sha256sum] = "2af6a8d8a7267ccf7d271e1a3bd908afbc025d2a09aa51123567d7d7b37438df"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-booleanpy_4.0.bb b/poky/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-booleanpy_4.0.bb
rename to poky/meta/recipes-devtools/python/python3-booleanpy_4.0.bb
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-click/run-ptest b/poky/meta/recipes-devtools/python/python3-click/run-ptest
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-click/run-ptest
rename to poky/meta/recipes-devtools/python/python3-click/run-ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-click_8.1.7.bb b/poky/meta/recipes-devtools/python/python3-click_8.1.7.bb
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-click_8.1.7.bb
rename to poky/meta/recipes-devtools/python/python3-click_8.1.7.bb
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.3.bb b/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.3.bb
deleted file mode 100644
index 1b499e0..0000000
--- a/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.3.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Test vectors for the cryptography package."
-HOMEPAGE = "https://cryptography.io/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0 | BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
-                    file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
-                    file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b"
-
-# NOTE: Make sure to keep this recipe at the same version as python3-cryptography
-#       Upgrade both recipes at the same time
-
-SRC_URI[sha256sum] = "80de0452c4b34f56f5518e81ebd75b6b905f5728aaed521d42e41f4ebc8a43fb"
-
-PYPI_PACKAGE = "cryptography_vectors"
-
-inherit pypi python_setuptools_build_meta
-
-DEPENDS += " \
-    ${PYTHON_PN}-cryptography \
-"
-
-do_install:append () {
-	# Remove the sha256 checksum lines for pycache files
-	sed ${D}${PYTHON_SITEPACKAGES_DIR}/cryptography_vectors-${PV}.dist-info/RECORD -e '/__pycache__/d' -i
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-UPSTREAM_CHECK_REGEX = ""
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb b/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb
new file mode 100644
index 0000000..6b5d8ad
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Test vectors for the cryptography package."
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+                    file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+                    file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b"
+
+# NOTE: Make sure to keep this recipe at the same version as python3-cryptography
+#       Upgrade both recipes at the same time
+
+SRC_URI[sha256sum] = "440af2813ea7aeb52181ec651a36d9ae8f0976e8b3a62b411a800fe6fa57a19e"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+    ${PYTHON_PN}-cryptography \
+"
+
+do_install:append () {
+	# Remove the sha256 checksum lines for pycache files
+	sed ${D}${PYTHON_SITEPACKAGES_DIR}/cryptography_vectors-${PV}.dist-info/RECORD -e '/__pycache__/d' -i
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography_41.0.3.bb b/poky/meta/recipes-devtools/python/python3-cryptography_41.0.3.bb
deleted file mode 100644
index b6ea660..0000000
--- a/poky/meta/recipes-devtools/python/python3-cryptography_41.0.3.bb
+++ /dev/null
@@ -1,70 +0,0 @@
-SUMMARY = "Provides cryptographic recipes and primitives to python developers"
-HOMEPAGE = "https://cryptography.io/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0 | BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
-                    file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
-                    file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b \
-                   "
-LDSHARED += "-pthread"
-
-SRC_URI[sha256sum] = "6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"
-
-SRC_URI += "file://0001-pyproject.toml-remove-benchmark-disable-option.patch \
-            file://0001-Fix-include-directory-when-cross-compiling-9129.patch \
-            file://check-memfree.py \
-            file://run-ptest \
-           "
-
-require ${BPN}-crates.inc
-
-inherit pypi python_setuptools3_rust cargo-update-recipe-crates pkgconfig
-
-DEPENDS += " \
-    ${PYTHON_PN}-cffi-native \
-"
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-cffi \
-"
-
-RDEPENDS:${PN}:append:class-target = " \
-    ${PYTHON_PN}-numbers \
-    ${PYTHON_PN}-threading \
-"
-
-RDEPENDS:${PN}-ptest += " \
-    ${PYTHON_PN}-bcrypt \
-    ${PYTHON_PN}-cryptography-vectors (= ${PV}) \
-    ${PYTHON_PN}-hypothesis \
-    ${PYTHON_PN}-iso8601 \
-    ${PYTHON_PN}-pretend \
-    ${PYTHON_PN}-psutil \
-    ${PYTHON_PN}-pytest \
-    ${PYTHON_PN}-unittest-automake-output \
-    ${PYTHON_PN}-pytest-subtests \
-    ${PYTHON_PN}-pytz \
-"
-
-inherit ptest
-
-do_install_ptest() {
-    install -D ${WORKDIR}/check-memfree.py ${D}${PTEST_PATH}/
-    install -d ${D}${PTEST_PATH}/tests
-    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-    # remove test_x509.py as it needs benchmark and we don't
-    # want to introduce the benchmark dependency
-    rm -rf ${D}${PTEST_PATH}/tests/bench/test_x509.py
-    install -d ${D}${PTEST_PATH}/tests/hazmat
-    cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
-    cp -r ${S}/pyproject.toml ${D}${PTEST_PATH}/
-}
-
-FILES:${PN}-ptest += " \
-    ${PTEST_PATH}/check-memfree.py \
-"
-FILES:${PN}-dbg += " \
-    ${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}/hazmat/bindings/.debug \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb b/poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb
new file mode 100644
index 0000000..9497778
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb
@@ -0,0 +1,70 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
+                    file://LICENSE.APACHE;md5=4e168cce331e5c827d4c2b68a6200e1b \
+                    file://LICENSE.BSD;md5=5ae30ba4123bc4f2fa49aa0b0dce887b \
+                   "
+LDSHARED += "-pthread"
+
+SRC_URI[sha256sum] = "7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"
+
+SRC_URI += "file://0001-pyproject.toml-remove-benchmark-disable-option.patch \
+            file://0001-Fix-include-directory-when-cross-compiling-9129.patch \
+            file://check-memfree.py \
+            file://run-ptest \
+           "
+
+require ${BPN}-crates.inc
+
+inherit pypi python_setuptools3_rust cargo-update-recipe-crates pkgconfig
+
+DEPENDS += " \
+    ${PYTHON_PN}-cffi-native \
+"
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-cffi \
+"
+
+RDEPENDS:${PN}:append:class-target = " \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-threading \
+"
+
+RDEPENDS:${PN}-ptest += " \
+    ${PYTHON_PN}-bcrypt \
+    ${PYTHON_PN}-cryptography-vectors (= ${PV}) \
+    ${PYTHON_PN}-hypothesis \
+    ${PYTHON_PN}-iso8601 \
+    ${PYTHON_PN}-pretend \
+    ${PYTHON_PN}-psutil \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-unittest-automake-output \
+    ${PYTHON_PN}-pytest-subtests \
+    ${PYTHON_PN}-pytz \
+"
+
+inherit ptest
+
+do_install_ptest() {
+    install -D ${WORKDIR}/check-memfree.py ${D}${PTEST_PATH}/
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+    # remove test_x509.py as it needs benchmark and we don't
+    # want to introduce the benchmark dependency
+    rm -rf ${D}${PTEST_PATH}/tests/bench/test_x509.py
+    install -d ${D}${PTEST_PATH}/tests/hazmat
+    cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
+    cp -r ${S}/pyproject.toml ${D}${PTEST_PATH}/
+}
+
+FILES:${PN}-ptest += " \
+    ${PTEST_PATH}/check-memfree.py \
+"
+FILES:${PN}-dbg += " \
+    ${PYTHON_SITEPACKAGES_DIR}/${SRCNAME}/hazmat/bindings/.debug \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-dtschema_2023.6.1.bb b/poky/meta/recipes-devtools/python/python3-dtschema_2023.6.1.bb
deleted file mode 100644
index 0c2c156..0000000
--- a/poky/meta/recipes-devtools/python/python3-dtschema_2023.6.1.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Tooling for devicetree validation using YAML and jsonschema"
-HOMEPAGE = "https://github.com/devicetree-org/dt-schema"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=457495c8fa03540db4a576bf7869e811"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE = "dtschema"
-
-SRC_URI[sha256sum] = "d9dc11cea6a46ae2ee5ac4a5a1c7da7cb3704417cb390881820460f7c61eb784"
-
-DEPENDS += "python3-setuptools-scm-native"
-RDEPENDS:${PN} += "\
-        python3-dtc \
-        python3-jsonschema \
-        python3-rfc3987 \
-        python3-ruamel-yaml \
-        "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-dtschema_2023.7.bb b/poky/meta/recipes-devtools/python/python3-dtschema_2023.7.bb
new file mode 100644
index 0000000..c1dc3e0
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-dtschema_2023.7.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Tooling for devicetree validation using YAML and jsonschema"
+HOMEPAGE = "https://github.com/devicetree-org/dt-schema"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=457495c8fa03540db4a576bf7869e811"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "dtschema"
+
+SRC_URI[sha256sum] = "de7cd73a35244cf76a8cdd9919bbeb31f362aa5744f3c76c80e0e612489dd0c0"
+
+DEPENDS += "python3-setuptools-scm-native"
+RDEPENDS:${PN} += "\
+        python3-dtc \
+        python3-jsonschema \
+        python3-rfc3987 \
+        python3-ruamel-yaml \
+        "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-git_3.1.34.bb b/poky/meta/recipes-devtools/python/python3-git_3.1.34.bb
deleted file mode 100644
index 308c787..0000000
--- a/poky/meta/recipes-devtools/python/python3-git_3.1.34.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Python library used to interact with Git repositories"
-DESCRIPTION = "GitPython provides object model read and write access to \
-a git repository. Access repository information conveniently, alter the \
-index directly, handle remotes, or go down to low-level object database \
-access with big-files support."
-HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
-
-PYPI_PACKAGE = "GitPython"
-
-inherit pypi python_setuptools_build_meta
-
-SRC_URI[sha256sum] = "85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd"
-
-DEPENDS += " ${PYTHON_PN}-gitdb"
-
-RDEPENDS:${PN} += " \
-                   ${PYTHON_PN}-datetime \
-                   ${PYTHON_PN}-gitdb \
-                   ${PYTHON_PN}-io \
-                   ${PYTHON_PN}-logging \
-                   ${PYTHON_PN}-math \
-                   ${PYTHON_PN}-netclient \
-                   ${PYTHON_PN}-stringold \
-                   ${PYTHON_PN}-unittest \
-                   ${PYTHON_PN}-unixadmin \
-                   git \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-git_3.1.36.bb b/poky/meta/recipes-devtools/python/python3-git_3.1.36.bb
new file mode 100644
index 0000000..ab1b0f2
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-git_3.1.36.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Python library used to interact with Git repositories"
+DESCRIPTION = "GitPython provides object model read and write access to \
+a git repository. Access repository information conveniently, alter the \
+index directly, handle remotes, or go down to low-level object database \
+access with big-files support."
+HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
+
+PYPI_PACKAGE = "GitPython"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "4bb0c2a6995e85064140d31a33289aa5dce80133a23d36fcd372d716c54d3ebf"
+
+DEPENDS += " ${PYTHON_PN}-gitdb"
+
+RDEPENDS:${PN} += " \
+                   ${PYTHON_PN}-datetime \
+                   ${PYTHON_PN}-gitdb \
+                   ${PYTHON_PN}-io \
+                   ${PYTHON_PN}-logging \
+                   ${PYTHON_PN}-math \
+                   ${PYTHON_PN}-netclient \
+                   ${PYTHON_PN}-stringold \
+                   ${PYTHON_PN}-unittest \
+                   ${PYTHON_PN}-unixadmin \
+                   git \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-hypothesis_6.84.0.bb b/poky/meta/recipes-devtools/python/python3-hypothesis_6.84.0.bb
deleted file mode 100644
index 8e3f6c0..0000000
--- a/poky/meta/recipes-devtools/python/python3-hypothesis_6.84.0.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "A library for property-based testing"
-HOMEPAGE = "https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python"
-LICENSE = "MPL-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4ee62c16ebd0f4f99d906f36b7de8c3c"
-
-PYPI_PACKAGE = "hypothesis"
-
-inherit pypi setuptools3 ptest
-
-SRC_URI += " \
-    file://run-ptest \
-    file://test_binary_search.py \
-    file://test_rle.py \
-    "
-
-SRC_URI[sha256sum] = "446ecc9665a23fc67a6d32bafbe4233d77fef10eb90d4ede8ab1e76474a63215"
-
-RDEPENDS:${PN} += " \
-    python3-attrs \
-    python3-compression \
-    python3-core \
-    python3-json \
-    python3-pytest \
-    python3-sortedcontainers \
-    python3-statistics \
-    python3-unittest \
-    "
-
-RDEPENDS:${PN}-ptest += " \
-    ${PYTHON_PN}-unittest-automake-output \
-    "
-
-do_install_ptest() {
-    install -d ${D}${PTEST_PATH}/examples
-    install -m 0755 ${WORKDIR}/test_binary_search.py ${D}${PTEST_PATH}/examples/
-    install -m 0755 ${WORKDIR}/test_rle.py ${D}${PTEST_PATH}/examples/
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb b/poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb
new file mode 100644
index 0000000..6ec1457
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb
@@ -0,0 +1,39 @@
+SUMMARY = "A library for property-based testing"
+HOMEPAGE = "https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4ee62c16ebd0f4f99d906f36b7de8c3c"
+
+PYPI_PACKAGE = "hypothesis"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+    file://run-ptest \
+    file://test_binary_search.py \
+    file://test_rle.py \
+    "
+
+SRC_URI[sha256sum] = "e5d75d70f5a4fc372cddf03ec6141237a0a270ed106aeb2156a4984f06d37b0f"
+
+RDEPENDS:${PN} += " \
+    python3-attrs \
+    python3-compression \
+    python3-core \
+    python3-json \
+    python3-pytest \
+    python3-sortedcontainers \
+    python3-statistics \
+    python3-unittest \
+    "
+
+RDEPENDS:${PN}-ptest += " \
+    ${PYTHON_PN}-unittest-automake-output \
+    "
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/examples
+    install -m 0755 ${WORKDIR}/test_binary_search.py ${D}${PTEST_PATH}/examples/
+    install -m 0755 ${WORKDIR}/test_rle.py ${D}${PTEST_PATH}/examples/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-isodate_0.6.1.bb b/poky/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
new file mode 100644
index 0000000..293fb08
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-isodate_0.6.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "ISO 8601 date/time parser"
+HOMEPAGE = "https://github.com/gweis/isodate/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[sha256sum] = "48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+    python3-numbers \
+    python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-jsonschema_4.17.3.bb b/poky/meta/recipes-devtools/python/python3-jsonschema_4.17.3.bb
index 24cde37..77f9492 100644
--- a/poky/meta/recipes-devtools/python/python3-jsonschema_4.17.3.bb
+++ b/poky/meta/recipes-devtools/python/python3-jsonschema_4.17.3.bb
@@ -1,5 +1,5 @@
 SUMMARY = "An implementation of JSON Schema validation for Python"
-HOMEPAGE = "https://github.com/Julian/jsonschema"
+HOMEPAGE = "https://github.com/python-jsonschema/jsonschema"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
                     file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af"
diff --git a/poky/meta/recipes-devtools/python/python3-libarchive-c_4.0.bb b/poky/meta/recipes-devtools/python/python3-libarchive-c_4.0.bb
deleted file mode 100644
index 3c6bc1e..0000000
--- a/poky/meta/recipes-devtools/python/python3-libarchive-c_4.0.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Python interface to libarchive"
-DESCRIPTION = "A Python interface to libarchive. It uses the standard ctypes module to \
-    dynamically load and access the C library."
-HOMEPAGE = "https://github.com/Changaco/python-libarchive-c"
-LICENSE = "CC0-1.0"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=bcab380227a83bc147350b40a81e6ffc"
-
-PYPI_PACKAGE = "libarchive-c"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "a5b41ade94ba58b198d778e68000f6b7de41da768de7140c984f71d7fa8416e5"
-
-RDEPENDS:${PN} += "\
-  libarchive \
-  ${PYTHON_PN}-ctypes \
-  ${PYTHON_PN}-mmap \
-  ${PYTHON_PN}-logging \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/python/python3-libarchive-c_5.0.bb b/poky/meta/recipes-devtools/python/python3-libarchive-c_5.0.bb
new file mode 100644
index 0000000..5ada76f
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-libarchive-c_5.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python interface to libarchive"
+DESCRIPTION = "A Python interface to libarchive. It uses the standard ctypes module to \
+    dynamically load and access the C library."
+HOMEPAGE = "https://github.com/Changaco/python-libarchive-c"
+LICENSE = "CC0-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=bcab380227a83bc147350b40a81e6ffc"
+
+PYPI_PACKAGE = "libarchive-c"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "d673f56673d87ec740d1a328fa205cafad1d60f5daca4685594deb039d32b159"
+
+RDEPENDS:${PN} += "\
+  libarchive \
+  ${PYTHON_PN}-ctypes \
+  ${PYTHON_PN}-mmap \
+  ${PYTHON_PN}-logging \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression/run-ptest b/poky/meta/recipes-devtools/python/python3-license-expression/run-ptest
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression/run-ptest
rename to poky/meta/recipes-devtools/python/python3-license-expression/run-ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_30.1.1.bb b/poky/meta/recipes-devtools/python/python3-license-expression_30.1.1.bb
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_30.1.1.bb
rename to poky/meta/recipes-devtools/python/python3-license-expression_30.1.1.bb
diff --git a/poky/meta/recipes-devtools/python/python3-numpy/disable_blas.patch b/poky/meta/recipes-devtools/python/python3-numpy/disable_blas.patch
deleted file mode 100644
index 09d65e8..0000000
--- a/poky/meta/recipes-devtools/python/python3-numpy/disable_blas.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-We've seen reproducibility failures where it appears an extra -O3 compiler flag ends
-up in the multiarray library compilation. This can only really have come through
-extra_info since it only affects just this library. Rather than try and track
-down exactly where this came from in a rabbit warren of code, just disable
-this since we don't have any of the dependencies.
-
-Upstream-Status: Inappropriate [OE specific config hack]
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: numpy-1.25.2/numpy/core/setup.py
-===================================================================
---- numpy-1.25.2.orig/numpy/core/setup.py
-+++ numpy-1.25.2/numpy/core/setup.py
-@@ -755,22 +755,7 @@ def configuration(parent_package='',top_
-             join('src', 'common', 'npy_cpu_features.c'),
-             ]
- 
--    if os.environ.get('NPY_USE_BLAS_ILP64', "0") != "0":
--        blas_info = get_info('blas_ilp64_opt', 2)
--    else:
--        blas_info = get_info('blas_opt', 0)
--
--    have_blas = blas_info and ('HAVE_CBLAS', None) in blas_info.get('define_macros', [])
--
--    if have_blas:
--        extra_info = blas_info
--        # These files are also in MANIFEST.in so that they are always in
--        # the source distribution independently of HAVE_CBLAS.
--        common_src.extend([join('src', 'common', 'cblasfuncs.c'),
--                           join('src', 'common', 'python_xerbla.c'),
--                          ])
--    else:
--        extra_info = {}
-+    extra_info = {}
- 
-     #######################################################################
-     #             _multiarray_umath module - multiarray part              #
diff --git a/poky/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch b/poky/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
new file mode 100644
index 0000000..d952aed
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
@@ -0,0 +1,33 @@
+This regex decides whether to use O3 opimisation on numpy or not.
+
+It includes "od", which happens to be a substring of "reproducible"
+but not "qemux86-world". 
+
+The regex will run against all compiler options including things like:
+
+-fmacro-prefix-map=/XXX/build/tmp/work/core2-64-poky-linux/python3-numpy/1.26.0/numpy-1.26.0=/usr/src/debug/python3-numpy/1.26.0-r0
+
+i.e. including build paths.
+
+Reduce the regex to something deterministic for our builds, assuming
+nobody builds in /home/debug:full/
+
+The autobuilder race depended upon whether qemux86-world or the
+reproducible target ran first and won the race to populate sstate.
+
+Upstream-Status: Inappropriate [upstream have dropped distutils and switched to meson]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Index: numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+===================================================================
+--- numpy-1.26.0.orig/numpy/distutils/ccompiler_opt.py
++++ numpy-1.26.0/numpy/distutils/ccompiler_opt.py
+@@ -990,7 +990,7 @@ class _CCompiler:
+             ("cc_is_nocc",     "", ""),
+         )
+         detect_args = (
+-           ("cc_has_debug",  ".*(O0|Od|ggdb|coverage|debug:full).*", ""),
++           ("cc_has_debug",  ".*debug:full.*", ""),
+            ("cc_has_native",
+                 ".*(-march=native|-xHost|/QxHost|-mcpu=a64fx).*", ""),
+            # in case if the class run with -DNPY_DISABLE_OPTIMIZATION
diff --git a/poky/meta/recipes-devtools/python/python3-numpy_1.25.2.bb b/poky/meta/recipes-devtools/python/python3-numpy_1.25.2.bb
deleted file mode 100644
index 4793b23..0000000
--- a/poky/meta/recipes-devtools/python/python3-numpy_1.25.2.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SUMMARY = "A sophisticated Numeric Processing Package for Python"
-HOMEPAGE = "https://numpy.org/"
-DESCRIPTION = "NumPy is the fundamental package needed for scientific computing with Python."
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause & BSD-2-Clause & PSF-2.0 & Apache-2.0 & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7614a5b0073688df53773ec6ec7fe81d"
-
-SRCNAME = "numpy"
-
-SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
-           file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
-           file://0001-numpy-core-Define-RISCV-32-support.patch \
-           file://disable_blas.patch \
-           file://run-ptest \
-           "
-SRC_URI[sha256sum] = "fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"
-
-GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
-UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
-
-DEPENDS += "python3-cython-native"
-
-inherit ptest setuptools3 github-releases
-
-S = "${WORKDIR}/numpy-${PV}"
-
-CLEANBROKEN = "1"
-
-do_compile:prepend() {
-    export NPY_DISABLE_SVML=1
-}
-
-# Unfortunately the following pyc files are non-deterministc due to 'frozenset'
-# being written without strict ordering, even with PYTHONHASHSEED = 0
-# Upstream is discussing ways to solve the issue properly, until then let's
-# just not install the problematic files.
-# More info: http://benno.id.au/blog/2013/01/15/python-determinism
-do_install:append() {
-	rm ${D}${PYTHON_SITEPACKAGES_DIR}/numpy/typing/tests/data/pass/__pycache__/literal.cpython*
-}
-
-FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a ${PYTHON_SITEPACKAGES_DIR}/numpy/random/lib/*.a"
-
-# install what is needed for numpy.test()
-RDEPENDS:${PN} = "${PYTHON_PN}-unittest \
-                  ${PYTHON_PN}-difflib \
-                  ${PYTHON_PN}-pprint \
-                  ${PYTHON_PN}-pickle \
-                  ${PYTHON_PN}-shell \
-                  ${PYTHON_PN}-doctest \
-                  ${PYTHON_PN}-datetime \
-                  ${PYTHON_PN}-distutils \
-                  ${PYTHON_PN}-misc \
-                  ${PYTHON_PN}-mmap \
-                  ${PYTHON_PN}-netclient \
-                  ${PYTHON_PN}-numbers \
-                  ${PYTHON_PN}-pydoc \
-                  ${PYTHON_PN}-pkgutil \
-                  ${PYTHON_PN}-email \
-                  ${PYTHON_PN}-compression \
-                  ${PYTHON_PN}-ctypes \
-                  ${PYTHON_PN}-threading \
-                  ${PYTHON_PN}-multiprocessing \
-                  ${PYTHON_PN}-json \
-"
-RDEPENDS:${PN}-ptest += "${PYTHON_PN}-pytest \
-                         ${PYTHON_PN}-hypothesis \
-                         ${PYTHON_PN}-sortedcontainers \
-                         ${PYTHON_PN}-resource \
-                         ${PYTHON_PN}-typing-extensions \
-                         ldd \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb b/poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb
new file mode 100644
index 0000000..4e1e34e
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb
@@ -0,0 +1,74 @@
+SUMMARY = "A sophisticated Numeric Processing Package for Python"
+HOMEPAGE = "https://numpy.org/"
+DESCRIPTION = "NumPy is the fundamental package needed for scientific computing with Python."
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause & BSD-2-Clause & PSF-2.0 & Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a752eb20459cf74a9d84ee4825e8317c"
+
+SRCNAME = "numpy"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
+           file://0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch \
+           file://0001-numpy-core-Define-RISCV-32-support.patch \
+           file://fix_reproducibility.patch \
+           file://run-ptest \
+           "
+SRC_URI[sha256sum] = "f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf"
+
+GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
+
+DEPENDS += "python3-cython-native"
+
+inherit ptest setuptools3 github-releases
+
+S = "${WORKDIR}/numpy-${PV}"
+
+CLEANBROKEN = "1"
+
+do_compile:prepend() {
+    export NPY_DISABLE_SVML=1
+}
+
+# Unfortunately the following pyc files are non-deterministc due to 'frozenset'
+# being written without strict ordering, even with PYTHONHASHSEED = 0
+# Upstream is discussing ways to solve the issue properly, until then let's
+# just not install the problematic files.
+# More info: http://benno.id.au/blog/2013/01/15/python-determinism
+do_install:append() {
+	rm ${D}${PYTHON_SITEPACKAGES_DIR}/numpy/typing/tests/data/pass/__pycache__/literal.cpython*
+}
+
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/numpy/core/lib/*.a ${PYTHON_SITEPACKAGES_DIR}/numpy/random/lib/*.a"
+
+# install what is needed for numpy.test()
+RDEPENDS:${PN} = "${PYTHON_PN}-unittest \
+                  ${PYTHON_PN}-difflib \
+                  ${PYTHON_PN}-pprint \
+                  ${PYTHON_PN}-pickle \
+                  ${PYTHON_PN}-shell \
+                  ${PYTHON_PN}-doctest \
+                  ${PYTHON_PN}-datetime \
+                  ${PYTHON_PN}-distutils \
+                  ${PYTHON_PN}-misc \
+                  ${PYTHON_PN}-mmap \
+                  ${PYTHON_PN}-netclient \
+                  ${PYTHON_PN}-numbers \
+                  ${PYTHON_PN}-pydoc \
+                  ${PYTHON_PN}-pkgutil \
+                  ${PYTHON_PN}-email \
+                  ${PYTHON_PN}-compression \
+                  ${PYTHON_PN}-ctypes \
+                  ${PYTHON_PN}-threading \
+                  ${PYTHON_PN}-multiprocessing \
+                  ${PYTHON_PN}-json \
+"
+RDEPENDS:${PN}-ptest += "${PYTHON_PN}-pytest \
+                         ${PYTHON_PN}-hypothesis \
+                         ${PYTHON_PN}-sortedcontainers \
+                         ${PYTHON_PN}-resource \
+                         ${PYTHON_PN}-typing-extensions \
+                         ldd \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-ply_3.11.bb b/poky/meta/recipes-devtools/python/python3-ply_3.11.bb
index 99c037b..4a559e4 100644
--- a/poky/meta/recipes-devtools/python/python3-ply_3.11.bb
+++ b/poky/meta/recipes-devtools/python/python3-ply_3.11.bb
@@ -15,4 +15,4 @@
     ${PYTHON_PN}-shell \
 "
 
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-pycryptodome_3.18.0.bb b/poky/meta/recipes-devtools/python/python3-pycryptodome_3.18.0.bb
deleted file mode 100644
index a1e4b42..0000000
--- a/poky/meta/recipes-devtools/python/python3-pycryptodome_3.18.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require python-pycryptodome.inc
-inherit setuptools3
-
-SRC_URI[sha256sum] = "c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413"
-
diff --git a/poky/meta/recipes-devtools/python/python3-pycryptodome_3.19.0.bb b/poky/meta/recipes-devtools/python/python3-pycryptodome_3.19.0.bb
new file mode 100644
index 0000000..92fe1aa
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pycryptodome_3.19.0.bb
@@ -0,0 +1,5 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"
+
diff --git a/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.18.0.bb b/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.18.0.bb
deleted file mode 100644
index cbbc17a..0000000
--- a/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.18.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-pycryptodome.inc
-inherit setuptools3
-
-SRC_URI[sha256sum] = "3e3ecb5fe979e7c1bb0027e518340acf7ee60415d79295e5251d13c68dde576e"
-
-FILES:${PN}-tests = " \
-    ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
-    ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/__pycache__/ \
-"
diff --git a/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.19.0.bb b/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.19.0.bb
new file mode 100644
index 0000000..87aff01
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pycryptodomex_3.19.0.bb
@@ -0,0 +1,9 @@
+require python-pycryptodome.inc
+inherit setuptools3
+
+SRC_URI[sha256sum] = "af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6"
+
+FILES:${PN}-tests = " \
+    ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
+    ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/__pycache__/ \
+"
diff --git a/poky/meta/recipes-devtools/python/python3-pyelftools_0.29.bb b/poky/meta/recipes-devtools/python/python3-pyelftools_0.29.bb
deleted file mode 100644
index c55682e..0000000
--- a/poky/meta/recipes-devtools/python/python3-pyelftools_0.29.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "pyelftools is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
-HOMEPAGE = "https://github.com/eliben/pyelftools"
-SECTION = "devel/python"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5ce2a2b07fca326bc7c146d10105ccfc"
-
-SRC_URI[sha256sum] = "ec761596aafa16e282a31de188737e5485552469ac63b60cfcccf22263fd24ff"
-
-PYPI_PACKAGE = "pyelftools"
-
-inherit pypi setuptools3
-
-BBCLASSEXTEND = "native"
-
-RDEPENDS:${PN} += "${PYTHON_PN}-debugger ${PYTHON_PN}-pprint"
diff --git a/poky/meta/recipes-devtools/python/python3-pyelftools_0.30.bb b/poky/meta/recipes-devtools/python/python3-pyelftools_0.30.bb
new file mode 100644
index 0000000..e976d6c
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pyelftools_0.30.bb
@@ -0,0 +1,15 @@
+SUMMARY = "pyelftools is a pure-Python library for parsing and analyzing ELF files and DWARF debugging information"
+HOMEPAGE = "https://github.com/eliben/pyelftools"
+SECTION = "devel/python"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ce2a2b07fca326bc7c146d10105ccfc"
+
+SRC_URI[sha256sum] = "2fc92b0d534f8b081f58c7c370967379123d8e00984deb53c209364efd575b40"
+
+PYPI_PACKAGE = "pyelftools"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS:${PN} += "${PYTHON_PN}-debugger ${PYTHON_PN}-pprint"
diff --git a/poky/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch b/poky/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch
deleted file mode 100644
index 0f2465b..0000000
--- a/poky/meta/recipes-devtools/python/python3-pygobject/0001-Do-not-build-tests.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From c125a806de951359ab7e302b0584f7c92fa451ad Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 12 Apr 2019 16:25:58 +0200
-Subject: [PATCH] Do not build tests
-
-They require installing tests from g-i, which we do not do.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 278fa16f..aacbd4a2 100644
---- a/meson.build
-+++ b/meson.build
-@@ -175,6 +175,6 @@ configure_file(input : 'PKG-INFO.in',
- subdir('gi')
- subdir('pygtkcompat')
- with_tests = get_option('tests')
--if with_tests
--subdir('tests')
--endif
-+#if with_tests
-+#subdir('tests')
-+#endif
--- 
-2.17.1
-
diff --git a/poky/meta/recipes-devtools/python/python3-pygobject_3.44.1.bb b/poky/meta/recipes-devtools/python/python3-pygobject_3.44.1.bb
deleted file mode 100644
index 797a7ce..0000000
--- a/poky/meta/recipes-devtools/python/python3-pygobject_3.44.1.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "Python GObject bindings"
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/pygobject"
-DESCRIPTION = "PyGObject is a Python package which provides bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more."
-SECTION = "devel/python"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-
-GNOMEBASEBUILDCLASS = "meson"
-GIR_MESON_OPTION = ""
-
-inherit gnomebase setuptools3-base gobject-introspection upstream-version-is-even
-
-python() {
-    if d.getVar('CLASSOVERRIDE') == "class-target" and not bb.utils.to_boolean(d.getVar("GI_DATA_ENABLED")):
-        raise bb.parse.SkipRecipe("GI not available")
-}
-
-DEPENDS += "python3 glib-2.0"
-
-SRCNAME="pygobject"
-
-SRC_URI = " \
-    http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz \
-    file://0001-Do-not-build-tests.patch \
-"
-SRC_URI[sha256sum] = "3c6805d1321be90cc32e648215a562430e0d3d6edcda8f4c5e7a9daffcad5710"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
-
-RDEPENDS:${PN} += " \
-    python3-io \
-    python3-pkgutil \
-"
-
-# python3-pycairo is checked on configuration -> DEPENDS
-# we don't link against python3-pycairo -> RDEPENDS
-PACKAGECONFIG[cairo] = "-Dpycairo=enabled,-Dpycairo=disabled, cairo python3-pycairo, python3-pycairo"
-
-BBCLASSEXTEND = "native"
-PACKAGECONFIG:class-native = ""
diff --git a/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb b/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb
new file mode 100644
index 0000000..28129fd
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Python GObject bindings"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/pygobject"
+DESCRIPTION = "PyGObject is a Python package which provides bindings for GObject based libraries such as GTK, GStreamer, WebKitGTK, GLib, GIO and many more."
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+GNOMEBASEBUILDCLASS = "meson"
+GIR_MESON_OPTION = ""
+
+inherit gnomebase setuptools3-base gobject-introspection upstream-version-is-even
+
+python() {
+    if d.getVar('CLASSOVERRIDE') == "class-target" and not bb.utils.to_boolean(d.getVar("GI_DATA_ENABLED")):
+        raise bb.parse.SkipRecipe("GI not available")
+}
+
+DEPENDS += "python3 glib-2.0"
+
+SRCNAME="pygobject"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "426008b2dad548c9af1c7b03b59df0440fde5c33f38fb5406b103a43d653cafc"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+PACKAGECONFIG ??= "${@bb.utils.contains_any('DISTRO_FEATURES', [ 'directfb', 'wayland', 'x11' ], 'cairo', '', d)}"
+
+RDEPENDS:${PN} += " \
+    python3-io \
+    python3-pkgutil \
+"
+
+# python3-pycairo is checked on configuration -> DEPENDS
+# we don't link against python3-pycairo -> RDEPENDS
+PACKAGECONFIG[cairo] = "-Dpycairo=enabled,-Dpycairo=disabled, cairo python3-pycairo, python3-pycairo"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,"
+
+BBCLASSEXTEND = "native"
+PACKAGECONFIG:class-native = ""
diff --git a/poky/meta/recipes-devtools/python/python3-pytest_7.4.1.bb b/poky/meta/recipes-devtools/python/python3-pytest_7.4.1.bb
deleted file mode 100644
index e9ded98..0000000
--- a/poky/meta/recipes-devtools/python/python3-pytest_7.4.1.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "Simple powerful testing with python"
-HOMEPAGE = "https://pypi.org/project/pytest/"
-DESCRIPTION = "The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries."
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bd27e41b6550fe0fc45356d1d81ee37c"
-
-SRC_URI[sha256sum] = "2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"
-
-DEPENDS += "python3-setuptools-scm-native"
-
-inherit update-alternatives pypi python_setuptools_build_meta
-
-RDEPENDS:${PN} += " \
-    ${PYTHON_PN}-atomicwrites \
-    ${PYTHON_PN}-attrs \
-    ${PYTHON_PN}-debugger \
-    ${PYTHON_PN}-doctest \
-    ${PYTHON_PN}-importlib-metadata \
-    ${PYTHON_PN}-iniconfig \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-more-itertools \
-    ${PYTHON_PN}-packaging \
-    ${PYTHON_PN}-pathlib2 \
-    ${PYTHON_PN}-pluggy \
-    ${PYTHON_PN}-py \
-    ${PYTHON_PN}-setuptools \
-    ${PYTHON_PN}-six \
-    ${PYTHON_PN}-tomllib \
-    ${PYTHON_PN}-wcwidth \
-"
-
-ALTERNATIVE:${PN} += "py.test pytest"
-
-NATIVE_LINK_NAME[pytest] = "${bindir}/pytest"
-ALTERNATIVE_TARGET[pytest] = "${bindir}/pytest"
-
-ALTERNATIVE_LINK_NAME[py.test] = "${bindir}/py.test"
-ALTERNATIVE_TARGET[py.test] = "${bindir}/py.test"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb b/poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb
new file mode 100644
index 0000000..710aa51
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Simple powerful testing with python"
+HOMEPAGE = "https://pypi.org/project/pytest/"
+DESCRIPTION = "The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bd27e41b6550fe0fc45356d1d81ee37c"
+
+SRC_URI[sha256sum] = "a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+inherit update-alternatives pypi python_setuptools_build_meta
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-atomicwrites \
+    ${PYTHON_PN}-attrs \
+    ${PYTHON_PN}-debugger \
+    ${PYTHON_PN}-doctest \
+    ${PYTHON_PN}-importlib-metadata \
+    ${PYTHON_PN}-iniconfig \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-more-itertools \
+    ${PYTHON_PN}-packaging \
+    ${PYTHON_PN}-pathlib2 \
+    ${PYTHON_PN}-pluggy \
+    ${PYTHON_PN}-py \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-tomllib \
+    ${PYTHON_PN}-wcwidth \
+"
+
+ALTERNATIVE:${PN} += "py.test pytest"
+
+NATIVE_LINK_NAME[pytest] = "${bindir}/pytest"
+ALTERNATIVE_TARGET[pytest] = "${bindir}/pytest"
+
+ALTERNATIVE_LINK_NAME[py.test] = "${bindir}/py.test"
+ALTERNATIVE_TARGET[py.test] = "${bindir}/py.test"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb b/poky/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
new file mode 100644
index 0000000..0951533
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-rdflib_7.0.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "RDFLib is a pure Python package for working with RDF"
+HOMEPAGE = "https://github.com/RDFLib/rdflib"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37d489c0cefe52a17e1d5007e196464a"
+
+SRC_URI[sha256sum] = "9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"
+
+inherit pypi python_poetry_core
+
+RDEPENDS:${PN} += " \
+    ${PYTHON_PN}-isodate \
+    ${PYTHON_PN}-pyparsing \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-xml \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.6.0.bb b/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.6.0.bb
deleted file mode 100644
index f1da4b5..0000000
--- a/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.6.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Setuptools Rust extension plugin"
-DESCRIPTION = "setuptools-rust is a plugin for setuptools to build Rust \
-Python extensions implemented with PyO3 or rust-cpython.\
-\
-Compile and distribute Python extensions written in Rust as easily as if they were written in C."
-HOMEPAGE = "https://github.com/PyO3/setuptools-rust"
-BUGTRACKER = "https://github.com/PyO3/setuptools-rust/issues"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
-
-SRC_URI = "${PYPI_SRC_URI} \
-           https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
-           "
-SRC_URI[sha256sum] = "c86e734deac330597998bfbc08da45187e6b27837e23bd91eadb320732392262"
-
-inherit cargo pypi python_setuptools_build_meta
-
-DEPENDS += "python3-setuptools-scm-native python3-wheel-native"
-
-RDEPENDS:${PN} += " \
-    python3-distutils \
-    python3-json \
-    python3-semantic-version \
-    python3-setuptools \
-    python3-setuptools-scm \
-    python3-shell \
-    python3-toml \
-    python3-typing-extensions \
-    python3-wheel \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb b/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb
new file mode 100644
index 0000000..6392a4d
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Setuptools Rust extension plugin"
+DESCRIPTION = "setuptools-rust is a plugin for setuptools to build Rust \
+Python extensions implemented with PyO3 or rust-cpython.\
+\
+Compile and distribute Python extensions written in Rust as easily as if they were written in C."
+HOMEPAGE = "https://github.com/PyO3/setuptools-rust"
+BUGTRACKER = "https://github.com/PyO3/setuptools-rust/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
+
+SRC_URI = "${PYPI_SRC_URI} \
+           https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
+           "
+SRC_URI[sha256sum] = "c7100999948235a38ae7e555fe199aa66c253dc384b125f5d85473bf81eae3a3"
+
+inherit cargo pypi python_setuptools_build_meta
+
+DEPENDS += "python3-setuptools-scm-native python3-wheel-native"
+# remove when https://github.com/PyO3/setuptools-rust/commit/7ced8d2a8f36e1b4fc41b5544636defb7bd44bdf
+# is included
+DEPENDS += "python3-semantic-version-native"
+
+RDEPENDS:${PN} += " \
+    python3-distutils \
+    python3-json \
+    python3-semantic-version \
+    python3-setuptools \
+    python3-setuptools-scm \
+    python3-shell \
+    python3-toml \
+    python3-typing-extensions \
+    python3-wheel \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb b/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb
index 7961ff7..bb13c65 100644
--- a/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb
@@ -9,7 +9,7 @@
 PYPI_PACKAGE = "setuptools_scm"
 inherit pypi python_setuptools_build_meta
 
-UPSTREAM_CHECK_REGEX = "setuptools_scm-(?P<pver>.*)\.tar"
+UPSTREAM_CHECK_REGEX = "scm-(?P<pver>.*)\.tar"
 
 DEPENDS += "python3-tomli-native python3-packaging-native python3-typing-extensions-native"
 
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch b/poky/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
index 84a9492..9b17dba 100644
--- a/poky/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
+++ b/poky/meta/recipes-devtools/python/python3-setuptools/0001-conditionally-do-not-fetch-code-by-easy_install.patch
@@ -1,4 +1,4 @@
-From c90cc4a07ce6d2b7128e37d811d0c6bbc4b905a6 Mon Sep 17 00:00:00 2001
+From 519e2845014f04b4c23b5cf8f92fc4e5dcf40f20 Mon Sep 17 00:00:00 2001
 From: Hongxu Jia <hongxu.jia@windriver.com>
 Date: Tue, 17 Jul 2018 10:13:38 +0800
 Subject: [PATCH] conditionally do not fetch code by easy_install
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools_68.1.2.bb b/poky/meta/recipes-devtools/python/python3-setuptools_68.1.2.bb
deleted file mode 100644
index a1e84b6..0000000
--- a/poky/meta/recipes-devtools/python/python3-setuptools_68.1.2.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
-HOMEPAGE = "https://pypi.org/project/setuptools"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
-
-inherit pypi python_setuptools_build_meta
-
-SRC_URI:append:class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
-
-SRC_URI += " \
-            file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch"
-
-SRC_URI[sha256sum] = "3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"
-
-DEPENDS += "${PYTHON_PN}"
-
-RDEPENDS:${PN} = "\
-    ${PYTHON_PN}-2to3 \
-    ${PYTHON_PN}-compile \
-    ${PYTHON_PN}-compression \
-    ${PYTHON_PN}-ctypes \
-    ${PYTHON_PN}-email \
-    ${PYTHON_PN}-html \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-netserver \
-    ${PYTHON_PN}-numbers \
-    ${PYTHON_PN}-pickle \
-    ${PYTHON_PN}-pkg-resources \
-    ${PYTHON_PN}-pkgutil \
-    ${PYTHON_PN}-plistlib \
-    ${PYTHON_PN}-shell \
-    ${PYTHON_PN}-stringold \
-    ${PYTHON_PN}-threading \
-    ${PYTHON_PN}-unittest \
-    ${PYTHON_PN}-xml \
-"
-
-BBCLASSEXTEND = "native nativesdk"
-
-# The pkg-resources module can be used by itself, without the package downloader
-# and easy_install. Ship it in a separate package so that it can be used by
-# minimal distributions.
-PACKAGES =+ "${PYTHON_PN}-pkg-resources "
-FILES:${PYTHON_PN}-pkg-resources = "${PYTHON_SITEPACKAGES_DIR}/pkg_resources/*"
-RDEPENDS:${PYTHON_PN}-pkg-resources = "\
-    ${PYTHON_PN}-compression \
-    ${PYTHON_PN}-email \
-    ${PYTHON_PN}-plistlib \
-    ${PYTHON_PN}-pprint \
-"
-
-# This used to use the bootstrap install which didn't compile. Until we bump the
-# tmpdir version we can't compile the native otherwise the sysroot unpack fails
-INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools_68.2.2.bb b/poky/meta/recipes-devtools/python/python3-setuptools_68.2.2.bb
new file mode 100644
index 0000000..06957d7
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-setuptools_68.2.2.bb
@@ -0,0 +1,55 @@
+SUMMARY = "Download, build, install, upgrade, and uninstall Python packages"
+HOMEPAGE = "https://pypi.org/project/setuptools"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI:append:class-native = " file://0001-conditionally-do-not-fetch-code-by-easy_install.patch"
+
+SRC_URI += " \
+            file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch"
+
+SRC_URI[sha256sum] = "4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"
+
+DEPENDS += "${PYTHON_PN}"
+
+RDEPENDS:${PN} = "\
+    ${PYTHON_PN}-2to3 \
+    ${PYTHON_PN}-compile \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-pkg-resources \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-plistlib \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unittest \
+    ${PYTHON_PN}-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+# The pkg-resources module can be used by itself, without the package downloader
+# and easy_install. Ship it in a separate package so that it can be used by
+# minimal distributions.
+PACKAGES =+ "${PYTHON_PN}-pkg-resources "
+FILES:${PYTHON_PN}-pkg-resources = "${PYTHON_SITEPACKAGES_DIR}/pkg_resources/*"
+RDEPENDS:${PYTHON_PN}-pkg-resources = "\
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-plistlib \
+    ${PYTHON_PN}-pprint \
+"
+
+# This used to use the bootstrap install which didn't compile. Until we bump the
+# tmpdir version we can't compile the native otherwise the sysroot unpack fails
+INSTALL_WHEEL_COMPILE_BYTECODE:class-native = "--no-compile-bytecode"
diff --git a/poky/meta/recipes-devtools/python/python3-smmap_5.0.0.bb b/poky/meta/recipes-devtools/python/python3-smmap_5.0.0.bb
deleted file mode 100644
index ea131ef..0000000
--- a/poky/meta/recipes-devtools/python/python3-smmap_5.0.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Python implementation of a sliding window memory map manager"
-DESCRIPTION = "A pure Python implementation of a sliding memory map to \
-help unifying memory mapped access on 32 and 64 bit systems and to help \
-managing resources more efficiently."
-HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
-SECTION = "devel/python"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE = "smmap"
-
-SRC_URI[sha256sum] = "c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"
-
-RDEPENDS:${PN} += "${PYTHON_PN}-codecs \
-                   ${PYTHON_PN}-mmap \
-"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-smmap_6.0.0.bb b/poky/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
new file mode 100644
index 0000000..02c43e0
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-smmap_6.0.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Python implementation of a sliding window memory map manager"
+DESCRIPTION = "A pure Python implementation of a sliding memory map to \
+help unifying memory mapped access on 32 and 64 bit systems and to help \
+managing resources more efficiently."
+HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "smmap"
+
+SRC_URI[sha256sum] = "8d79028ea6cc131da5eab099a5d95a998d43c6779956fffe3b455040911076da"
+
+RDEPENDS:${PN} += "${PYTHON_PN}-codecs \
+                   ${PYTHON_PN}-mmap \
+"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb b/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb
new file mode 100644
index 0000000..f58a138
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Python tool to parse, validate and convert spdx files"
+HOMEPAGE = "https://github.com/spdx/tools-python"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dc7f21ccff0f672f2a7cd6f412ae627d"
+
+SRC_URI[sha256sum] = "c83652cd65b5726058dcbdaab85839dbe484c43ea6f61046137516aa1b8428ae"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit setuptools3 pypi
+
+# Dependency required for pyspdxtools : python3-click
+# Dependencies required for conversion to spdx3 : python3-semantic-version, python3-ply
+RDEPENDS:${PN} += "\
+  python3-core \
+  python3-beartype \
+  python3-click \
+  python3-datetime \
+  python3-json \
+  python3-license-expression \
+  python3-ply \
+  python3-pyyaml \
+  python3-rdflib \
+  python3-semantic-version \
+  python3-uritools \
+  python3-xmltodict \
+  "
diff --git a/poky/meta/recipes-devtools/python/python3-sphinx_7.2.5.bb b/poky/meta/recipes-devtools/python/python3-sphinx_7.2.5.bb
deleted file mode 100644
index f55cc5a..0000000
--- a/poky/meta/recipes-devtools/python/python3-sphinx_7.2.5.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-SUMMARY = "Python documentation generator"
-HOMEPAGE = "http://sphinx-doc.org/"
-SECTION = "devel/python"
-LICENSE = "BSD-2-Clause & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb6ac1b115a1ed24a12d9f15b633993"
-
-SRC_URI[sha256sum] = "1a9290001b75c497fd087e92b0334f1bbfa1a1ae7fddc084990c4b7bd1130b88"
-
-inherit python_flit_core pypi
-UPSTREAM_CHECK_REGEX = "/Sphinx/(?P<pver>(\d+[\.\-_]*)+)/"
-
-do_install:append () {
-	# The cache format of "{None, 'en', 'ja'}" doesn't seem to be consistent (dict ordering?)
-	rm ${D}${libdir}/${PYTHON_DIR}/site-packages/sphinx/writers/__pycache__/*latex*
-}
-
-RDEPENDS:${PN} = "\
-    python3-alabaster \
-    python3-babel \
-    python3-docutils \
-    python3-imagesize \
-    python3-jinja2 \
-    python3-packaging \
-    python3-pygments \
-    python3-requests \
-    python3-snowballstemmer \
-    python3-sphinxcontrib-applehelp \
-    python3-sphinxcontrib-devhelp \
-    python3-sphinxcontrib-htmlhelp \
-    python3-sphinxcontrib-jsmath \
-    python3-sphinxcontrib-qthelp \
-    python3-sphinxcontrib-serializinghtml \
-    "
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb b/poky/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
new file mode 100644
index 0000000..f4ed072
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-sphinx_7.2.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Python documentation generator"
+HOMEPAGE = "http://sphinx-doc.org/"
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5eb6ac1b115a1ed24a12d9f15b633993"
+
+SRC_URI[sha256sum] = "9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"
+
+inherit python_flit_core pypi
+UPSTREAM_CHECK_REGEX = "/Sphinx/(?P<pver>(\d+[\.\-_]*)+)/"
+
+do_install:append () {
+	# The cache format of "{None, 'en', 'ja'}" doesn't seem to be consistent (dict ordering?)
+	rm ${D}${libdir}/${PYTHON_DIR}/site-packages/sphinx/writers/__pycache__/*latex*
+}
+
+RDEPENDS:${PN} = "\
+    python3-alabaster \
+    python3-babel \
+    python3-docutils \
+    python3-imagesize \
+    python3-jinja2 \
+    python3-packaging \
+    python3-pygments \
+    python3-requests \
+    python3-snowballstemmer \
+    python3-sphinxcontrib-applehelp \
+    python3-sphinxcontrib-devhelp \
+    python3-sphinxcontrib-htmlhelp \
+    python3-sphinxcontrib-jsmath \
+    python3-sphinxcontrib-qthelp \
+    python3-sphinxcontrib-serializinghtml \
+    "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.8.7.bb b/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.8.7.bb
deleted file mode 100644
index 9aed0d6..0000000
--- a/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.8.7.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Canonical source for classifiers on PyPI (pypi.org)."
-HOMEPAGE = "https://github.com/pypa/trove-classifiers"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-
-SRC_URI[sha256sum] = "c9f2a0a85d545e5362e967e4f069f56fddfd91215e22ffa48c66fb283521319a"
-
-inherit pypi python_setuptools_build_meta ptest
-
-DEPENDS += " python3-calver-native"
-
-SRC_URI += " \
-        file://run-ptest \
-"
-
-RDEPENDS:${PN}-ptest += " \
-       ${PYTHON_PN}-pytest \
-       ${PYTHON_PN}-unittest-automake-output \
-"
-
-do_install_ptest() {
-      install -d ${D}${PTEST_PATH}/tests
-      cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb b/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb
new file mode 100644
index 0000000..aa062f6
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Canonical source for classifiers on PyPI (pypi.org)."
+HOMEPAGE = "https://github.com/pypa/trove-classifiers"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[sha256sum] = "3e700af445c802f251ce2b741ee78d2e5dfa5ab8115b933b89ca631b414691c9"
+
+inherit pypi python_setuptools_build_meta ptest
+
+DEPENDS += " python3-calver-native"
+
+SRC_URI += " \
+        file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+       ${PYTHON_PN}-pytest \
+       ${PYTHON_PN}-unittest-automake-output \
+"
+
+do_install_ptest() {
+      install -d ${D}${PTEST_PATH}/tests
+      cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-typing-extensions_4.7.1.bb b/poky/meta/recipes-devtools/python/python3-typing-extensions_4.7.1.bb
deleted file mode 100644
index 8ff77ba..0000000
--- a/poky/meta/recipes-devtools/python/python3-typing-extensions_4.7.1.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Backported and Experimental Type Hints for Python 3.7+"
-DESCRIPTION = "The typing_extensions module serves two related purposes:\
-\
-* Enable use of new type system features on older Python versions. For \
-  example, typing.TypeGuard is new in Python 3.10, but typing_extensions \
-  allows users on previous Python versions to use it too.\
-* Enable experimentation with new type system PEPs before they are accepted \
-  and added to the typing module."
-HOMEPAGE = "https://github.com/python/typing_extensions"
-BUGTRACKER = "https://github.com/python/typing_extensions/issues"
-SECTIONS = "libs"
-LICENSE = "PSF-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
-
-# The name on PyPi is slightly different.
-PYPI_PACKAGE = "typing_extensions"
-
-SRC_URI[sha256sum] = "b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"
-
-inherit pypi python_flit_core
-
-UPSTREAM_CHECK_REGEX = "/typing-extensions/(?P<pver>(\d+[\.\-_]*)+)/"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-typing-extensions_4.8.0.bb b/poky/meta/recipes-devtools/python/python3-typing-extensions_4.8.0.bb
new file mode 100644
index 0000000..33749a9
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-typing-extensions_4.8.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Backported and Experimental Type Hints for Python 3.7+"
+DESCRIPTION = "The typing_extensions module serves two related purposes:\
+\
+* Enable use of new type system features on older Python versions. For \
+  example, typing.TypeGuard is new in Python 3.10, but typing_extensions \
+  allows users on previous Python versions to use it too.\
+* Enable experimentation with new type system PEPs before they are accepted \
+  and added to the typing module."
+HOMEPAGE = "https://github.com/python/typing_extensions"
+BUGTRACKER = "https://github.com/python/typing_extensions/issues"
+SECTIONS = "libs"
+LICENSE = "PSF-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2"
+
+# The name on PyPi is slightly different.
+PYPI_PACKAGE = "typing_extensions"
+
+SRC_URI[sha256sum] = "df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
+
+inherit pypi python_flit_core
+
+UPSTREAM_CHECK_REGEX = "/typing-extensions/(?P<pver>(\d+[\.\-_]*)+)/"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-uritools_4.0.2.bb b/poky/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
new file mode 100644
index 0000000..5ffedcc
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-uritools_4.0.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "URI parsing, classification and composition"
+HOMEPAGE = "https://github.com/tkem/uritools/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ec55353c80c662e4255f8889a0ca558"
+
+SRC_URI[sha256sum] = "04df2b787d0eb76200e8319382a03562fbfe4741fd66c15506b08d3b8211d573"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-urllib3_2.0.4.bb b/poky/meta/recipes-devtools/python/python3-urllib3_2.0.4.bb
deleted file mode 100644
index 0abd2ad..0000000
--- a/poky/meta/recipes-devtools/python/python3-urllib3_2.0.4.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
-HOMEPAGE = "https://github.com/shazow/urllib3"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
-
-SRC_URI[sha256sum] = "8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"
-
-inherit pypi python_hatchling
-
-RDEPENDS:${PN} += "\
-    ${PYTHON_PN}-certifi \
-    ${PYTHON_PN}-cryptography \
-    ${PYTHON_PN}-email \
-    ${PYTHON_PN}-idna \
-    ${PYTHON_PN}-json \
-    ${PYTHON_PN}-netclient \
-    ${PYTHON_PN}-pyopenssl \
-    ${PYTHON_PN}-threading \
-    ${PYTHON_PN}-logging \
-"
-
-CVE_PRODUCT = "urllib3"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb b/poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb
new file mode 100644
index 0000000..9c15791
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
+HOMEPAGE = "https://github.com/shazow/urllib3"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
+
+SRC_URI[sha256sum] = "13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"
+
+inherit pypi python_hatchling
+
+RDEPENDS:${PN} += "\
+    ${PYTHON_PN}-certifi \
+    ${PYTHON_PN}-cryptography \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-pyopenssl \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-logging \
+"
+
+CVE_PRODUCT = "urllib3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict/run-ptest b/poky/meta/recipes-devtools/python/python3-xmltodict/run-ptest
similarity index 100%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict/run-ptest
rename to poky/meta/recipes-devtools/python/python3-xmltodict/run-ptest
diff --git a/poky/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb b/poky/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
new file mode 100644
index 0000000..132aae8
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-xmltodict_0.13.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Makes working with XML feel like you are working with JSON"
+HOMEPAGE = "https://github.com/martinblech/xmltodict"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01441d50dc74476db58a41ac10cb9fa2"
+
+SRC_URI[sha256sum] = "341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"
+
+PYPI_PACKAGE = "xmltodict"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS:${PN} += " \
+	${PYTHON_PN}-core \
+	${PYTHON_PN}-xml \
+	${PYTHON_PN}-io \
+"
+
+RDEPENDS:${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/poky/meta/recipes-devtools/python/python3-zipp_3.16.2.bb b/poky/meta/recipes-devtools/python/python3-zipp_3.16.2.bb
deleted file mode 100644
index 9dff59f..0000000
--- a/poky/meta/recipes-devtools/python/python3-zipp_3.16.2.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Backport of pathlib-compatible object wrapper for zip files"
-HOMEPAGE = "https://github.com/jaraco/zipp"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
-
-SRC_URI[sha256sum] = "ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"
-
-DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
-
-inherit pypi python_setuptools_build_meta
-
-DEPENDS += "${PYTHON_PN}-toml-native"
-
-RDEPENDS:${PN} += "${PYTHON_PN}-compression \
-                   ${PYTHON_PN}-math \
-                   ${PYTHON_PN}-more-itertools"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-zipp_3.17.0.bb b/poky/meta/recipes-devtools/python/python3-zipp_3.17.0.bb
new file mode 100644
index 0000000..11f3b5c
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-zipp_3.17.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Backport of pathlib-compatible object wrapper for zip files"
+HOMEPAGE = "https://github.com/jaraco/zipp"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f"
+
+SRC_URI[sha256sum] = "84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += "${PYTHON_PN}-toml-native"
+
+RDEPENDS:${PN} += "${PYTHON_PN}-compression \
+                   ${PYTHON_PN}-math \
+                   ${PYTHON_PN}-more-itertools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch b/poky/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
new file mode 100644
index 0000000..ff695a4
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3/0001-skip-no_stdout_fileno-test-due-to-load-variability.patch
@@ -0,0 +1,32 @@
+From 564d8f117fec7e573cbc10323655acefb12d143f Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Fri, 15 Sep 2023 08:48:33 -0400
+Subject: [PATCH] skip no_stdout_fileno test due to load variability
+
+Skip test_input_no_stdout_fileno so that it doesn't fail on systems
+under heavy load.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+[YOCTO #15210]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ Lib/test/test_builtin.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
+index 9078c409cc..615955c057 100644
+--- a/Lib/test/test_builtin.py
++++ b/Lib/test/test_builtin.py
+@@ -2247,6 +2247,7 @@ def test_input_tty_non_ascii_unicode_errors(self):
+         # Check stdin/stdout error handler is used when invoking PyOS_Readline()
+         self.check_input_tty("prompté", b"quux\xe9", "ascii")
+ 
++    @unittest.skip("Test may fail under heavy load")
+     def test_input_no_stdout_fileno(self):
+         # Issue #24402: If stdin is the original terminal but stdout.fileno()
+         # fails, do not use the original stdout file descriptor
+-- 
+2.41.0
+
diff --git a/poky/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch b/poky/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
index 371021c..97150f2 100644
--- a/poky/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
+++ b/poky/meta/recipes-devtools/python/python3/0001-test_ctypes.test_find-skip-without-tools-sdk.patch
@@ -9,7 +9,7 @@
 
 Upstream-Status: Inappropriate [oe-specific]
 
-Signed-off-by: Tim Orling <timothy.t.orlign@intel.com>
+Signed-off-by: Tim Orling <timothy.t.orling@intel.com>
 
 ---
  Lib/ctypes/test/test_find.py | 2 ++
diff --git a/poky/meta/recipes-devtools/python/python3_3.11.5.bb b/poky/meta/recipes-devtools/python/python3_3.11.5.bb
index f5d9731..8e023c7 100644
--- a/poky/meta/recipes-devtools/python/python3_3.11.5.bb
+++ b/poky/meta/recipes-devtools/python/python3_3.11.5.bb
@@ -32,6 +32,7 @@
            file://deterministic_imports.patch \
            file://0001-Avoid-shebang-overflow-on-python-config.py.patch \
            file://0001-Update-test_sysconfig-for-posix_user-purelib.patch \
+           file://0001-skip-no_stdout_fileno-test-due-to-load-variability.patch \
            "
 
 SRC_URI:append:class-native = " \
@@ -45,7 +46,7 @@
 UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
 UPSTREAM_CHECK_URI = "https://www.python.org/downloads/source/"
 
-CVE_PRODUCT = "python"
+CVE_PRODUCT = "python cpython"
 
 CVE_STATUS[CVE-2007-4559] = "disputed: Upstream consider this expected behaviour"
 CVE_STATUS[CVE-2019-18348] = "not-applicable-config: This is not exploitable when glibc has CVE-2016-10739 fixed"
diff --git a/poky/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb b/poky/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
index b100659..5d40784 100644
--- a/poky/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
+++ b/poky/meta/recipes-devtools/qemu/nativesdk-qemu-helper_1.0.bb
@@ -4,7 +4,6 @@
                   nativesdk-python3-shell nativesdk-python3-fcntl nativesdk-python3-logging \
                 "
 
-PR = "r9"
 
 LIC_FILES_CHKSUM = "file://${COREBASE}/scripts/runqemu;beginline=5;endline=10;md5=ac2b489a58739c7628a2604698db5e7f"
 
diff --git a/poky/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb b/poky/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
index 4d64ea4..1dfce0e 100644
--- a/poky/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
+++ b/poky/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
@@ -1,7 +1,6 @@
 SUMMARY = "Helper utilities needed by the runqemu script"
 LICENSE = "GPL-2.0-only"
 RDEPENDS:${PN} = "qemu-system-native"
-PR = "r1"
 
 LIC_FILES_CHKSUM = "file://${WORKDIR}/qemu-oe-bridge-helper.c;endline=4;md5=ae00a3bab86f2caaa8462eacda77f4d7"
 
diff --git a/poky/meta/recipes-devtools/qemu/qemu.inc b/poky/meta/recipes-devtools/qemu/qemu.inc
index 15b963d..9664b74 100644
--- a/poky/meta/recipes-devtools/qemu/qemu.inc
+++ b/poky/meta/recipes-devtools/qemu/qemu.inc
@@ -195,6 +195,7 @@
 PACKAGECONFIG[alsa] = "--audio-drv-list=default,,alsa-lib"
 PACKAGECONFIG[epoxy] = "--enable-opengl,--disable-opengl,libepoxy"
 PACKAGECONFIG[lzo] = "--enable-lzo,--disable-lzo,lzo"
+PACKAGECONFIG[dax] = "--enable-libdaxctl,--disable-libdaxctl,ndctl"
 PACKAGECONFIG[numa] = "--enable-numa,--disable-numa,numactl"
 PACKAGECONFIG[gnutls] = "--enable-gnutls,--disable-gnutls,gnutls"
 PACKAGECONFIG[bzip2] = "--enable-bzip2,--disable-bzip2,bzip2"
diff --git a/poky/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb b/poky/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
index db353d6..72ba8c0 100644
--- a/poky/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
+++ b/poky/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
@@ -1,7 +1,6 @@
 SUMMARY = "Runs postinstall scripts on first boot of the target device"
 DESCRIPTION = "${SUMMARY}"
 SECTION = "devel"
-PR = "r10"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
diff --git a/poky/meta/recipes-devtools/rust/cargo-c-native_0.9.18.bb b/poky/meta/recipes-devtools/rust/cargo-c-native_0.9.18.bb
index 4f34f50..f27ad83 100644
--- a/poky/meta/recipes-devtools/rust/cargo-c-native_0.9.18.bb
+++ b/poky/meta/recipes-devtools/rust/cargo-c-native_0.9.18.bb
@@ -5,12 +5,12 @@
     file://LICENSE;md5=384ed0e2e0b2dac094e51fbf93fdcbe0 \
 "
 
-PR = "r1"
 
 SRC_URI = " \
 	git://github.com/lu-zero/cargo-c.git;branch=master;protocol=https \
 	file://0001-Add-Cargo.lock-file.patch \
 "
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
 
 SRCREV = "4eaf39ebbbc9ab8f092adf487d5b53435511d619"
 S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/strace/strace/run-ptest b/poky/meta/recipes-devtools/strace/strace/run-ptest
index 86daed9..1224229 100755
--- a/poky/meta/recipes-devtools/strace/strace/run-ptest
+++ b/poky/meta/recipes-devtools/strace/strace/run-ptest
@@ -3,7 +3,7 @@
 set -u
 
 export TIMEOUT_DURATION=240
-make -B -C tests -k test-suite.log
+make -j4 -B -C tests -k test-suite.log
 res=$?
 if [ $res -ne 0 ]; then
     cat tests/test-suite.log
diff --git a/poky/meta/recipes-devtools/strace/strace_6.4.bb b/poky/meta/recipes-devtools/strace/strace_6.4.bb
deleted file mode 100644
index 2174790..0000000
--- a/poky/meta/recipes-devtools/strace/strace_6.4.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-SUMMARY = "System call tracing tool"
-HOMEPAGE = "http://strace.io"
-DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state."
-SECTION = "console/utils"
-LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59a33f0a3e6122d67c0b3befccbdaa6b"
-
-SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
-           file://update-gawk-paths.patch \
-           file://Makefile-ptest.patch \
-           file://run-ptest \
-           file://ptest-spacesave.patch \
-           file://0001-strace-fix-reproducibilty-issues.patch \
-           file://skip-load.patch \
-           file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \
-           file://0002-tests-Replace-off64_t-with-off_t.patch \
-           "
-SRC_URI[sha256sum] = "27987dbac57fdfd260c6db4dc8328df35c95c6867c8a3d4371d59cdcf4eb9238"
-
-inherit autotools ptest
-
-# Not yet ported to rv32
-COMPATIBLE_HOST:riscv32 = "null"
-
-PACKAGECONFIG:class-target ??= "\
-    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
-"
-
-PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,bluez5"
-PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
-
-EXTRA_OECONF += "--enable-mpers=no --disable-gcc-Werror"
-
-CFLAGS:append:libc-musl = " -Dsigcontext_struct=sigcontext"
-
-TESTDIR = "tests"
-PTEST_BUILD_HOST_PATTERN = "^(DEB_CHANGELOGTIME|RPM_CHANGELOGTIME|WARN_CFLAGS_FOR_BUILD|LDFLAGS_FOR_BUILD)"
-
-do_compile_ptest() {
-	oe_runmake -C ${TESTDIR} buildtest-TESTS
-}
-
-do_install_ptest() {
-	oe_runmake -C ${TESTDIR} install-ptest BUILDDIR=${B} DESTDIR=${D}${PTEST_PATH} TESTDIR=${TESTDIR}
-	mkdir -p ${D}${PTEST_PATH}/build-aux
-	mkdir -p ${D}${PTEST_PATH}/src
-	install -m 755 ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
-	install -m 644 ${B}/src/config.h ${D}${PTEST_PATH}/src/
-        sed -i -e '/^src/s/strace.*[0-9]/ptest/' ${D}/${PTEST_PATH}/${TESTDIR}/Makefile
-}
-
-RDEPENDS:${PN}-ptest += "make coreutils grep gawk sed"
-
-RDEPENDS:${PN}-ptest:append:libc-glibc = "\
-     locale-base-en-us.iso-8859-1 \
-"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/strace/strace_6.5.bb b/poky/meta/recipes-devtools/strace/strace_6.5.bb
new file mode 100644
index 0000000..8f90c35
--- /dev/null
+++ b/poky/meta/recipes-devtools/strace/strace_6.5.bb
@@ -0,0 +1,58 @@
+SUMMARY = "System call tracing tool"
+HOMEPAGE = "http://strace.io"
+DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state."
+SECTION = "console/utils"
+LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59a33f0a3e6122d67c0b3befccbdaa6b"
+
+SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
+           file://update-gawk-paths.patch \
+           file://Makefile-ptest.patch \
+           file://run-ptest \
+           file://ptest-spacesave.patch \
+           file://0001-strace-fix-reproducibilty-issues.patch \
+           file://skip-load.patch \
+           file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \
+           file://0002-tests-Replace-off64_t-with-off_t.patch \
+           "
+SRC_URI[sha256sum] = "dfb051702389e1979a151892b5901afc9e93bbc1c70d84c906ade3224ca91980"
+
+inherit autotools ptest
+
+# Not yet ported to rv32
+COMPATIBLE_HOST:riscv32 = "null"
+
+PACKAGECONFIG:class-target ??= "\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+"
+
+PACKAGECONFIG[bluez] = "ac_cv_header_bluetooth_bluetooth_h=yes,ac_cv_header_bluetooth_bluetooth_h=no,bluez5"
+PACKAGECONFIG[libunwind] = "--with-libunwind,--without-libunwind,libunwind"
+
+EXTRA_OECONF += "--enable-mpers=no --disable-gcc-Werror"
+
+CFLAGS:append:libc-musl = " -Dsigcontext_struct=sigcontext"
+
+TESTDIR = "tests"
+PTEST_BUILD_HOST_PATTERN = "^(DEB_CHANGELOGTIME|RPM_CHANGELOGTIME|WARN_CFLAGS_FOR_BUILD|LDFLAGS_FOR_BUILD)"
+
+do_compile_ptest() {
+	oe_runmake -C ${TESTDIR} buildtest-TESTS
+}
+
+do_install_ptest() {
+	oe_runmake -C ${TESTDIR} install-ptest BUILDDIR=${B} DESTDIR=${D}${PTEST_PATH} TESTDIR=${TESTDIR}
+	mkdir -p ${D}${PTEST_PATH}/build-aux
+	mkdir -p ${D}${PTEST_PATH}/src
+	install -m 755 ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/
+	install -m 644 ${B}/src/config.h ${D}${PTEST_PATH}/src/
+        sed -i -e '/^src/s/strace.*[0-9]/ptest/' ${D}/${PTEST_PATH}/${TESTDIR}/Makefile
+}
+
+RDEPENDS:${PN}-ptest += "make coreutils grep gawk sed"
+
+RDEPENDS:${PN}-ptest:append:libc-glibc = "\
+     locale-base-en-us.iso-8859-1 \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb b/poky/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
index 5604901..1931bfb 100644
--- a/poky/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
+++ b/poky/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
@@ -28,7 +28,6 @@
 SRC_URI[sha256sum] = "4441a5d593f85bb6e8d578cf6653fb4ec30f9e8f4a2315a3d8f2d0a8b3fadf94"
 
 # remove at next version upgrade or when output changes
-PR = "r1"
 
 RECIPE_NO_UPDATE_REASON = "6.04-pre3 is broken"
 UPSTREAM_CHECK_URI = "https://www.zytor.com/pub/syslinux/"
diff --git a/poky/meta/recipes-devtools/vala/vala_0.56.13.bb b/poky/meta/recipes-devtools/vala/vala_0.56.13.bb
new file mode 100644
index 0000000..0d43ac5
--- /dev/null
+++ b/poky/meta/recipes-devtools/vala/vala_0.56.13.bb
@@ -0,0 +1,3 @@
+require ${BPN}.inc
+
+SRC_URI[sha256sum] = "4988223036c7e1e4874c476d0de8bd9cbe500ee25ef19a76e560dc0b6d56ae07"
diff --git a/poky/meta/recipes-devtools/vala/vala_0.56.8.bb b/poky/meta/recipes-devtools/vala/vala_0.56.8.bb
deleted file mode 100644
index f55fb41..0000000
--- a/poky/meta/recipes-devtools/vala/vala_0.56.8.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ${BPN}.inc
-
-SRC_URI[sha256sum] = "93f81dcfc6a93b77baa271d65e6be981ee3238ad451ef380af118e295d904bde"
diff --git a/poky/meta/recipes-extended/cups/cups.inc b/poky/meta/recipes-extended/cups/cups.inc
index 36feadd..fa32c38 100644
--- a/poky/meta/recipes-extended/cups/cups.inc
+++ b/poky/meta/recipes-extended/cups/cups.inc
@@ -15,6 +15,7 @@
            file://0004-cups-fix-multilib-install-file-conflicts.patch \
            file://volatiles.99_cups \
            file://cups-volatiles.conf \
+           file://CVE-2023-4504.patch \
            "
 
 GITHUB_BASE_URI = "https://github.com/OpenPrinting/cups/releases"
diff --git a/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch b/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch
new file mode 100644
index 0000000..e52e43a
--- /dev/null
+++ b/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch
@@ -0,0 +1,42 @@
+CVE: CVE-2023-4504
+Upstream-Status: Backport [https://github.com/OpenPrinting/cups/commit/2431caddb7e6a87f04ac90b5c6366ad268b6ff31 ]
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+From 2431caddb7e6a87f04ac90b5c6366ad268b6ff31 Mon Sep 17 00:00:00 2001
+From: Zdenek Dohnal <zdohnal@redhat.com>
+Date: Wed, 20 Sep 2023 14:45:17 +0200
+Subject: [PATCH] raster-interpret.c: Fix CVE-2023-4504
+
+We didn't check for end of buffer if it looks there is an escaped
+character - check for NULL terminator there and if found, return NULL
+as return value and in `ptr`, because a lone backslash is not
+a valid PostScript character.
+---
+ cups/raster-interpret.c | 14 +++++++++++++-
+ 1 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/cups/raster-interpret.c b/cups/raster-interpret.c
+index 6fcf731b5..b8655c8c6 100644
+--- a/cups/raster-interpret.c
++++ b/cups/raster-interpret.c
+@@ -1116,7 +1116,19 @@ scan_ps(_cups_ps_stack_t *st,		/* I  - Stack */
+ 
+ 	    cur ++;
+ 
+-            if (*cur == 'b')
++	   /*
++	    * Return NULL if we reached NULL terminator, a lone backslash
++	    * is not a valid character in PostScript.
++	    */
++
++	    if (!*cur)
++	    {
++	      *ptr = NULL;
++
++	      return (NULL);
++	    }
++
++	    if (*cur == 'b')
+ 	      *valptr++ = '\b';
+ 	    else if (*cur == 'f')
+ 	      *valptr++ = '\f';
diff --git a/poky/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch b/poky/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
index 5e90248..409c8de 100644
--- a/poky/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
+++ b/poky/meta/recipes-extended/ethtool/ethtool/avoid_parallel_tests.patch
@@ -1,4 +1,4 @@
-From 08f887f4bc65684397bf8ec30cc61d91d894deac Mon Sep 17 00:00:00 2001
+From 0c77437267601d40d7ce9efd87eb4b82a5675d2f Mon Sep 17 00:00:00 2001
 From: Tudor Florea <tudor.florea@enea.com>
 Date: Wed, 28 May 2014 18:59:54 +0200
 Subject: [PATCH] ethtool: use serial-tests config needed by ptest.
@@ -15,12 +15,12 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/configure.ac b/configure.ac
-index c1e0012..c460398 100644
+index 11efb99..b5ce018 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
- AC_INIT(ethtool, 6.3, netdev@vger.kernel.org)
+@@ -3,7 +3,7 @@ AC_INIT(ethtool, 6.5, netdev@vger.kernel.org)
  AC_PREREQ(2.52)
+ AC_CONFIG_MACRO_DIR([m4])
  AC_CONFIG_SRCDIR([ethtool.c])
 -AM_INIT_AUTOMAKE([gnu subdir-objects])
 +AM_INIT_AUTOMAKE([gnu subdir-objects serial-tests])
diff --git a/poky/meta/recipes-extended/ethtool/ethtool_6.3.bb b/poky/meta/recipes-extended/ethtool/ethtool_6.3.bb
deleted file mode 100644
index 504e645..0000000
--- a/poky/meta/recipes-extended/ethtool/ethtool_6.3.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "Display or change ethernet card settings"
-DESCRIPTION = "A small utility for examining and tuning the settings of your ethernet-based network interfaces."
-HOMEPAGE = "http://www.kernel.org/pub/software/network/ethtool/"
-SECTION = "console/network"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-                    file://ethtool.c;beginline=4;endline=17;md5=c19b30548c582577fc6b443626fc1216"
-
-SRC_URI = "${KERNELORG_MIRROR}/software/network/ethtool/ethtool-${PV}.tar.gz \
-           file://run-ptest \
-           file://avoid_parallel_tests.patch \
-           "
-
-SRC_URI[sha256sum] = "342d37d3fe19da79d0276c4c69c34c61f1ad8f87b06514d664bf1eeb29bfd525"
-
-UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/software/network/ethtool/"
-
-inherit autotools ptest bash-completion pkgconfig
-
-RDEPENDS:${PN}-ptest += "make bash"
-
-PACKAGECONFIG ?= "netlink"
-PACKAGECONFIG[netlink] = "--enable-netlink,--disable-netlink,libmnl,"
-
-do_compile_ptest() {
-   oe_runmake buildtest-TESTS
-}
-
-do_install_ptest () {
-   cp ${B}/Makefile                 ${D}${PTEST_PATH}
-   install ${B}/test-cmdline        ${D}${PTEST_PATH}
-   if ${@bb.utils.contains('PACKAGECONFIG', 'netlink', 'false', 'true', d)}; then
-       install ${B}/test-features       ${D}${PTEST_PATH}
-   fi
-   install ${B}/ethtool             ${D}${PTEST_PATH}/ethtool
-   sed -i 's/^Makefile/_Makefile/'  ${D}${PTEST_PATH}/Makefile
-}
diff --git a/poky/meta/recipes-extended/ethtool/ethtool_6.5.bb b/poky/meta/recipes-extended/ethtool/ethtool_6.5.bb
new file mode 100644
index 0000000..ef925e1
--- /dev/null
+++ b/poky/meta/recipes-extended/ethtool/ethtool_6.5.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Display or change ethernet card settings"
+DESCRIPTION = "A small utility for examining and tuning the settings of your ethernet-based network interfaces."
+HOMEPAGE = "http://www.kernel.org/pub/software/network/ethtool/"
+SECTION = "console/network"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://ethtool.c;beginline=4;endline=17;md5=c19b30548c582577fc6b443626fc1216"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/network/ethtool/ethtool-${PV}.tar.gz \
+           file://run-ptest \
+           file://avoid_parallel_tests.patch \
+           "
+
+SRC_URI[sha256sum] = "aed41ca58b3129126f18429172064d214191d7e7ef52c6e3f6b2ff7503706c03"
+
+UPSTREAM_CHECK_URI = "https://www.kernel.org/pub/software/network/ethtool/"
+
+inherit autotools ptest bash-completion pkgconfig
+
+RDEPENDS:${PN}-ptest += "make bash"
+
+PACKAGECONFIG ?= "netlink"
+PACKAGECONFIG[netlink] = "--enable-netlink,--disable-netlink,libmnl,"
+
+do_compile_ptest() {
+   oe_runmake buildtest-TESTS
+}
+
+do_install_ptest () {
+   cp ${B}/Makefile                 ${D}${PTEST_PATH}
+   install ${B}/test-cmdline        ${D}${PTEST_PATH}
+   if ${@bb.utils.contains('PACKAGECONFIG', 'netlink', 'false', 'true', d)}; then
+       install ${B}/test-features       ${D}${PTEST_PATH}
+   fi
+   install ${B}/ethtool             ${D}${PTEST_PATH}/ethtool
+   sed -i 's/^Makefile/_Makefile/'  ${D}${PTEST_PATH}/Makefile
+}
diff --git a/poky/meta/recipes-extended/ghostscript/ghostscript/0001-Bug-706897-Copy-pcx-buffer-overrun-fix-from-devices-.patch b/poky/meta/recipes-extended/ghostscript/ghostscript/0001-Bug-706897-Copy-pcx-buffer-overrun-fix-from-devices-.patch
deleted file mode 100644
index b29212f..0000000
--- a/poky/meta/recipes-extended/ghostscript/ghostscript/0001-Bug-706897-Copy-pcx-buffer-overrun-fix-from-devices-.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From d81b82c70bc1fb9991bb95f1201abb5dea55f57f Mon Sep 17 00:00:00 2001
-From: Chris Liddell <chris.liddell@artifex.com>
-Date: Mon, 17 Jul 2023 14:06:37 +0100
-Subject: [PATCH] Bug 706897: Copy pcx buffer overrun fix from
- devices/gdevpcx.c
-
-Bounds check the buffer, before dereferencing the pointer.
-
-CVE: CVE-2023-38559
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
----
- base/gdevdevn.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/base/gdevdevn.c b/base/gdevdevn.c
-index 7b14d9c71..6351fb77a 100644
---- a/base/gdevdevn.c
-+++ b/base/gdevdevn.c
-@@ -1983,7 +1983,7 @@ devn_pcx_write_rle(const byte * from, const byte * end, int step, gp_file * file
-         byte data = *from;
- 
-         from += step;
--        if (data != *from || from == end) {
-+        if (from >= end || data != *from) {
-             if (data >= 0xc0)
-                 gp_fputc(0xc1, file);
-         } else {
--- 
-2.34.1
-
diff --git a/poky/meta/recipes-extended/ghostscript/ghostscript_10.01.2.bb b/poky/meta/recipes-extended/ghostscript/ghostscript_10.01.2.bb
deleted file mode 100644
index 434170e..0000000
--- a/poky/meta/recipes-extended/ghostscript/ghostscript_10.01.2.bb
+++ /dev/null
@@ -1,75 +0,0 @@
-SUMMARY = "The GPL Ghostscript PostScript/PDF interpreter"
-DESCRIPTION = "Ghostscript is used for PostScript/PDF preview and printing.  Usually as \
-a back-end to a program such as ghostview, it can display PostScript and PDF \
-documents in an X11 environment. \
-\
-Furthermore, it can render PostScript and PDF files as graphics to be printed \
-on non-PostScript printers. Supported printers include common \
-dot-matrix, inkjet and laser models. \
-"
-HOMEPAGE = "http://www.ghostscript.com"
-SECTION = "console/utils"
-
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f98ffa763e50cded76f49bce73aade16"
-
-DEPENDS = "tiff jpeg fontconfig cups libpng freetype zlib"
-
-UPSTREAM_CHECK_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
-
-def gs_verdir(v):
-    return "".join(v.split("."))
-
-
-SRC_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${@gs_verdir("${PV}")}/${BPN}-${PV}.tar.gz \
-           file://ghostscript-9.16-Werror-return-type.patch \
-           file://avoid-host-contamination.patch \
-           file://0001-Bug-706897-Copy-pcx-buffer-overrun-fix-from-devices-.patch \
-           file://configure.ac-add-option-to-explicitly-disable-neon.patch \
-"
-
-SRC_URI[sha256sum] = "a4cd61a07fec161bee35da0211a5e5cde8ff8a0aaf942fc0176715e499d21661"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[gtk] = "--enable-gtk,--disable-gtk,gtk+3"
-PACKAGECONFIG[libidn] = "--with-libidn,--without-libidn,libidn"
-PACKAGECONFIG[libpaper] = "--with-libpaper,--without-libpaper,libpaper"
-PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR}, \
-                      --without-x, virtual/libx11 libxext libxt"
-
-EXTRA_OECONF = "--with-jbig2dec \
-                --with-fontpath=${datadir}/fonts \
-                CUPSCONFIG="${STAGING_BINDIR_CROSS}/cups-config" \
-                PKGCONFIG=pkg-config \
-                "
-
-EXTRA_OECONF:append:mipsarcho32 = " --with-large_color_index=0"
-
-EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
-EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
-
-# Uses autoconf but not automake, can't do out-of-tree
-inherit autotools-brokensep pkgconfig
-
-# Prune the source tree of libraries that we're using our packaging of, so that
-# ghostscript can't link to them. Can't prune zlib as that's needed for the
-# native tools.
-prune_sources() {
-    rm -rf ${S}/jpeg/ ${S}/libpng/ ${S}/tiff/ ${S}/expat/ ${S}/freetype/ ${S}/cups/lib
-}
-do_unpack[postfuncs] += "prune_sources"
-
-do_install:append () {
-    mkdir -p ${D}${datadir}/ghostscript/${PV}/
-    cp -r ${S}/Resource ${D}${datadir}/ghostscript/${PV}/
-    cp -r ${S}/iccprofiles ${D}${datadir}/ghostscript/${PV}/
-}
-
-# ghostscript does not supports "arc"
-COMPATIBLE_HOST = "^(?!arc).*"
-
-# some entries in NVD uses gpl_ghostscript
-CVE_PRODUCT = "ghostscript gpl_ghostscript"
-
-CVE_STATUS[CVE-2023-38560] = "not-applicable-config: PCL isn't part of the Ghostscript release"
diff --git a/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb b/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb
new file mode 100644
index 0000000..4bad0f8
--- /dev/null
+++ b/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb
@@ -0,0 +1,74 @@
+SUMMARY = "The GPL Ghostscript PostScript/PDF interpreter"
+DESCRIPTION = "Ghostscript is used for PostScript/PDF preview and printing.  Usually as \
+a back-end to a program such as ghostview, it can display PostScript and PDF \
+documents in an X11 environment. \
+\
+Furthermore, it can render PostScript and PDF files as graphics to be printed \
+on non-PostScript printers. Supported printers include common \
+dot-matrix, inkjet and laser models. \
+"
+HOMEPAGE = "http://www.ghostscript.com"
+SECTION = "console/utils"
+
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f98ffa763e50cded76f49bce73aade16"
+
+DEPENDS = "tiff jpeg fontconfig cups libpng freetype zlib"
+
+UPSTREAM_CHECK_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.tar"
+
+def gs_verdir(v):
+    return "".join(v.split("."))
+
+
+SRC_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${@gs_verdir("${PV}")}/${BPN}-${PV}.tar.gz \
+           file://ghostscript-9.16-Werror-return-type.patch \
+           file://avoid-host-contamination.patch \
+           file://configure.ac-add-option-to-explicitly-disable-neon.patch \
+           "
+
+SRC_URI[sha256sum] = "e54062f166708d84ca82de9f8304a04344466080f936118b88082bd55ed6dc97"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gtk] = "--enable-gtk,--disable-gtk,gtk+3"
+PACKAGECONFIG[libidn] = "--with-libidn,--without-libidn,libidn"
+PACKAGECONFIG[libpaper] = "--with-libpaper,--without-libpaper,libpaper"
+PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR}, \
+                      --without-x, virtual/libx11 libxext libxt"
+
+EXTRA_OECONF = "--with-jbig2dec \
+                --with-fontpath=${datadir}/fonts \
+                CUPSCONFIG="${STAGING_BINDIR_CROSS}/cups-config" \
+                PKGCONFIG=pkg-config \
+                "
+
+EXTRA_OECONF:append:mipsarcho32 = " --with-large_color_index=0"
+
+EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
+
+# Uses autoconf but not automake, can't do out-of-tree
+inherit autotools-brokensep pkgconfig
+
+# Prune the source tree of libraries that we're using our packaging of, so that
+# ghostscript can't link to them. Can't prune zlib as that's needed for the
+# native tools.
+prune_sources() {
+    rm -rf ${S}/jpeg/ ${S}/libpng/ ${S}/tiff/ ${S}/expat/ ${S}/freetype/ ${S}/cups/lib
+}
+do_unpack[postfuncs] += "prune_sources"
+
+do_install:append () {
+    mkdir -p ${D}${datadir}/ghostscript/${PV}/
+    cp -r ${S}/Resource ${D}${datadir}/ghostscript/${PV}/
+    cp -r ${S}/iccprofiles ${D}${datadir}/ghostscript/${PV}/
+}
+
+# ghostscript does not supports "arc"
+COMPATIBLE_HOST = "^(?!arc).*"
+
+# some entries in NVD uses gpl_ghostscript
+CVE_PRODUCT = "ghostscript gpl_ghostscript"
+
+CVE_STATUS[CVE-2023-38560] = "not-applicable-config: PCL isn't part of the Ghostscript release"
diff --git a/poky/meta/recipes-extended/go-examples/go-helloworld_0.1.bb b/poky/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
index ce6ec08..98cd4d8 100644
--- a/poky/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
+++ b/poky/meta/recipes-extended/go-examples/go-helloworld_0.1.bb
@@ -6,7 +6,7 @@
 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
 
 SRC_URI = "git://go.googlesource.com/example;branch=master;protocol=https"
-SRCREV = "5bec756976671f30903223ec46ff8a70dced4954"
+SRCREV = "d9923f6970e9ba7e0d23aa9448ead71ea57235ae"
 UPSTREAM_CHECK_COMMITS = "1"
 
 GO_IMPORT = "golang.org/x/example"
diff --git a/poky/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch b/poky/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch
new file mode 100644
index 0000000..eae5dc9
--- /dev/null
+++ b/poky/meta/recipes-extended/groff/files/0001-build-Fix-Savannah-64681-webpage.ps-deps.patch
@@ -0,0 +1,51 @@
+From c75965053124149381ada3c394da74be078076cf Mon Sep 17 00:00:00 2001
+From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
+Date: Sat, 16 Sep 2023 16:28:00 -0500
+Subject: [PATCH] [build]: Fix Savannah #64681 (webpage.ps deps).
+
+* doc/doc.am (doc/webpage.ps, doc/webpage.html): Update and parallelize
+  target dependencies.  Resolve race by requiring "grn" and "soelim" to
+  be built first.  Also add dependency on `$(TMAC_PACKAGE_MS)`.
+
+Fixes <https://savannah.gnu.org/bugs/?64681>.  Thanks to Alexander
+Kanavin for the report.
+
+ANNOUNCE: Acknowledge Alexander.
+
+Upstream-Status: Backport
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ doc/doc.am | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/doc/doc.am b/doc/doc.am
+index cddc51907..d3c9ab6b7 100644
+--- a/doc/doc.am
++++ b/doc/doc.am
+@@ -346,6 +346,9 @@ doc/pic.ps: $(doc_srcdir)/pic.ms eqn pic tbl
+ 	$(GROFF_V)$(MKDIR_P) `dirname $@` \
+ 	&& $(DOC_GROFF) -pet -Tps -ms $(doc_srcdir)/pic.ms >$@
+ 
++# groff(1)'s `-I` implies `-g` and `-s`, so we must depend on grn and
++# soelim even though the document doesn't require them.
++doc/webpage.ps: grn soelim
+ doc/webpage.ps: $(DOC_GNU_EPS) tmac/www.tmac tbl
+ doc/webpage.ps: $(doc_srcdir)/webpage.ms
+ 	$(GROFF_V)$(MKDIR_P) `dirname $@` \
+@@ -365,11 +368,12 @@ doc/pic.html: $(doc_srcdir)/pic.ms
+ 	&& $(DOC_GROFF) -pet -P-Ipic -P-Dimg -P-jpic -Thtml -ms \
+ 	  $(doc_srcdir)/pic.ms > pic.html
+ 
+-doc/webpage.html: tbl
+-doc/webpage.html: tmac/www.tmac
+-doc/webpage.html: $(DOC_GNU_EPS)
++# groff(1)'s `-I` implies `-g` and `-s`, so we must depend on grn and
++# soelim even though the document doesn't require them.
++doc/webpage.html: grn soelim
++doc/webpage.html: $(DOC_GNU_EPS) tmac/www.tmac tbl
+ doc/webpage.html: $(doc_srcdir)/groff.css
+-doc/webpage.html: $(doc_srcdir)/webpage.ms
++doc/webpage.html: $(doc_srcdir)/webpage.ms $(TMAC_PACKAGE_MS)
+ 	$(GROFF_V)$(MKDIR_P) $(doc_builddir) \
+ 	&& cd $(doc_builddir) \
+ 	&& $(DOC_GROFF) -t -I $(doc_srcdir) -P-jwebpage -P-nrb \
diff --git a/poky/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch b/poky/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch
new file mode 100644
index 0000000..3e81b86
--- /dev/null
+++ b/poky/meta/recipes-extended/groff/files/0001-build-meintro_fr.ps-depends-on-tbl.patch
@@ -0,0 +1,31 @@
+From f21e9f13beb57a1e0666edf9693d7c83f2189897 Mon Sep 17 00:00:00 2001
+From: "G. Branden Robinson" <g.branden.robinson@gmail.com>
+Date: Fri, 22 Sep 2023 01:27:57 -0500
+Subject: [PATCH] [build]: meintro_fr.ps depends on tbl.
+
+* doc/doc.am (doc/meintro_fr.ps): Depend on tbl, resolving race in
+  sufficiently parallelized builds.  Overlooked in commit 92349ae223,
+  2022-05-30.
+
+Fixes <https://savannah.gnu.org/bugs/?64695>.  Thanks to Alexander
+Kanavin for the report.
+
+Upstream-Status: Backport
+Signed-off-by: Alexander Kanavin <alex@linutronix.de>
+---
+ doc/doc.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/doc.am b/doc/doc.am
+index d3c9ab6b7..0f95c7774 100644
+--- a/doc/doc.am
++++ b/doc/doc.am
+@@ -334,7 +334,7 @@ SUFFIXES += .me.in .me
+ 
+ # Use '-K utf8', not '-k', in case 'configure' didn't find uchardet.
+ # The French translation uses tbl; its English counterpart does not.
+-doc/meintro_fr.ps: doc/meintro_fr.me preconv
++doc/meintro_fr.ps: doc/meintro_fr.me preconv tbl
+ 	$(GROFF_V)$(MKDIR_P) `dirname $@` \
+ 	&& $(DOC_GROFF) -K utf8 -t -Tps -me -mfr $< >$@
+ 
diff --git a/poky/meta/recipes-extended/groff/groff_1.23.0.bb b/poky/meta/recipes-extended/groff/groff_1.23.0.bb
index 1dcd0bb..0fc4f83 100644
--- a/poky/meta/recipes-extended/groff/groff_1.23.0.bb
+++ b/poky/meta/recipes-extended/groff/groff_1.23.0.bb
@@ -10,6 +10,8 @@
 SRC_URI = "${GNU_MIRROR}/groff/groff-${PV}.tar.gz \
            file://groff-not-search-fonts-on-build-host.patch \
            file://0001-Make-manpages-mulitlib-identical.patch \
+           file://0001-build-Fix-Savannah-64681-webpage.ps-deps.patch \
+           file://0001-build-meintro_fr.ps-depends-on-tbl.patch \
            "
 
 SRC_URI[sha256sum] = "6b9757f592b7518b4902eb6af7e54570bdccba37a871fddb2d30ae3863511c13"
diff --git a/poky/meta/recipes-extended/gzip/gzip-1.12/autoconf-2.73.patch b/poky/meta/recipes-extended/gzip/gzip-1.12/autoconf-2.73.patch
deleted file mode 100644
index 18f992b..0000000
--- a/poky/meta/recipes-extended/gzip/gzip-1.12/autoconf-2.73.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-The gnulib largefile macro needs updating to work with autoconf 2.73. Rather
-than the full code:
-
-https://git.savannah.gnu.org/cgit/gnulib.git/commit/m4/largefile.m4?id=f91f633858cf132e50924224c50d6264a92caabb
-
-Just tweak the exiting code to work with 2.73. The next gzip upgrade should
-update to new gnulib
-
-Upstream-Status: Inappropriate
-Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-
-Index: findutils-4.9.0/gl/m4/largefile.m4
-===================================================================
---- findutils-4.9.0.orig/m4/largefile.m4
-+++ findutils-4.9.0/m4/largefile.m4
-@@ -26,7 +26,7 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
- # with _TIME_BITS.  Also, work around a problem in autoconf <= 2.69:
- # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
- # or configures them incorrectly in some cases.
--m4_version_prereq([2.70], [], [
-+m4_version_prereq([2.73], [], [
- 
- # _AC_SYS_LARGEFILE_TEST_INCLUDES
- # -------------------------------
diff --git a/poky/meta/recipes-extended/gzip/gzip-1.12/wrong-path-fix.patch b/poky/meta/recipes-extended/gzip/gzip-1.13/wrong-path-fix.patch
similarity index 100%
rename from poky/meta/recipes-extended/gzip/gzip-1.12/wrong-path-fix.patch
rename to poky/meta/recipes-extended/gzip/gzip-1.13/wrong-path-fix.patch
diff --git a/poky/meta/recipes-extended/gzip/gzip_1.12.bb b/poky/meta/recipes-extended/gzip/gzip_1.12.bb
deleted file mode 100644
index 35eb7c4..0000000
--- a/poky/meta/recipes-extended/gzip/gzip_1.12.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-require gzip.inc
-
-# change to GPL-3.0-or-later in 2007/07. Previous GPL-2.0-or-later version is
-# 1.3.12
-LICENSE = "GPL-3.0-or-later"
-
-SRC_URI = "${GNU_MIRROR}/gzip/${BP}.tar.gz \
-           file://autoconf-2.73.patch \
-           file://run-ptest \
-          "
-SRC_URI:append:class-target = " file://wrong-path-fix.patch"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
-                    file://gzip.h;beginline=8;endline=20;md5=6e47caaa630e0c8bf9f1bc8d94a8ed0e"
-
-PROVIDES:append:class-native = " gzip-replacement-native"
-
-RDEPENDS:${PN}-ptest += "make perl grep diffutils"
-
-BBCLASSEXTEND = "native nativesdk"
-
-inherit ptest
-
-do_install_ptest() {
-	mkdir -p ${D}${PTEST_PATH}/src/build-aux
-	cp ${S}/build-aux/test-driver ${D}${PTEST_PATH}/src/build-aux/
-	mkdir -p ${D}${PTEST_PATH}/src/tests
-	cp -r ${S}/tests/* ${D}${PTEST_PATH}/src/tests
-	sed -e 's/^abs_srcdir = ..*/abs_srcdir = \.\./' \
-            -e 's/^top_srcdir = ..*/top_srcdir = \.\./' \
-            -e 's/^GREP = ..*/GREP = grep/'             \
-            -e 's/^AWK = ..*/AWK = awk/'                \
-            -e 's/^srcdir = ..*/srcdir = \./'           \
-            -e 's/^Makefile: ..*/Makefile: /'           \
-            -e 's,--sysroot=${STAGING_DIR_TARGET},,g'   \
-            -e 's|${DEBUG_PREFIX_MAP}||g' \
-            -e 's:${HOSTTOOLS_DIR}/::g'                 \
-            -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
-            ${B}/tests/Makefile > ${D}${PTEST_PATH}/src/tests/Makefile
-}
-
-SRC_URI[sha256sum] = "5b4fb14d38314e09f2fc8a1c510e7cd540a3ea0e3eb9b0420046b82c3bf41085"
diff --git a/poky/meta/recipes-extended/gzip/gzip_1.13.bb b/poky/meta/recipes-extended/gzip/gzip_1.13.bb
new file mode 100644
index 0000000..fd846b3
--- /dev/null
+++ b/poky/meta/recipes-extended/gzip/gzip_1.13.bb
@@ -0,0 +1,41 @@
+require gzip.inc
+
+# change to GPL-3.0-or-later in 2007/07. Previous GPL-2.0-or-later version is
+# 1.3.12
+LICENSE = "GPL-3.0-or-later"
+
+SRC_URI = "${GNU_MIRROR}/gzip/${BP}.tar.gz \
+           file://run-ptest \
+           "
+SRC_URI:append:class-target = " file://wrong-path-fix.patch"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
+                    file://gzip.h;beginline=8;endline=20;md5=6e47caaa630e0c8bf9f1bc8d94a8ed0e"
+
+PROVIDES:append:class-native = " gzip-replacement-native"
+
+RDEPENDS:${PN}-ptest += "make perl grep diffutils"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+do_install_ptest() {
+	mkdir -p ${D}${PTEST_PATH}/src/build-aux
+	cp ${S}/build-aux/test-driver ${D}${PTEST_PATH}/src/build-aux/
+	mkdir -p ${D}${PTEST_PATH}/src/tests
+	cp -r ${S}/tests/* ${D}${PTEST_PATH}/src/tests
+	sed -e 's/^abs_srcdir = ..*/abs_srcdir = \.\./' \
+            -e 's/^top_srcdir = ..*/top_srcdir = \.\./' \
+            -e 's/^GREP = ..*/GREP = grep/'             \
+            -e 's/^AWK = ..*/AWK = awk/'                \
+            -e 's/^srcdir = ..*/srcdir = \./'           \
+            -e 's/^Makefile: ..*/Makefile: /'           \
+            -e 's,--sysroot=${STAGING_DIR_TARGET},,g'   \
+            -e 's|${DEBUG_PREFIX_MAP}||g' \
+            -e 's:${HOSTTOOLS_DIR}/::g'                 \
+            -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
+            ${B}/tests/Makefile > ${D}${PTEST_PATH}/src/tests/Makefile
+}
+
+SRC_URI[sha256sum] = "20fc818aeebae87cdbf209d35141ad9d3cf312b35a5e6be61bfcfbf9eddd212a"
diff --git a/poky/meta/recipes-extended/libarchive/libarchive_3.7.1.bb b/poky/meta/recipes-extended/libarchive/libarchive_3.7.1.bb
deleted file mode 100644
index e40c3e7..0000000
--- a/poky/meta/recipes-extended/libarchive/libarchive_3.7.1.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-SUMMARY = "Support for reading various archive formats"
-DESCRIPTION = "C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats"
-HOMEPAGE = "http://www.libarchive.org/"
-SECTION = "devel"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d499814247adaee08d88080841cb5665"
-
-DEPENDS = "e2fsprogs-native"
-
-PACKAGECONFIG ?= "zlib bz2 xz zstd ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)}"
-
-DEPENDS_BZIP2 = "bzip2-replacement-native"
-DEPENDS_BZIP2:class-target = "bzip2"
-
-PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
-PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
-PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib,"
-PACKAGECONFIG[bz2] = "--with-bz2lib,--without-bz2lib,${DEPENDS_BZIP2},"
-PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz,"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
-PACKAGECONFIG[libxml2] = "--with-xml2,--without-xml2,libxml2,"
-PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat,"
-PACKAGECONFIG[lzo] = "--with-lzo2,--without-lzo2,lzo,"
-PACKAGECONFIG[nettle] = "--with-nettle,--without-nettle,nettle,"
-PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
-PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,"
-PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd,"
-
-EXTRA_OECONF += "--enable-largefile --without-iconv"
-
-SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz"
-SRC_URI += "file://configurehack.patch"
-UPSTREAM_CHECK_URI = "http://libarchive.org/"
-
-SRC_URI[sha256sum] = "5d24e40819768f74daf846b99837fc53a3a9dcdf3ce1c2003fe0596db850f0f0"
-
-CVE_STATUS[CVE-2023-30571] = "upstream-wontfix: upstream has documented that reported function is not thread-safe"
-
-inherit autotools update-alternatives pkgconfig
-
-CPPFLAGS += "-I${WORKDIR}/extra-includes"
-
-do_configure[cleandirs] += "${WORKDIR}/extra-includes"
-do_configure:prepend() {
-	# We just need the headers for some type constants, so no need to
-	# build all of e2fsprogs for the target
-	cp -R ${STAGING_INCDIR_NATIVE}/ext2fs ${WORKDIR}/extra-includes/
-}
-
-ALTERNATIVE_PRIORITY = "80"
-
-PACKAGES =+ "bsdtar"
-FILES:bsdtar = "${bindir}/bsdtar"
-
-ALTERNATIVE:bsdtar = "tar"
-ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
-ALTERNATIVE_TARGET[tar] = "${bindir}/bsdtar"
-
-PACKAGES =+ "bsdcpio"
-FILES:bsdcpio = "${bindir}/bsdcpio"
-
-ALTERNATIVE:bsdcpio = "cpio"
-ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
-ALTERNATIVE_TARGET[cpio] = "${bindir}/bsdcpio"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb b/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
new file mode 100644
index 0000000..a09f607
--- /dev/null
+++ b/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Support for reading various archive formats"
+DESCRIPTION = "C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats"
+HOMEPAGE = "http://www.libarchive.org/"
+SECTION = "devel"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d499814247adaee08d88080841cb5665"
+
+DEPENDS = "e2fsprogs-native"
+
+PACKAGECONFIG ?= "zlib bz2 xz zstd ${@bb.utils.filter('DISTRO_FEATURES', 'acl xattr', d)}"
+
+DEPENDS_BZIP2 = "bzip2-replacement-native"
+DEPENDS_BZIP2:class-target = "bzip2"
+
+PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
+PACKAGECONFIG[xattr] = "--enable-xattr,--disable-xattr,attr,"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib,"
+PACKAGECONFIG[bz2] = "--with-bz2lib,--without-bz2lib,${DEPENDS_BZIP2},"
+PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz,"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
+PACKAGECONFIG[libxml2] = "--with-xml2,--without-xml2,libxml2,"
+PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat,"
+PACKAGECONFIG[lzo] = "--with-lzo2,--without-lzo2,lzo,"
+PACKAGECONFIG[nettle] = "--with-nettle,--without-nettle,nettle,"
+PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
+PACKAGECONFIG[mbedtls] = "--with-mbedtls,--without-mbedtls,mbedtls,"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd,"
+
+EXTRA_OECONF += "--enable-largefile --without-iconv"
+
+SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz"
+SRC_URI += "file://configurehack.patch"
+UPSTREAM_CHECK_URI = "http://libarchive.org/"
+
+SRC_URI[sha256sum] = "df404eb7222cf30b4f8f93828677890a2986b66ff8bf39dac32a804e96ddf104"
+
+CVE_STATUS[CVE-2023-30571] = "upstream-wontfix: upstream has documented that reported function is not thread-safe"
+
+inherit autotools update-alternatives pkgconfig
+
+CPPFLAGS += "-I${WORKDIR}/extra-includes"
+
+do_configure[cleandirs] += "${WORKDIR}/extra-includes"
+do_configure:prepend() {
+	# We just need the headers for some type constants, so no need to
+	# build all of e2fsprogs for the target
+	cp -R ${STAGING_INCDIR_NATIVE}/ext2fs ${WORKDIR}/extra-includes/
+}
+
+ALTERNATIVE_PRIORITY = "80"
+
+PACKAGES =+ "bsdtar"
+FILES:bsdtar = "${bindir}/bsdtar"
+
+ALTERNATIVE:bsdtar = "tar"
+ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
+ALTERNATIVE_TARGET[tar] = "${bindir}/bsdtar"
+
+PACKAGES =+ "bsdcpio"
+FILES:bsdcpio = "${bindir}/bsdcpio"
+
+ALTERNATIVE:bsdcpio = "cpio"
+ALTERNATIVE_LINK_NAME[cpio] = "${base_bindir}/cpio"
+ALTERNATIVE_TARGET[cpio] = "${bindir}/bsdcpio"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-extended/libsolv/libsolv_0.7.24.bb b/poky/meta/recipes-extended/libsolv/libsolv_0.7.24.bb
deleted file mode 100644
index 7c8f1fd..0000000
--- a/poky/meta/recipes-extended/libsolv/libsolv_0.7.24.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Library for solving packages and reading repositories"
-DESCRIPTION = "This is libsolv, a free package dependency solver using a satisfiability algorithm for solving packages and reading repositories"
-HOMEPAGE = "https://github.com/openSUSE/libsolv"
-BUGTRACKER = "https://github.com/openSUSE/libsolv/issues"
-SECTION = "devel"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.BSD;md5=62272bd11c97396d4aaf1c41bc11f7d8"
-
-DEPENDS = "expat zlib"
-
-SRC_URI = "git://github.com/openSUSE/libsolv.git;branch=master;protocol=https \
-           file://0001-utils-Conside-musl-when-wrapping-qsort_r.patch \
-"
-
-SRCREV = "4d05dca3974156faf2f025ca4a82b68904848307"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGE_CLASSES','package_rpm','rpm','',d)}"
-PACKAGECONFIG[rpm] = "-DENABLE_RPMMD=ON -DENABLE_RPMDB=ON,,rpm"
-
-EXTRA_OECMAKE = "-DMULTI_SEMANTICS=ON -DENABLE_COMPLEX_DEPS=ON"
-
-PACKAGES =+ "${PN}-tools ${PN}ext"
-
-FILES:${PN}-tools = "${bindir}/*"
-FILES:${PN}ext = "${libdir}/${PN}ext.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb b/poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb
new file mode 100644
index 0000000..69cb3f7
--- /dev/null
+++ b/poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Library for solving packages and reading repositories"
+DESCRIPTION = "This is libsolv, a free package dependency solver using a satisfiability algorithm for solving packages and reading repositories"
+HOMEPAGE = "https://github.com/openSUSE/libsolv"
+BUGTRACKER = "https://github.com/openSUSE/libsolv/issues"
+SECTION = "devel"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.BSD;md5=62272bd11c97396d4aaf1c41bc11f7d8"
+
+DEPENDS = "expat zlib zstd"
+
+SRC_URI = "git://github.com/openSUSE/libsolv.git;branch=master;protocol=https \
+           file://0001-utils-Conside-musl-when-wrapping-qsort_r.patch \
+"
+
+SRCREV = "f1be8bf3dcc7dc14d331adbc97f337fa08e641c9"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PACKAGE_CLASSES','package_rpm','rpm','',d)}"
+PACKAGECONFIG[rpm] = "-DENABLE_RPMMD=ON -DENABLE_RPMDB=ON,,rpm"
+
+EXTRA_OECMAKE = "-DMULTI_SEMANTICS=ON -DENABLE_COMPLEX_DEPS=ON -DENABLE_ZSTD_COMPRESSION=ON"
+
+PACKAGES =+ "${PN}-tools ${PN}ext"
+
+FILES:${PN}-tools = "${bindir}/*"
+FILES:${PN}ext = "${libdir}/${PN}ext.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-extended/man-pages/man-pages_6.04.bb b/poky/meta/recipes-extended/man-pages/man-pages_6.04.bb
deleted file mode 100644
index fee57e3..0000000
--- a/poky/meta/recipes-extended/man-pages/man-pages_6.04.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY = "Linux man-pages"
-DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs"
-SECTION = "console/utils"
-HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages"
-LICENSE = "GPL-2.0-or-later & GPL-2.0-only & GPL-1.0-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT"
-
-LIC_FILES_CHKSUM = "file://README;md5=5b7d7488344f5af8841dc13aaec49cdf \
-                    file://LICENSES/BSD-2-Clause.txt;md5=d0f280d1058e77e66264a9b9e10e6c89 \
-                    file://LICENSES/BSD-3-Clause.txt;md5=71f739ef75581cae312e8c711bcdab16 \
-                    file://LICENSES/BSD-4-Clause-UC.txt;md5=1da3cf8ad50cd8d5d1de3cfc53196d01 \
-                    file://LICENSES/GPL-1.0-or-later.txt;md5=e5b7c80002ef72ab868b43ce47b65125 \
-                    file://LICENSES/GPL-2.0-only.txt;md5=3d26203303a722dedc6bf909d95ba815 \
-                    file://LICENSES/GPL-2.0-or-later.txt;md5=3d26203303a722dedc6bf909d95ba815 \
-                    file://LICENSES/Linux-man-pages-copyleft.txt;md5=173b960c686ff2d26f043ddaeb63f6ce \
-                    file://LICENSES/MIT.txt;md5=7dda4e90ded66ab88b86f76169f28663 \
-                    "
-SRC_URI = "${KERNELORG_MIRROR}/linux/docs/${BPN}/${BP}.tar.gz"
-
-SRC_URI[sha256sum] = "590623b99bf1f8ee958483c35cc0aaef2363e42998c4d927d1f705890d15d51e"
-
-inherit manpages
-
-MAN_PKG = "${PN}"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[manpages] = ""
-
-do_configure[noexec] = "1"
-do_compile[noexec] = "1"
-
-do_install() {
-        oe_runmake install prefix=${prefix} DESTDIR=${D}
-}
-
-# Only deliveres man-pages so FILES:${PN} gets everything
-FILES:${PN}-doc = ""
-FILES:${PN} = "${mandir}/*"
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE:${PN} = "crypt.3 crypt_r.3 getspnam.3 passwd.5"
-ALTERNATIVE_LINK_NAME[crypt.3] = "${mandir}/man3/crypt.3"
-ALTERNATIVE_LINK_NAME[crypt_r.3] = "${mandir}/man3/crypt_r.3"
-ALTERNATIVE_LINK_NAME[getspnam.3] = "${mandir}/man3/getspnam.3"
-ALTERNATIVE_LINK_NAME[passwd.5] = "${mandir}/man5/passwd.5"
diff --git a/poky/meta/recipes-extended/man-pages/man-pages_6.05.01.bb b/poky/meta/recipes-extended/man-pages/man-pages_6.05.01.bb
new file mode 100644
index 0000000..2726ede
--- /dev/null
+++ b/poky/meta/recipes-extended/man-pages/man-pages_6.05.01.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Linux man-pages"
+DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs"
+SECTION = "console/utils"
+HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages"
+LICENSE = "GPL-2.0-or-later & GPL-2.0-only & GPL-1.0-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT"
+
+LIC_FILES_CHKSUM = "file://README;md5=cbd51cd3dd298230df8ddd4637e65c37 \
+                    file://LICENSES/BSD-2-Clause.txt;md5=d0f280d1058e77e66264a9b9e10e6c89 \
+                    file://LICENSES/BSD-3-Clause.txt;md5=71f739ef75581cae312e8c711bcdab16 \
+                    file://LICENSES/BSD-4-Clause-UC.txt;md5=1da3cf8ad50cd8d5d1de3cfc53196d01 \
+                    file://LICENSES/GPL-1.0-or-later.txt;md5=e5b7c80002ef72ab868b43ce47b65125 \
+                    file://LICENSES/GPL-2.0-only.txt;md5=3d26203303a722dedc6bf909d95ba815 \
+                    file://LICENSES/GPL-2.0-or-later.txt;md5=3d26203303a722dedc6bf909d95ba815 \
+                    file://LICENSES/Linux-man-pages-copyleft.txt;md5=173b960c686ff2d26f043ddaeb63f6ce \
+                    file://LICENSES/MIT.txt;md5=7dda4e90ded66ab88b86f76169f28663 \
+                    "
+SRC_URI = "${KERNELORG_MIRROR}/linux/docs/${BPN}/${BP}.tar.gz"
+
+SRC_URI[sha256sum] = "b2dd44ca0342b50923291f06bdba38c42438e10c04843ce1f731cf3f50631e0a"
+
+inherit manpages
+
+MAN_PKG = "${PN}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[manpages] = ""
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+        oe_runmake install prefix=${prefix} DESTDIR=${D}
+}
+
+# Only deliveres man-pages so FILES:${PN} gets everything
+FILES:${PN}-doc = ""
+FILES:${PN} = "${mandir}/*"
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE:${PN} = "crypt.3 crypt_r.3 getspnam.3 passwd.5"
+ALTERNATIVE_LINK_NAME[crypt.3] = "${mandir}/man3/crypt.3"
+ALTERNATIVE_LINK_NAME[crypt_r.3] = "${mandir}/man3/crypt_r.3"
+ALTERNATIVE_LINK_NAME[getspnam.3] = "${mandir}/man3/getspnam.3"
+ALTERNATIVE_LINK_NAME[passwd.5] = "${mandir}/man5/passwd.5"
diff --git a/poky/meta/recipes-extended/mingetty/mingetty_1.08.bb b/poky/meta/recipes-extended/mingetty/mingetty_1.08.bb
index 7a16c65..aa5a989 100644
--- a/poky/meta/recipes-extended/mingetty/mingetty_1.08.bb
+++ b/poky/meta/recipes-extended/mingetty/mingetty_1.08.bb
@@ -3,7 +3,6 @@
 HOMEPAGE = "http://sourceforge.net/projects/mingetty/"
 DESCRIPTION = "This is a small Linux console getty that is started on the Linux text console, asks for a login name and then tranfers over to login directory. Is extended to allow automatic login and starting any app."
 LICENSE = "GPL-2.0-only"
-PR = "r3"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e"
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
diff --git a/poky/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb b/poky/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
index b66617f..e9531fa 100644
--- a/poky/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
+++ b/poky/meta/recipes-extended/packagegroups/packagegroup-core-full-cmdline.bb
@@ -4,7 +4,6 @@
 
 SUMMARY = "Standard full-featured Linux system"
 DESCRIPTION = "Package group bringing in packages needed for a more traditional full-featured Linux system"
-PR = "r6"
 
 inherit packagegroup
 
diff --git a/poky/meta/recipes-extended/procps/procps/0001-po-fr.po-address-failures-with-gettext-0.22.patch b/poky/meta/recipes-extended/procps/procps/0001-po-fr.po-address-failures-with-gettext-0.22.patch
deleted file mode 100644
index 8055179..0000000
--- a/poky/meta/recipes-extended/procps/procps/0001-po-fr.po-address-failures-with-gettext-0.22.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 1d685477c254e5b10a81e32c87786e0f001b70f1 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Mon, 24 Jul 2023 18:06:51 +0200
-Subject: [PATCH] po/fr.po: address failures with gettext 0.22
-
-Specifically:
-| fr.1po:3027: 'msgstr' is not a valid C format string, unlike 'msgid'. Reason: In the directive number 4, the argument size specifier is invalid.
-| fr.1po:3820: 'msgstr' is not a valid C format string, unlike 'msgid'. Reason: In the directive number 1, the argument size specifier is invalid.
-
-Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/199]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- po/fr.po | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/po/fr.po b/po/fr.po
-index 715c2b69..700834e1 100644
---- a/po/fr.po
-+++ b/po/fr.po
-@@ -3800,7 +3800,7 @@ msgid ""
- "Type 'q' or <Esc> to continue "
- msgstr ""
- "Aide pour les commandes interactives~2 - %s\n"
--"Fenêtre ~1%s~6: ~1Mode cumulatif ~3%s~2.  ~1Système~6: ~1Délai ~3%.1lf "
-+"Fenêtre ~1%s~6: ~1Mode cumulatif ~3%s~2.  ~1Système~6: ~1Délai ~3%.1f "
- "secs~2; ~1Mode sûr ~3%s~2.\n"
- "\n"
- "  Z~5,~1B~5,E,e   Global: «~1Z~2» couleurs; «~1B~2» gras; «~1E~2»/«~1e~2» "
-@@ -4723,7 +4723,7 @@ msgstr " -v, --version  affiche les informations de version et sort\n"
- #: src/watch.c:486
- #, c-format
- msgid "Every %.1fs: "
--msgstr "Toutes les %.1lfs: "
-+msgstr "Toutes les %.1fs: "
- 
- #: src/watch.c:487
- #, c-format
diff --git a/poky/meta/recipes-extended/procps/procps/0001-src-w.c-use-utmp.h-only.patch b/poky/meta/recipes-extended/procps/procps/0001-src-w.c-use-utmp.h-only.patch
deleted file mode 100644
index 23c91ec..0000000
--- a/poky/meta/recipes-extended/procps/procps/0001-src-w.c-use-utmp.h-only.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From c41b3be62fbb78e0939fddaebad519360cbd8702 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Mon, 6 Mar 2023 09:27:57 +0100
-Subject: [PATCH] src/w.c: use only utmpx
-
-Nowadays this works both on musl and glibc systems, however on musl
-utmp.h is also needed to avoid the following failure:
-
-| ../git/src/w.c: In function 'print_from':
-| ../git/src/w.c:73:28: error: '__UT_HOSTSIZE' undeclared (first use in this function); did you mean 'UT_HOSTSIZE'?
-|    73 | #       define UT_HOSTSIZE __UT_HOSTSIZE
-|       |                            ^~~~~~~~~~~~~
-| ../git/src/w.c:233:64: note: in expansion of macro 'UT_HOSTSIZE'
-|   233 |                         print_display_or_interface(u->ut_host, UT_HOSTSIZE, fromlen - len);
-|       |                                                                ^~~~~~~~~~~
-|
-
-It is caused by including utmpx.h, but not utmp.h, which (on musl)
-lacks the needed definitions.
-
-I have verified that both musl and glibc based builds continue to work.
-
-Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/171]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
-
----
- src/w.c | 17 ++---------------
- 1 file changed, 2 insertions(+), 15 deletions(-)
-
-diff --git a/src/w.c b/src/w.c
-index 5e878f04..912c5df3 100644
---- a/src/w.c
-+++ b/src/w.c
-@@ -46,11 +46,8 @@
- #include <termios.h>
- #include <time.h>
- #include <unistd.h>
--#ifdef HAVE_UTMPX_H
--#	include <utmpx.h>
--#else
--#	include <utmp.h>
--#endif
-+#include <utmp.h>
-+#include <utmpx.h>
- #include <arpa/inet.h>
- 
- #include "c.h"
-@@ -63,17 +60,7 @@
- static int ignoreuser = 0;	/* for '-u' */
- static int oldstyle = 0;	/* for '-o' */
- 
--#ifdef HAVE_UTMPX_H
- typedef struct utmpx utmp_t;
--#else
--typedef struct utmp utmp_t;
--#endif
--
--#if !defined(UT_HOSTSIZE) || defined(__UT_HOSTSIZE)
--#	define UT_HOSTSIZE __UT_HOSTSIZE
--#	define UT_LINESIZE __UT_LINESIZE
--#	define UT_NAMESIZE __UT_NAMESIZE
--#endif
- 
- #ifdef W_SHOWFROM
- # define FROM_STRING "on"
diff --git a/poky/meta/recipes-extended/procps/procps/CVE-2023-4016.patch b/poky/meta/recipes-extended/procps/procps/CVE-2023-4016.patch
deleted file mode 100644
index 202fea9..0000000
--- a/poky/meta/recipes-extended/procps/procps/CVE-2023-4016.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 2c933ecba3bb1d3041a5a7a53a7b4078a6003413 Mon Sep 17 00:00:00 2001
-From: Craig Small <csmall@dropbear.xyz>
-Date: Thu, 10 Aug 2023 21:18:38 +1000
-Subject: [PATCH] ps: Fix possible buffer overflow in -C option
-
-ps allocates memory using malloc(length of arg * len of struct).
-In certain strange circumstances, the arg length could be very large
-and the multiplecation will overflow, allocating a small amount of
-memory.
-
-Subsequent strncpy() will then write into unallocated memory.
-The fix is to use calloc. It's slower but this is a one-time
-allocation. Other malloc(x * y) calls have also been replaced
-by calloc(x, y)
-
-References:
- https://www.freelists.org/post/procps/ps-buffer-overflow-CVE-20234016
- https://nvd.nist.gov/vuln/detail/CVE-2023-4016
- https://gitlab.com/procps-ng/procps/-/issues/297
- https://bugs.debian.org/1042887
-
-Signed-off-by: Craig Small <csmall@dropbear.xyz>
-
-CVE: CVE-2023-4016
-Upstream-Status: Backport [https://gitlab.com/procps-ng/procps/-/commit/2c933ecba3bb1d3041a5a7a53a7b4078a6003413]
-Signed-off-by: Ross Burton <ross.burton@arm.com>
----
- NEWS            | 1 +
- src/ps/parser.c | 8 ++++----
- 2 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/src/ps/parser.c b/src/ps/parser.c
-index 248aa741..15873dfa 100644
---- a/src/ps/parser.c
-+++ b/src/ps/parser.c
-@@ -189,7 +189,6 @@ static const char *parse_list(const char *arg, const char *(*parse_fn)(char *, s
-   const char *err;       /* error code that could or did happen */
-   /*** prepare to operate ***/
-   node = xmalloc(sizeof(selection_node));
--  node->u = xmalloc(strlen(arg)*sizeof(sel_union)); /* waste is insignificant */
-   node->n = 0;
-   buf = strdup(arg);
-   /*** sanity check and count items ***/
-@@ -210,6 +209,7 @@ static const char *parse_list(const char *arg, const char *(*parse_fn)(char *, s
-   } while (*++walk);
-   if(need_item) goto parse_error;
-   node->n = items;
-+  node->u = xcalloc(items, sizeof(sel_union));
-   /*** actually parse the list ***/
-   walk = buf;
-   while(items--){
-@@ -1050,15 +1050,15 @@ static const char *parse_trailing_pids(void){
-   thisarg = ps_argc - 1;   /* we must be at the end now */
- 
-   pidnode = xmalloc(sizeof(selection_node));
--  pidnode->u = xmalloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  pidnode->u = xcalloc(i, sizeof(sel_union)); /* waste is insignificant */
-   pidnode->n = 0;
- 
-   grpnode = xmalloc(sizeof(selection_node));
--  grpnode->u = xmalloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  grpnode->u = xcalloc(i,sizeof(sel_union)); /* waste is insignificant */
-   grpnode->n = 0;
- 
-   sidnode = xmalloc(sizeof(selection_node));
--  sidnode->u = xmalloc(i*sizeof(sel_union)); /* waste is insignificant */
-+  sidnode->u = xcalloc(i, sizeof(sel_union)); /* waste is insignificant */
-   sidnode->n = 0;
- 
-   while(i--){
--- 
-GitLab
-
diff --git a/poky/meta/recipes-extended/procps/procps_4.0.3.bb b/poky/meta/recipes-extended/procps/procps_4.0.3.bb
deleted file mode 100644
index 9ef679c..0000000
--- a/poky/meta/recipes-extended/procps/procps_4.0.3.bb
+++ /dev/null
@@ -1,100 +0,0 @@
-SUMMARY = "System and process monitoring utilities"
-DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \
-the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill."
-HOMEPAGE = "https://gitlab.com/procps-ng/procps"
-SECTION = "base"
-LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
-                    file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
-                    "
-
-DEPENDS = "ncurses"
-
-inherit autotools gettext pkgconfig update-alternatives
-
-SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master \
-           file://sysctl.conf \
-           file://0001-src-w.c-use-utmp.h-only.patch \
-           file://0001-po-fr.po-address-failures-with-gettext-0.22.patch \
-           file://CVE-2023-4016.patch \
-           "
-SRCREV = "806eb270f217ff7e1e745c7bda2b002b5be74be4"
-
-S = "${WORKDIR}/git"
-
-# Upstream has a custom autogen.sh which invokes po/update-potfiles as they
-# don't ship a po/POTFILES.in (which is silly).  Without that file gettext
-# doesn't believe po/ is a gettext directory and won't generate po/Makefile.
-do_configure:prepend() {
-    ( cd ${S} && po/update-potfiles )
-}
-
-EXTRA_OECONF = "--enable-skill --disable-modern-top"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
-
-do_install:append () {
-	install -d ${D}${base_bindir}
-	[ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done
-	install -d ${D}${base_sbindir}
-	[ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done
-        if [ "${base_sbindir}" != "${sbindir}" ]; then
-                rmdir ${D}${sbindir}
-        fi
-
-        install -d ${D}${sysconfdir}
-        install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
-        if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
-                install -d ${D}${sysconfdir}/sysctl.d
-                ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf
-        fi
-}
-
-CONFFILES:${PN} = "${sysconfdir}/sysctl.conf"
-
-bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w"
-base_bindir_progs += "kill pidof ps watch"
-base_sbindir_progs += "sysctl"
-
-ALTERNATIVE_PRIORITY = "200"
-ALTERNATIVE_PRIORITY[pidof] = "150"
-
-ALTERNATIVE:${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}"
-
-ALTERNATIVE:${PN}-doc = "kill.1 uptime.1"
-ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
-ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
-
-python __anonymous() {
-    for prog in d.getVar('base_bindir_progs').split():
-        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
-
-    for prog in d.getVar('base_sbindir_progs').split():
-        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
-}
-
-PROCPS_PACKAGES = "${PN}-lib \
-                   ${PN}-ps \
-                   ${PN}-sysctl"
-
-PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}"
-RDEPENDS:${PN} += "${PROCPS_PACKAGES}"
-
-RDEPENDS:${PN}-ps += "${PN}-lib"
-RDEPENDS:${PN}-sysctl += "${PN}-lib"
-
-FILES:${PN}-lib = "${libdir}"
-FILES:${PN}-ps = "${base_bindir}/ps.${BPN}"
-FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d"
-
-ALTERNATIVE:${PN}:remove = "ps"
-ALTERNATIVE:${PN}:remove = "sysctl"
-
-ALTERNATIVE:${PN}-ps = "ps"
-ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps"
-ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps"
-
-ALTERNATIVE:${PN}-sysctl = "sysctl"
-ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl"
-ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl"
diff --git a/poky/meta/recipes-extended/procps/procps_4.0.4.bb b/poky/meta/recipes-extended/procps/procps_4.0.4.bb
new file mode 100644
index 0000000..800384f
--- /dev/null
+++ b/poky/meta/recipes-extended/procps/procps_4.0.4.bb
@@ -0,0 +1,97 @@
+SUMMARY = "System and process monitoring utilities"
+DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \
+the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill."
+HOMEPAGE = "https://gitlab.com/procps-ng/procps"
+SECTION = "base"
+LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \
+                    "
+
+DEPENDS = "ncurses"
+
+inherit autotools gettext pkgconfig update-alternatives
+
+SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master \
+           file://sysctl.conf \
+           "
+SRCREV = "4ddcef2fd843170c8e2d59a83042978f41037a2b"
+
+S = "${WORKDIR}/git"
+
+# Upstream has a custom autogen.sh which invokes po/update-potfiles as they
+# don't ship a po/POTFILES.in (which is silly).  Without that file gettext
+# doesn't believe po/ is a gettext directory and won't generate po/Makefile.
+do_configure:prepend() {
+    ( cd ${S} && po/update-potfiles )
+}
+
+EXTRA_OECONF = "--enable-skill --disable-modern-top"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
+
+do_install:append () {
+	install -d ${D}${base_bindir}
+	[ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done
+	install -d ${D}${base_sbindir}
+	[ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done
+        if [ "${base_sbindir}" != "${sbindir}" ]; then
+                rmdir ${D}${sbindir}
+        fi
+
+        install -d ${D}${sysconfdir}
+        install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf
+        if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+                install -d ${D}${sysconfdir}/sysctl.d
+                ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf
+        fi
+}
+
+CONFFILES:${PN} = "${sysconfdir}/sysctl.conf"
+
+bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w"
+base_bindir_progs += "kill pidof ps watch"
+base_sbindir_progs += "sysctl"
+
+ALTERNATIVE_PRIORITY = "200"
+ALTERNATIVE_PRIORITY[pidof] = "150"
+
+ALTERNATIVE:${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}"
+
+ALTERNATIVE:${PN}-doc = "kill.1 uptime.1"
+ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1"
+ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1"
+
+python __anonymous() {
+    for prog in d.getVar('base_bindir_progs').split():
+        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog))
+
+    for prog in d.getVar('base_sbindir_progs').split():
+        d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog))
+}
+
+PROCPS_PACKAGES = "${PN}-lib \
+                   ${PN}-ps \
+                   ${PN}-sysctl"
+
+PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}"
+RDEPENDS:${PN} += "${PROCPS_PACKAGES}"
+
+RDEPENDS:${PN}-ps += "${PN}-lib"
+RDEPENDS:${PN}-sysctl += "${PN}-lib"
+
+FILES:${PN}-lib = "${libdir}"
+FILES:${PN}-ps = "${base_bindir}/ps.${BPN}"
+FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d"
+
+ALTERNATIVE:${PN}:remove = "ps"
+ALTERNATIVE:${PN}:remove = "sysctl"
+
+ALTERNATIVE:${PN}-ps = "ps"
+ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps"
+ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps"
+
+ALTERNATIVE:${PN}-sysctl = "sysctl"
+ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl"
+ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl"
diff --git a/poky/meta/recipes-extended/screen/screen/0001-configure-Add-needed-system-headers-in-checks.patch b/poky/meta/recipes-extended/screen/screen/0001-configure-Add-needed-system-headers-in-checks.patch
deleted file mode 100644
index 8065994..0000000
--- a/poky/meta/recipes-extended/screen/screen/0001-configure-Add-needed-system-headers-in-checks.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 4e102de2e6204c1d8e8be00bb5ffd4587e70350c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 15 Aug 2022 10:35:53 -0700
-Subject: [PATCH] configure: Add needed system headers in checks
-
-Newer compilers throw warnings when a funciton is used with implicit
-declaration and enabling -Werror can silently fail these tests and
-result in wrong configure results. Therefore add the needed headers in
-the AC_TRY_LINK macros
-
-	* configure.ac: Add missing system headers in AC_TRY_LINK.
-
-Upstream-Status: Submitted [https://lists.gnu.org/archive/html/screen-devel/2022-08/msg00000.html]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 57 +++++++++++++++++++++++++++++++++++++++-------------
- 1 file changed, 43 insertions(+), 14 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index c0f02df..d308079 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -233,6 +233,7 @@ AC_CHECKING(BSD job jontrol)
- AC_TRY_LINK(
- [#include <sys/types.h>
- #include <sys/ioctl.h>
-+#include <unistd.h>
- ], [
- #ifdef POSIX
- tcsetpgrp(0, 0);
-@@ -250,12 +251,16 @@ dnl
- dnl    ****  setresuid(), setreuid(), seteuid()  ****
- dnl
- AC_CHECKING(setresuid)
--AC_TRY_LINK(,[
--setresuid(0, 0, 0);
-+AC_TRY_LINK([
-+#include <unistd.h>
-+],[
-+return setresuid(0, 0, 0);
- ], AC_DEFINE(HAVE_SETRESUID))
- AC_CHECKING(setreuid)
--AC_TRY_LINK(,[
--setreuid(0, 0);
-+AC_TRY_LINK([
-+#include <unistd.h>
-+],[
-+return setreuid(0, 0);
- ], AC_DEFINE(HAVE_SETREUID))
- dnl
- dnl seteuid() check:
-@@ -274,7 +279,9 @@ seteuid(0);
- 
- dnl execvpe
- AC_CHECKING(execvpe)
--AC_TRY_LINK(,[
-+AC_TRY_LINK([
-+    #include <unistd.h>
-+],[
-     execvpe(0, 0, 0);
- ], AC_DEFINE(HAVE_EXECVPE)
- CFLAGS="$CFLAGS -D_GNU_SOURCE")
-@@ -284,10 +291,18 @@ dnl    ****  select()  ****
- dnl
- 
- AC_CHECKING(select)
--AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, 
-+AC_TRY_LINK([
-+    #include <sys/select.h>
-+],[
-+    select(0, 0, 0, 0, 0);
-+],, 
- LIBS="$LIBS -lnet -lnsl"
- AC_CHECKING(select with $LIBS)
--AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, 
-+AC_TRY_LINK([
-+    #include <sys/select.h>
-+],[
-+    select(0, 0, 0, 0, 0);
-+],, 
- AC_MSG_ERROR(!!! no select - no screen))
- )
- dnl
-@@ -624,11 +639,19 @@ dnl
- dnl    ****  termcap or terminfo  ****
- dnl
- AC_CHECKING(for tgetent)
--AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
-+AC_TRY_LINK([
-+    #include <curses.h>
-+    #include <term.h>
-+],[
-+    tgetent((char *)0, (char *)0);
-+],,
- olibs="$LIBS"
- LIBS="-lcurses $olibs"
- AC_CHECKING(libcurses)
--AC_TRY_LINK(,[
-+AC_TRY_LINK([
-+    #include <curses.h>
-+    #include <term.h>
-+],[
- #ifdef __hpux
- __sorry_hpux_libcurses_is_totally_broken_in_10_10();
- #else
-@@ -871,7 +894,7 @@ test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil"
- fi
- 
- AC_CHECKING(getloadavg)
--AC_TRY_LINK(,[getloadavg((double *)0, 0);],
-+AC_TRY_LINK([#include <stdlib.h>],[getloadavg((double *)0, 0);],
- AC_DEFINE(LOADAV_GETLOADAVG) load=1,
- if test "$cross_compiling" = no && test -f /usr/lib/libkvm.a ; then
- olibs="$LIBS"
-@@ -1109,10 +1132,10 @@ AC_CHECKING(IRIX sun library)
- AC_TRY_LINK(,,,LIBS="$oldlibs")
- 
- AC_CHECKING(syslog)
--AC_TRY_LINK(,[closelog();], , [oldlibs="$LIBS"
-+AC_TRY_LINK([#include <syslog.h>],[closelog();], , [oldlibs="$LIBS"
- LIBS="$LIBS -lbsd"
- AC_CHECKING(syslog in libbsd.a)
--AC_TRY_LINK(, [closelog();], AC_NOTE(- found.), [LIBS="$oldlibs"
-+AC_TRY_LINK([#include <syslog.h>], [closelog();], AC_NOTE(- found.), [LIBS="$oldlibs"
- AC_NOTE(- bad news: syslog missing.) AC_DEFINE(NOSYSLOG)])])
- 
- AC_EGREP_CPP(YES_IS_DEFINED,
-@@ -1149,7 +1172,7 @@ AC_CHECKING(getspnam)
- AC_TRY_LINK([#include <shadow.h>], [getspnam("x");],AC_DEFINE(SHADOWPW))
- 
- AC_CHECKING(getttyent)
--AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT))
-+AC_TRY_LINK([#include <ttyent.h>],[getttyent();], AC_DEFINE(GETTTYENT))
- 
- AC_CHECKING(fdwalk)
- AC_TRY_LINK([#include <stdlib.h>], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK))
-@@ -1204,7 +1227,13 @@ main() {
- AC_SYS_LONG_FILE_NAMES
- 
- AC_MSG_CHECKING(for vsprintf)
--AC_TRY_LINK([#include <stdarg.h>],[va_list valist; vsprintf(0,0,valist);], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no))
-+AC_TRY_LINK([
-+    #include <stdarg.h>
-+    #include <stdio.h>
-+],[
-+   va_list valist;
-+   vsprintf(0,0,valist);
-+], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no))
- 
- AC_HEADER_DIRENT
- 
diff --git a/poky/meta/recipes-extended/screen/screen/signal-permission.patch b/poky/meta/recipes-extended/screen/screen/signal-permission.patch
deleted file mode 100644
index 77dc649..0000000
--- a/poky/meta/recipes-extended/screen/screen/signal-permission.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From e9ad41bfedb4537a6f0de20f00b27c7739f168f7 Mon Sep 17 00:00:00 2001
-From: Alexander Naumov <alexander_naumov@opensuse.org>
-Date: Mon, 30 Jan 2023 17:22:25 +0200
-Subject: fix: missing signal sending permission check on failed query messages
-
-Signed-off-by: Alexander Naumov <alexander_naumov@opensuse.org>
-
-CVE: CVE-2023-24626
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@arm.com>
----
- src/socket.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/src/socket.c b/src/socket.c
-index 147dc54..54d8cb8 100644
---- a/socket.c
-+++ b/socket.c
-@@ -1285,11 +1285,16 @@ ReceiveMsg()
-           else
-             queryflag = -1;
- 
--          Kill(m.m.command.apid,
-+          if (CheckPid(m.m.command.apid)) {
-+            Msg(0, "Query attempt with bad pid(%d)!", m.m.command.apid);
-+          }
-+          else {
-+            Kill(m.m.command.apid,
-                (queryflag >= 0)
-                    ? SIGCONT
-                    : SIG_BYE); /* Send SIG_BYE if an error happened */
--          queryflag = -1;
-+            queryflag = -1;
-+          }
-         }
-         break;
-       case MSG_COMMAND:
--- 
-cgit v1.1
-
diff --git a/poky/meta/recipes-extended/screen/screen_4.9.0.bb b/poky/meta/recipes-extended/screen/screen_4.9.0.bb
deleted file mode 100644
index 235cd8c..0000000
--- a/poky/meta/recipes-extended/screen/screen_4.9.0.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-SUMMARY = "Multiplexing terminal manager"
-DESCRIPTION = "Screen is a full-screen window manager \
-that multiplexes a physical terminal between several \
-processes, typically interactive shells."
-HOMEPAGE = "http://www.gnu.org/software/screen/"
-BUGTRACKER = "https://savannah.gnu.org/bugs/?func=additem&group=screen"
-
-SECTION = "console/utils"
-
-LICENSE = "GPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
-                    file://screen.h;endline=26;md5=b8dc717c9a3dba842ae6c44ca0f73f52 \
-                    "
-
-DEPENDS = "ncurses virtual/crypt \
-          ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
-RDEPENDS:${PN} = "base-files"
-
-SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
-           ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'file://screen.pam', '', d)} \
-           file://0002-comm.h-now-depends-on-term.h.patch \
-           file://0001-fix-for-multijob-build.patch \
-           file://0001-Remove-more-compatibility-stuff.patch \
-           file://0001-configure-Add-needed-system-headers-in-checks.patch \
-           file://signal-permission.patch \
-           "
-
-SRC_URI[sha256sum] = "f9335281bb4d1538ed078df78a20c2f39d3af9a4e91c57d084271e0289c730f4"
-
-inherit autotools texinfo
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[utempter] = "ac_cv_header_utempter_h=yes,ac_cv_header_utempter_h=no,libutempter,"
-
-EXTRA_OECONF = "--with-pty-mode=0620 --with-pty-group=5 --with-sys-screenrc=${sysconfdir}/screenrc \
-               ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)}"
-
-do_install:append () {
-	install -D -m 644 ${S}/etc/etcscreenrc ${D}/${sysconfdir}/screenrc
-	if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
-		install -D -m 644 ${WORKDIR}/screen.pam ${D}/${sysconfdir}/pam.d/screen
-	fi
-}
-
-pkg_postinst:${PN} () {
-	grep -q "^${bindir}/screen$" $D${sysconfdir}/shells || echo ${bindir}/screen >> $D${sysconfdir}/shells
-}
-
-pkg_postrm:${PN} () {
-	printf "$(grep -v "^${bindir}/screen$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
-}
diff --git a/poky/meta/recipes-extended/screen/screen_4.9.1.bb b/poky/meta/recipes-extended/screen/screen_4.9.1.bb
new file mode 100644
index 0000000..7b040e6
--- /dev/null
+++ b/poky/meta/recipes-extended/screen/screen_4.9.1.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Multiplexing terminal manager"
+DESCRIPTION = "Screen is a full-screen window manager \
+that multiplexes a physical terminal between several \
+processes, typically interactive shells."
+HOMEPAGE = "http://www.gnu.org/software/screen/"
+BUGTRACKER = "https://savannah.gnu.org/bugs/?func=additem&group=screen"
+
+SECTION = "console/utils"
+
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+                    file://screen.h;endline=26;md5=b8dc717c9a3dba842ae6c44ca0f73f52 \
+                    "
+
+DEPENDS = "ncurses virtual/crypt \
+          ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+RDEPENDS:${PN} = "base-files"
+
+SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
+           ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'file://screen.pam', '', d)} \
+           file://0002-comm.h-now-depends-on-term.h.patch \
+           file://0001-fix-for-multijob-build.patch \
+           file://0001-Remove-more-compatibility-stuff.patch \
+           "
+
+SRC_URI[sha256sum] = "26cef3e3c42571c0d484ad6faf110c5c15091fbf872b06fa7aa4766c7405ac69"
+
+inherit autotools texinfo
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[utempter] = "ac_cv_header_utempter_h=yes,ac_cv_header_utempter_h=no,libutempter,"
+
+EXTRA_OECONF = "--with-pty-mode=0620 --with-pty-group=5 --with-sys-screenrc=${sysconfdir}/screenrc \
+               ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)}"
+
+do_install:append () {
+	install -D -m 644 ${S}/etc/etcscreenrc ${D}/${sysconfdir}/screenrc
+	if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+		install -D -m 644 ${WORKDIR}/screen.pam ${D}/${sysconfdir}/pam.d/screen
+	fi
+}
+
+pkg_postinst:${PN} () {
+	grep -q "^${bindir}/screen$" $D${sysconfdir}/shells || echo ${bindir}/screen >> $D${sysconfdir}/shells
+}
+
+pkg_postrm:${PN} () {
+	printf "$(grep -v "^${bindir}/screen$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
+}
diff --git a/poky/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-login.patch b/poky/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-login.patch
index 37ba5f3..89f9c05 100644
--- a/poky/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-login.patch
+++ b/poky/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-login.patch
@@ -7,7 +7,7 @@
     Login timed out message prints only first few bytes when write is immediately followed by exit.
     Calling exit from new handler provides enough time to display full message.
 
-Upstream-Status: Accepted [https://github.com/shadow-maint/shadow/commit/670cae834827a8f794e6f7464fa57790d911b63c]
+Upstream-Status: Backport [https://github.com/shadow-maint/shadow/commit/670cae834827a8f794e6f7464fa57790d911b63c]
 
 diff --git a/src/login.c b/src/login.c
 index 116e2cb3..c55f4de0 100644
diff --git a/poky/meta/recipes-extended/shadow/shadow-securetty_4.6.bb b/poky/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
index c78f888..fe51ea1 100644
--- a/poky/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
+++ b/poky/meta/recipes-extended/shadow/shadow-securetty_4.6.bb
@@ -5,7 +5,6 @@
 
 INHIBIT_DEFAULT_DEPS = "1"
 
-PR = "r3"
 
 SRC_URI = "file://securetty"
 
diff --git a/poky/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb b/poky/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
index 6580bd9..00ab58b 100644
--- a/poky/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
+++ b/poky/meta/recipes-extended/shadow/shadow-sysroot_4.6.bb
@@ -7,7 +7,6 @@
 
 DEPENDS = "base-passwd"
 
-PR = "r3"
 
 # The sole purpose of this recipe is to provide the /etc/login.defs
 # file for the target sysroot - needed so the shadow-native utilities
diff --git a/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.04.bb b/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.04.bb
deleted file mode 100644
index af84339..0000000
--- a/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.04.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "System load testing utility"
-DESCRIPTION = "Deliberately simple workload generator for POSIX systems. It \
-imposes a configurable amount of CPU, memory, I/O, and disk stress on the system."
-HOMEPAGE = "https://github.com/ColinIanKing/stress-ng#readme"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/ColinIanKing/stress-ng.git;protocol=https;branch=master \
-           "
-SRCREV = "95777d7cf32de9fc88c452a968ae2ae23ed269c2"
-S = "${WORKDIR}/git"
-
-DEPENDS = "coreutils-native libbsd"
-
-PROVIDES = "stress"
-RPROVIDES:${PN} = "stress"
-RREPLACES:${PN} = "stress"
-RCONFLICTS:${PN} = "stress"
-
-inherit bash-completion
-
-EXTRA_OEMAKE = "VERBOSE=1"
-
-do_configure() {
-    mkdir -p configs
-    touch configs/HAVE_APPARMOR
-    oe_runmake makeconfig
-}
-
-do_install() {
-    oe_runmake DESTDIR=${D} BINDIR=${bindir} install
-    ln -s stress-ng ${D}${bindir}/stress
-}
-
-# upstream issue: https://github.com/ColinIanKing/stress-ng/issues/315
-DEBUG_BUILD = "0"
diff --git a/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb b/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb
new file mode 100644
index 0000000..1a1e9e4
--- /dev/null
+++ b/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb
@@ -0,0 +1,36 @@
+SUMMARY = "System load testing utility"
+DESCRIPTION = "Deliberately simple workload generator for POSIX systems. It \
+imposes a configurable amount of CPU, memory, I/O, and disk stress on the system."
+HOMEPAGE = "https://github.com/ColinIanKing/stress-ng#readme"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/ColinIanKing/stress-ng.git;protocol=https;branch=master \
+           "
+SRCREV = "aea6f3306f4676a7f7e8d8c507f811ef3d0244c5"
+S = "${WORKDIR}/git"
+
+DEPENDS = "coreutils-native libbsd"
+
+PROVIDES = "stress"
+RPROVIDES:${PN} = "stress"
+RREPLACES:${PN} = "stress"
+RCONFLICTS:${PN} = "stress"
+
+inherit bash-completion
+
+EXTRA_OEMAKE = "VERBOSE=1"
+
+do_configure() {
+    mkdir -p configs
+    touch configs/HAVE_APPARMOR
+    oe_runmake makeconfig
+}
+
+do_install() {
+    oe_runmake DESTDIR=${D} BINDIR=${bindir} install
+    ln -s stress-ng ${D}${bindir}/stress
+}
+
+# upstream issue: https://github.com/ColinIanKing/stress-ng/issues/315
+DEBUG_BUILD = "0"
diff --git a/poky/meta/recipes-extended/sysstat/sysstat.inc b/poky/meta/recipes-extended/sysstat/sysstat.inc
deleted file mode 100644
index 7733772..0000000
--- a/poky/meta/recipes-extended/sysstat/sysstat.inc
+++ /dev/null
@@ -1,71 +0,0 @@
-SUMMARY = "System performance tools"
-DESCRIPTION = "The sysstat utilities are a collection of performance monitoring tools for Linux."
-HOMEPAGE = "http://sebastien.godard.pagesperso-orange.fr/"
-LICENSE = "GPL-2.0-or-later"
-SECTION = "console/utils"
-
-SRC_URI = "http://pagesperso-orange.fr/sebastien.godard/${BP}.tar.xz \
-           file://99_sysstat \
-           file://sysstat.service \
-          "
-
-UPSTREAM_CHECK_URI = "http://sebastien.godard.pagesperso-orange.fr/download.html"
-
-DEPENDS += "base-passwd"
-
-# autotools-brokensep as this package doesn't use automake
-inherit autotools-brokensep gettext systemd upstream-version-is-even
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[lm-sensors] = "--enable-sensors,--disable-sensors,lmsensors,lmsensors-libsensors"
-PACKAGECONFIG[cron] = "--enable-install-cron --enable-copy-only,--disable-install-cron --disable-copy-only"
-PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}"
-
-EXTRA_OECONF += "--disable-stripping"
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE:${PN} = "sysstat.service"
-SYSTEMD_AUTO_ENABLE = "enable"
-
-do_configure:prepend() {
-    export sa_lib_dir=${libexecdir}/sa
-}
-
-do_install() {
-	autotools_do_install
-
-	# Don't version the documentation
-	mv ${D}${docdir}/${BP} ${D}${docdir}/${BPN}
-
-	# don't install /var/log/sa when populating rootfs. Do it through volatile
-	rm -rf ${D}/var
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
-	        install -d ${D}/etc/default/volatiles
-		install -m 0644 ${WORKDIR}/99_sysstat ${D}/etc/default/volatiles
-	fi
-	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-	        install -d ${D}${sysconfdir}/tmpfiles.d
-	        echo "d ${localstatedir}/log/sa - - - -" \
-		     > ${D}${sysconfdir}/tmpfiles.d/sysstat.conf
-
-		# Unless both cron and systemd are enabled, install our own
-		# systemd unit file. Otherwise the package will install one.
-	        if ${@bb.utils.contains('PACKAGECONFIG', 'cron systemd', 'false', 'true', d)}; then
-			install -d ${D}${systemd_system_unitdir}
-			install -m 0644 ${WORKDIR}/sysstat.service ${D}${systemd_system_unitdir}
-			sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_system_unitdir}/sysstat.service
-	        fi
-	fi
-}
-
-pkg_postinst:${PN} () {
-	if [  ! -n "$D" ]; then
-		if [ -e /etc/init.d/populate-volatile.sh ]; then
-			/etc/init.d/populate-volatile.sh update
-		fi
-	fi
-}
-
-FILES:${PN} += "${systemd_system_unitdir} ${nonarch_base_libdir}/systemd"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/poky/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch b/poky/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
index 4067bb9..84383f9 100644
--- a/poky/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
+++ b/poky/meta/recipes-extended/sysstat/sysstat/0001-configure.in-remove-check-for-chkconfig.patch
@@ -1,7 +1,7 @@
 From 1590cc614aaf0fb81cd804414d6c9d5a9227352c Mon Sep 17 00:00:00 2001
 From: Wenlin Kang <wenlin.kang@windriver.com>
 Date: Tue, 5 Nov 2019 16:16:44 +0800
-Subject: [PATCH] configure.in: remove check for chkconfig
+Subject: [PATCH] configure.ac: remove check for chkconfig
 
 chkconfig can't work on cross-platform, so should remove check for it.
 
@@ -9,13 +9,13 @@
 
 Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
 ---
- configure.in | 3 ++-
+ configure.ac | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
-diff --git a/configure.in b/configure.in
+diff --git a/configure.ac b/configure.ac
 index 48b9a31..cedeb43 100644
---- a/configure.in
-+++ b/configure.in
+--- a/configure.ac
++++ b/configure.ac
 @@ -42,7 +42,8 @@ AC_SUBST(VER_JSON)
  AC_SUBST(VER_XML)
  
diff --git a/poky/meta/recipes-extended/sysstat/sysstat/CVE-2023-33204.patch b/poky/meta/recipes-extended/sysstat/sysstat/CVE-2023-33204.patch
deleted file mode 100644
index a7b51f3..0000000
--- a/poky/meta/recipes-extended/sysstat/sysstat/CVE-2023-33204.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 0764cb56df4a5afdf04980c9eb6735f789f5aa42 Mon Sep 17 00:00:00 2001
-From: Pavel Kopylov <pkopylov@cloudlinux.com>
-Date: Wed, 17 May 2023 11:33:45 +0200
-Subject: [PATCH] Fix an overflow which is still possible for some values.
-
-CVE: CVE-2023-33204
-Upstream-Status: Backport [https://github.com/sysstat/sysstat/commit/954ff2e2673c]
-
-Backport Changes:
-Adopt additional changes as per following merge commit of pull request:
-https://github.com/sysstat/sysstat/commit/6f8dc568e6ab
-
-Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
-Signed-off-by: Sanjay Chitroda <schitrod@cisco.com>
----
- common.c | 14 ++++++++------
- 1 file changed, 8 insertions(+), 6 deletions(-)
-
-diff --git a/common.c b/common.c
-index a3d31a5..138920c 100644
---- a/common.c
-+++ b/common.c
-@@ -447,15 +447,17 @@ int check_dir(char *dirname)
- void check_overflow(unsigned int val1, unsigned int val2,
- 		    unsigned int val3)
- {
--	if ((unsigned long long) val1 * (unsigned long long) val2 *
--	    (unsigned long long) val3 > UINT_MAX) {
-+	if ((val1 != 0) && (val2 != 0) && (val3 != 0) &&
-+		(((unsigned long long)UINT_MAX / (unsigned long long)val1 <
-+		(unsigned long long)val2) ||
-+		((unsigned long long)UINT_MAX / ((unsigned long long)val1 *
-+		(unsigned long long)val2) < (unsigned long long)val3))) {
- #ifdef DEBUG
--		fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
--			__FUNCTION__, (unsigned long long) val1 * (unsigned long long) val2 *
--			(unsigned long long) val3);
-+		fprintf(stderr, "%s: Overflow detected (%u,%u,%u). Aborting...\n",
-+			__FUNCTION__, val1, val2, val3);
- #endif
- 	exit(4);
--		}
-+	}
- }
- 
- #ifndef SOURCE_SADC
diff --git a/poky/meta/recipes-extended/sysstat/sysstat_12.6.2.bb b/poky/meta/recipes-extended/sysstat/sysstat_12.6.2.bb
deleted file mode 100644
index b5014ea..0000000
--- a/poky/meta/recipes-extended/sysstat/sysstat_12.6.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require sysstat.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=a23a74b3f4caf9616230789d94217acb"
-
-SRC_URI += "file://0001-configure.in-remove-check-for-chkconfig.patch \
-            file://CVE-2023-33204.patch \
-            "
-
-SRC_URI[sha256sum] = "3e77134aedaa6fc57d9745da67edfd8990e19adee71ac47196229261c563fb48"
diff --git a/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb b/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb
new file mode 100644
index 0000000..134fd5c
--- /dev/null
+++ b/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb
@@ -0,0 +1,76 @@
+SUMMARY = "System performance tools"
+DESCRIPTION = "The sysstat utilities are a collection of performance monitoring tools for Linux."
+HOMEPAGE = "https://sysstat.github.io/"
+LICENSE = "GPL-2.0-or-later"
+SECTION = "console/utils"
+
+SRC_URI = "git://github.com/sysstat/sysstat.git;protocol=https;branch=master \
+           file://99_sysstat \
+           file://sysstat.service \
+           file://0001-configure.in-remove-check-for-chkconfig.patch \
+          "
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a23a74b3f4caf9616230789d94217acb"
+
+SRCREV = "1df0d61306ae826c896a5cf6f665d58c671c0498"
+S = "${WORKDIR}/git"
+
+DEPENDS += "base-passwd"
+
+# autotools-brokensep as this package doesn't use automake
+inherit autotools-brokensep gettext systemd
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[lm-sensors] = "--enable-sensors,--disable-sensors,lmsensors,lmsensors-libsensors"
+PACKAGECONFIG[cron] = "--enable-install-cron --enable-copy-only,--disable-install-cron --disable-copy-only"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_system_unitdir}"
+
+EXTRA_OECONF += "--disable-stripping"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "sysstat.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+do_configure:prepend() {
+    export sa_lib_dir=${libexecdir}/sa
+}
+
+do_install() {
+	autotools_do_install
+
+	# Don't version the documentation
+	mv ${D}${docdir}/${BP} ${D}${docdir}/${BPN}
+
+	# don't install /var/log/sa when populating rootfs. Do it through volatile
+	rm -rf ${D}/var
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+	        install -d ${D}/etc/default/volatiles
+		install -m 0644 ${WORKDIR}/99_sysstat ${D}/etc/default/volatiles
+	fi
+	if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+	        install -d ${D}${sysconfdir}/tmpfiles.d
+	        echo "d ${localstatedir}/log/sa - - - -" \
+		     > ${D}${sysconfdir}/tmpfiles.d/sysstat.conf
+
+		# Unless both cron and systemd are enabled, install our own
+		# systemd unit file. Otherwise the package will install one.
+	        if ${@bb.utils.contains('PACKAGECONFIG', 'cron systemd', 'false', 'true', d)}; then
+			install -d ${D}${systemd_system_unitdir}
+			install -m 0644 ${WORKDIR}/sysstat.service ${D}${systemd_system_unitdir}
+			sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_system_unitdir}/sysstat.service
+	        fi
+	fi
+}
+
+pkg_postinst:${PN} () {
+	if [  ! -n "$D" ]; then
+		if [ -e /etc/init.d/populate-volatile.sh ]; then
+			/etc/init.d/populate-volatile.sh update
+		fi
+	fi
+}
+
+FILES:${PN} += "${systemd_system_unitdir} ${nonarch_base_libdir}/systemd"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
diff --git a/poky/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch b/poky/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch
new file mode 100644
index 0000000..27d4d9a
--- /dev/null
+++ b/poky/meta/recipes-extended/tar/tar/0001-tests-fix-TESTSUITE_AT.patch
@@ -0,0 +1,228 @@
+From 39849e9d91f477d3fb839f93cd0815d0cb3273e9 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue, 18 Jul 2023 09:15:03 -0700
+Subject: tests: fix TESTSUITE_AT
+
+Problem reported by Lukas Javorsky <ljavorsk@redhat.com> in:
+https://lists.gnu.org/r/bug-tar/2023-07/msg00002.html
+* tests/Makefile.am (TESTSUITE_AT): Add exclude17.at, exclude18.at.
+Remove compress.m4; all uses changed.  Add a comment saying how
+to rederive this.  Sort.
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=39849e9d91f477d3fb839f93cd0815d0cb3273e9]
+---
+ tests/Makefile.am | 93 ++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 48 insertions(+), 45 deletions(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 4a8f501..1884b72 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -45,21 +45,24 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
+ ## Test suite.  ##
+ ## ------------ ##
+ 
++# You can generate the body of this macro with the following shell command:
++# LC_ALL=C ls *.at */*.at | sed -e 's/^/ /' -e '$!s/$/\\/'
+ TESTSUITE_AT = \
+- testsuite.at\
+- compress.m4\
+  T-cd.at\
+  T-dir00.at\
+  T-dir01.at\
+  T-empty.at\
++ T-mult.at\
++ T-nest.at\
++ T-nonl.at\
+  T-null.at\
+  T-null2.at\
+  T-rec.at\
+  T-recurse.at\
+  T-zfile.at\
+- T-nonl.at\
+- T-mult.at\
+- T-nest.at\
++ acls01.at\
++ acls02.at\
++ acls03.at\
+  add-file.at\
+  append.at\
+  append01.at\
+@@ -68,14 +71,15 @@ TESTSUITE_AT = \
+  append04.at\
+  append05.at\
+  backup01.at\
+- chtype.at\
+- comprec.at\
+- comperr.at\
++ capabs_raw01.at\
+  checkpoint/defaults.at\
+- checkpoint/interval.at\
+- checkpoint/dot.at\
+  checkpoint/dot-compat.at\
+  checkpoint/dot-int.at\
++ checkpoint/dot.at\
++ checkpoint/interval.at\
++ chtype.at\
++ comperr.at\
++ comprec.at\
+  delete01.at\
+  delete02.at\
+  delete03.at\
+@@ -83,6 +87,8 @@ TESTSUITE_AT = \
+  delete05.at\
+  delete06.at\
+  difflink.at\
++ dirrem01.at\
++ dirrem02.at\
+  exclude.at\
+  exclude01.at\
+  exclude02.at\
+@@ -100,6 +106,8 @@ TESTSUITE_AT = \
+  exclude14.at\
+  exclude15.at\
+  exclude16.at\
++ exclude17.at\
++ exclude18.at\
+  extrac01.at\
+  extrac02.at\
+  extrac03.at\
+@@ -127,11 +135,9 @@ TESTSUITE_AT = \
+  extrac25.at\
+  filerem01.at\
+  filerem02.at\
+- dirrem01.at\
+- dirrem02.at\
+- gzip.at\
+  grow.at\
+- incremental.at\
++ gzip.at\
++ ignfail.at\
+  incr01.at\
+  incr02.at\
+  incr03.at\
+@@ -143,8 +149,8 @@ TESTSUITE_AT = \
+  incr09.at\
+  incr10.at\
+  incr11.at\
++ incremental.at\
+  indexfile.at\
+- ignfail.at\
+  label01.at\
+  label02.at\
+  label03.at\
+@@ -188,22 +194,16 @@ TESTSUITE_AT = \
+  opcomp04.at\
+  opcomp05.at\
+  opcomp06.at\
+- positional01.at\
+- positional02.at\
+- positional03.at\
+  options.at\
+  options02.at\
+  options03.at\
+  owner.at\
+  pipe.at\
+- recurse.at\
++ positional01.at\
++ positional02.at\
++ positional03.at\
+  recurs02.at\
+- rename01.at\
+- rename02.at\
+- rename03.at\
+- rename04.at\
+- rename05.at\
+- rename06.at\
++ recurse.at\
+  remfiles01.at\
+  remfiles02.at\
+  remfiles03.at\
+@@ -226,11 +226,19 @@ TESTSUITE_AT = \
+  remfiles09b.at\
+  remfiles09c.at\
+  remfiles10.at\
++ rename01.at\
++ rename02.at\
++ rename03.at\
++ rename04.at\
++ rename05.at\
++ rename06.at\
+  same-order01.at\
+  same-order02.at\
++ selacl01.at\
++ selnx01.at\
+  shortfile.at\
+- shortupd.at\
+  shortrec.at\
++ shortupd.at\
+  sigpipe.at\
+  sparse01.at\
+  sparse02.at\
+@@ -247,6 +255,13 @@ TESTSUITE_AT = \
+  sptrcreat.at\
+  sptrdiff00.at\
+  sptrdiff01.at\
++ star/gtarfail.at\
++ star/gtarfail2.at\
++ star/multi-fail.at\
++ star/pax-big-10g.at\
++ star/ustar-big-2g.at\
++ star/ustar-big-8g.at\
++ testsuite.at\
+  time01.at\
+  time02.at\
+  truncate.at\
+@@ -255,21 +270,11 @@ TESTSUITE_AT = \
+  update02.at\
+  update03.at\
+  update04.at\
+- volsize.at\
+- volume.at\
+  verbose.at\
+  verify.at\
+  version.at\
+- xform-h.at\
+- xform01.at\
+- xform02.at\
+- xform03.at\
+- star/gtarfail.at\
+- star/gtarfail2.at\
+- star/multi-fail.at\
+- star/ustar-big-2g.at\
+- star/ustar-big-8g.at\
+- star/pax-big-10g.at\
++ volsize.at\
++ volume.at\
+  xattr01.at\
+  xattr02.at\
+  xattr03.at\
+@@ -278,12 +283,10 @@ TESTSUITE_AT = \
+  xattr06.at\
+  xattr07.at\
+  xattr08.at\
+- acls01.at\
+- acls02.at\
+- acls03.at\
+- selnx01.at\
+- selacl01.at\
+- capabs_raw01.at
++ xform-h.at\
++ xform01.at\
++ xform02.at\
++ xform03.at
+ 
+ distclean-local:
+ 	-rm -rf download
+@@ -291,7 +294,7 @@ distclean-local:
+ TESTSUITE = $(srcdir)/testsuite
+ 
+ AUTOTEST = $(AUTOM4TE) --language=autotest
+-$(TESTSUITE): package.m4 $(TESTSUITE_AT)
++$(TESTSUITE): compress.m4 package.m4 $(TESTSUITE_AT)
+ 	$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
+ 	mv $@.tmp $@
+ 
+-- 
+cgit v1.1
+
diff --git a/poky/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch b/poky/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch
new file mode 100644
index 0000000..6cd8c55
--- /dev/null
+++ b/poky/meta/recipes-extended/tar/tar/0002-tests-check-for-recently-fixed-bug.patch
@@ -0,0 +1,60 @@
+From 0f0722df45ec520d0dac7c9ad7e69165e9140931 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Fri, 7 Oct 2022 15:22:07 -0700
+Subject: tests: check for recently-fixed bug
+
+* tests/exclude17.at: New file.
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=0f0722df45ec520d0dac7c9ad7e69165e9140931]
+
+Signed-off-by: Qiu Tingting <qiutt@fujitsu.com>
+
+---
+ tests/exclude17.at | 35 +++++++++++++++++++++++++++++++++++
+ 1 files changed, 35 insertions(+)
+ create mode 100644 tests/exclude17.at
+
+diff --git a/tests/exclude17.at b/tests/exclude17.at
+new file mode 100644
+index 0000000..4162b2b
+--- /dev/null
++++ b/tests/exclude17.at
+@@ -0,0 +1,35 @@
++# Process this file with autom4te to create testsuite. -*- Autotest -*-
++#
++# Test suite for GNU tar.
++# Copyright 2013-2022 Free Software Foundation, Inc.
++
++# This file is part of GNU tar.
++
++# GNU tar is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# GNU tar is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++AT_SETUP([--exclude-vcs-ignores memory allocation])
++AT_KEYWORDS([exclude exclude17])
++
++AT_TAR_CHECK([
++mkdir dir
++cd dir
++echo '*.o' >.cvsignore
++tar -cf - --exclude-vcs-ignores . | tar -tf -
++],
++[0],
++[./
++./.cvsignore
++])
++
++AT_CLEANUP
+-- 
+cgit v1.1
+
diff --git a/poky/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch b/poky/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch
new file mode 100644
index 0000000..577a9ba
--- /dev/null
+++ b/poky/meta/recipes-extended/tar/tar/0003-Exclude-VCS-directory-with-writing-from-an-archive.patch
@@ -0,0 +1,112 @@
+From 4f814e0e4c673f86dc65a557f7e55f6b5efd1529 Mon Sep 17 00:00:00 2001
+From: Anton Makrushin <makrusan@gmail.com>
+Date: Mon, 20 Mar 2023 20:05:42 +0530
+Subject: Exclude VCS directory with writing from an archive
+
+See https://savannah.gnu.org/bugs/?62859
+
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/tar.git/commit/?id=4f814e0e4c673f86dc65a557f7e55f6b5efd1529]
+
+Signed-off-by: Qiu Tingting <qiutt@fujitsu.com>
+
+---
+ tests/exclude18.at | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 87 insertions(+)
+ create mode 100644 tests/exclude18.at
+
+diff --git a/tests/exclude18.at b/tests/exclude18.at
+new file mode 100644
+index 0000000..64aaa52
+--- /dev/null
++++ b/tests/exclude18.at
+@@ -0,0 +1,87 @@
++# Process this file with autom4te to create testsuite. -*- Autotest -*-
++
++# Test suite for GNU tar.
++# Copyright 2004-2023 Free Software Foundation, Inc.
++
++# This file is part of GNU tar.
++
++# GNU tar is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# GNU tar is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test --exclude-vcs option with subcommands: EXTRACT, LIST, DIFF.
++# Check VCS directory with files, and empty.
++#
++# Ref: https://savannah.gnu.org/bugs/?62859
++# Wed 03 Aug 2022 04:06:28 PM UTC, original submission:  Quote
++# Mohamed Akram <mohdakram>
++# > The --exclude-vcs flag seems to exclude .gitignore but not .git when
++# extracting.
++
++AT_SETUP([--exclude-vcs extract list compare])
++AT_KEYWORDS([exclude-vcs extract list compare exclude18])
++
++AT_TAR_CHECK([
++AT_SORT_PREREQ
++mkdir gitrepo
++cd gitrepo
++
++# Make an empty VCS directory:
++mkdir .svn
++
++# Make a VCS directory with a file:
++mkdir .git
++touch .git/_A
++
++# Make a VCS file:
++touch .gitignore
++
++# Make non-VCS files:
++touch .git_B
++touch _C
++
++# Create an archive, include VCS:
++cd ..
++tar -cf gitrepo.tar gitrepo
++rm -r gitrepo
++
++echo Extract:
++tar -xvf gitrepo.tar --exclude-vcs | sort
++
++echo
++echo List:
++tar -tf gitrepo.tar --exclude-vcs | sort
++
++echo
++echo Diff:
++tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort
++
++],
++[0],
++[Extract:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++
++List:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++
++Diff:
++gitrepo/
++gitrepo/.git_B
++gitrepo/_C
++],
++[])
++
++AT_CLEANUP
+-- 
+cgit v1.1
+
diff --git a/poky/meta/recipes-extended/tar/tar/run-ptest b/poky/meta/recipes-extended/tar/tar/run-ptest
new file mode 100644
index 0000000..185b33d
--- /dev/null
+++ b/poky/meta/recipes-extended/tar/tar/run-ptest
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Define tar test work dir
+WORKDIR=@PTEST_PATH@/tests/
+
+# Run test
+cd ${WORKDIR}
+./atconfig ./atlocal ./testsuite
+
+# clear log
+rm -rf testsuite.dir
+rm -rf testsuite.log
+
+./testsuite --am-fmt
diff --git a/poky/meta/recipes-extended/tar/tar_1.35.bb b/poky/meta/recipes-extended/tar/tar_1.35.bb
index 4dbd418..c7bd1d1 100644
--- a/poky/meta/recipes-extended/tar/tar_1.35.bb
+++ b/poky/meta/recipes-extended/tar/tar_1.35.bb
@@ -42,6 +42,40 @@
     fi
 }
 
+# add for ptest support
+SRC_URI += " \
+    file://run-ptest \
+    file://0001-tests-fix-TESTSUITE_AT.patch \
+    file://0002-tests-check-for-recently-fixed-bug.patch \
+    file://0003-Exclude-VCS-directory-with-writing-from-an-archive.patch \
+"
+
+inherit ptest
+
+do_compile_ptest() {
+    oe_runmake -C ${B}/gnu/ check
+    oe_runmake -C ${B}/lib/ check
+    oe_runmake -C ${B}/rmt/ check
+    oe_runmake -C ${B}/src/ check
+    rm -rf ${S}/tests/testsuite
+    oe_runmake -C ${B}/tests/ testsuite
+    oe_runmake -C ${B}/tests/ genfile checkseekhole ckmtime
+}
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests/
+    install --mode=755 ${B}/tests/atconfig ${D}${PTEST_PATH}/tests/
+    sed -i "/abs_/d" ${D}${PTEST_PATH}/tests/atconfig
+    echo "abs_builddir=${PTEST_PATH}/tests/" >> ${D}${PTEST_PATH}/tests/atconfig
+    install --mode=755 ${B}/tests/atlocal ${D}${PTEST_PATH}/tests/
+    sed -i "/PATH=/d" ${D}${PTEST_PATH}/tests/atlocal
+    install --mode=755 ${B}/tests/genfile ${D}${PTEST_PATH}/tests/
+    install --mode=755 ${B}/tests/checkseekhole ${D}${PTEST_PATH}/tests/
+    install --mode=755 ${B}/tests/ckmtime ${D}${PTEST_PATH}/tests/
+    install --mode=755 ${S}/tests/testsuite ${D}${PTEST_PATH}/tests/
+    sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/run-ptest
+}
+
 PACKAGES =+ "${PN}-rmt"
 
 FILES:${PN}-rmt = "${sbindir}/rmt*"
diff --git a/poky/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb b/poky/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
index 8137d25..c655da1 100644
--- a/poky/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
+++ b/poky/meta/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bb
@@ -6,7 +6,6 @@
 
 LICENSE = "BSD-1-Clause"
 LIC_FILES_CHKSUM = "file://DISCLAIMER;md5=071bd69cb78b18888ea5e3da5c3127fa"
-PR ="r10"
 
 DEPENDS += "libnsl2"
 
diff --git a/poky/meta/recipes-extended/unzip/unzip_6.0.bb b/poky/meta/recipes-extended/unzip/unzip_6.0.bb
index a53663d..27076d5 100644
--- a/poky/meta/recipes-extended/unzip/unzip_6.0.bb
+++ b/poky/meta/recipes-extended/unzip/unzip_6.0.bb
@@ -5,7 +5,6 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=94caec5a51ef55ef711ee4e8b1c69e29"
 PE = "1"
-PR = "r5"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/infozip/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz \
 	file://avoid-strip.patch \
diff --git a/poky/meta/recipes-extended/watchdog/watchdog_5.16.bb b/poky/meta/recipes-extended/watchdog/watchdog_5.16.bb
index 6031dca..5325cca 100644
--- a/poky/meta/recipes-extended/watchdog/watchdog_5.16.bb
+++ b/poky/meta/recipes-extended/watchdog/watchdog_5.16.bb
@@ -21,7 +21,6 @@
 
 # Can be dropped when the output next changes, avoids failures after
 # reproducibility issues
-PR = "r1"
 
 UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/watchdog/files/watchdog/"
 UPSTREAM_CHECK_REGEX = "/watchdog/(?P<pver>(\d+[\.\-_]*)+)/"
diff --git a/poky/meta/recipes-extended/which/which_2.21.bb b/poky/meta/recipes-extended/which/which_2.21.bb
index c8a5073..7786137 100644
--- a/poky/meta/recipes-extended/which/which_2.21.bb
+++ b/poky/meta/recipes-extended/which/which_2.21.bb
@@ -13,7 +13,6 @@
 
 inherit autotools texinfo update-alternatives
 
-PR = "r3"
 
 EXTRA_OECONF = "--disable-iberty"
 
diff --git a/poky/meta/recipes-extended/zip/zip_3.0.bb b/poky/meta/recipes-extended/zip/zip_3.0.bb
index 3425e8e..70df5ab 100644
--- a/poky/meta/recipes-extended/zip/zip_3.0.bb
+++ b/poky/meta/recipes-extended/zip/zip_3.0.bb
@@ -6,7 +6,6 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=04d43c5d70b496c032308106e26ae17d"
 
-PR = "r2"
 
 S = "${WORKDIR}/zip30"
 
diff --git a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch
deleted file mode 100644
index 0a1487f..0000000
--- a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme/0001-Don-t-use-AC_CANONICAL_HOST.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From e1a12b73c25d1ad0f267b22ac5d799bc1fbd0fa4 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Tue, 30 May 2017 14:55:49 +0300
-Subject: [PATCH] Don't use AC_CANONICAL_HOST
-
-This won't work when building allarch (and is only used to find out if
-target is windows).
-
-Upstream-Status: Inappropriate [embedded specific]
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-
----
- configure.ac | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 6ddc49b..39752bb 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -3,7 +3,6 @@ AC_PREREQ(2.53)
- 
- AC_INIT([adwaita-icon-theme], [43],
-         [http://bugzilla.gnome.org/enter_bug.cgi?product=adwaita-icon-theme])
--AC_CANONICAL_HOST
- AC_CONFIG_MACRO_DIR([m4])
- AC_CONFIG_SRCDIR([index.theme.in])
- 
diff --git a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_43.bb b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_43.bb
deleted file mode 100644
index 8cb4d14..0000000
--- a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_43.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "GTK+ icon theme"
-DESCRIPTION = "The Adwaita icon theme is the default icon theme of the GNOME desktop \
-This package package contains an icon theme for Gtk+ 3 applications."
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme/issues"
-SECTION = "x11/gnome"
-
-LICENSE = "LGPL-3.0-only | CC-BY-SA-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c84cac88e46fc07647ea07e6c24eeb7c \
-                    file://COPYING_CCBYSA3;md5=96143d33de3a79321b1006c4e8ed07e7 \
-                    file://COPYING_LGPL;md5=e6a600fd5e1d9cbde2d983680233ad02"
-
-inherit allarch autotools pkgconfig gettext gtk-icon-cache gnomebase
-
-SRC_URI += " file://0001-Don-t-use-AC_CANONICAL_HOST.patch"
-
-SRC_URI[archive.sha256sum] = "2e3ac77d32a6aa5554155df37e8f0a0dd54fc5a65fd721e88d505f970da32ec6"
-
-DEPENDS += "librsvg-native"
-
-PACKAGES = "${PN}-cursors ${PN}-symbolic-hires ${PN}-symbolic ${PN}-hires ${PN}"
-
-RREPLACES:${PN} = "gnome-icon-theme"
-RCONFLICTS:${PN} = "gnome-icon-theme"
-RPROVIDES:${PN} = "gnome-icon-theme"
-
-FILES:${PN}-cursors = "${prefix}/share/icons/Adwaita/cursors/"
-FILES:${PN}-symbolic-hires = "${prefix}/share/icons/Adwaita/96x96/*/*.symbolic.png \
-                              ${prefix}/share/icons/Adwaita/64x64/*/*.symbolic.png \
-                              ${prefix}/share/icons/Adwaita/48x48/*/*.symbolic.png \
-                              ${prefix}/share/icons/Adwaita/32x32/*/*.symbolic.png"
-FILES:${PN}-symbolic = "${prefix}/share/icons/Adwaita/16x16/*/*.symbolic.png \
-                        ${prefix}/share/icons/Adwaita/24x24/*/*.symbolic.png \
-                        ${prefix}/share/icons/Adwaita/scalable/*/*-symbolic*.svg"
-FILES:${PN}-hires = "${prefix}/share/icons/Adwaita/256x256/ \
-                     ${prefix}/share/icons/Adwaita/512x512/"
-FILES:${PN} = "${prefix}/share/icons/Adwaita/ \
-               ${prefix}/share/pkgconfig/adwaita-icon-theme.pc"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb
new file mode 100644
index 0000000..4dbcced
--- /dev/null
+++ b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "GTK+ icon theme"
+DESCRIPTION = "The Adwaita icon theme is the default icon theme of the GNOME desktop \
+This package package contains an icon theme for Gtk+ 3 applications."
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme/issues"
+SECTION = "x11/gnome"
+
+LICENSE = "LGPL-3.0-only | CC-BY-SA-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c84cac88e46fc07647ea07e6c24eeb7c \
+                    file://COPYING_CCBYSA3;md5=96143d33de3a79321b1006c4e8ed07e7 \
+                    file://COPYING_LGPL;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+GNOMEBASEBUILDCLASS = "meson"
+inherit gnomebase allarch gtk-icon-cache
+
+SRC_URI[archive.sha256sum] = "2442bfb06f4e6cc95bf6e2682fdff98fa5eddc688751b9d6215c623cb4e42ff1"
+
+DEPENDS += "librsvg-native"
+
+PACKAGES =+ "${PN}-cursors ${PN}-symbolic"
+
+RREPLACES:${PN} = "gnome-icon-theme"
+RCONFLICTS:${PN} = "gnome-icon-theme"
+RPROVIDES:${PN} = "gnome-icon-theme"
+
+FILES:${PN}-cursors = "${datadir}/icons/Adwaita/cursors/"
+FILES:${PN}-symbolic = "${datadir}/icons/Adwaita/symbolic*/"
+FILES:${PN}-doc += "${datadir}/licenses/adwaita-icon-theme"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
index 9ba8bcf..c9e1aff 100644
--- a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
+++ b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-Relocate-the-repository-directory-for-native-builds.patch
@@ -1,4 +1,4 @@
-From 2c31944eabbb42a86a4ddaa2998a3b100a13138d Mon Sep 17 00:00:00 2001
+From aeb5532f8be42d42f4e8725ca42e239b36983a4d Mon Sep 17 00:00:00 2001
 From: Sascha Silbe <x-yo17@se-silbe.de>
 Date: Fri, 8 Jun 2018 13:55:10 +0200
 Subject: [PATCH] Relocate the repository directory for native builds
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch
deleted file mode 100644
index 5c78649..0000000
--- a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From b01b448613b76f9acefdfd89ee01686dc7a67df4 Mon Sep 17 00:00:00 2001
-From: Chen Qi <Qi.Chen@windriver.com>
-Date: Tue, 13 Jul 2021 02:05:11 -0700
-Subject: [PATCH] g-ir-tool-template.in: fix girdir path
-
-In case gir_dir_prefix is set, it's possible that g-ir-scanner
-cannot find the .gir files. This is because that the girdir
-is set to gir_dir_prefix, which is wrong. It's not a prefix,
-it the actual gir dir.
-
-Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/329]
-
-Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
----
- tools/g-ir-tool-template.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tools/g-ir-tool-template.in b/tools/g-ir-tool-template.in
-index 6e98f52e..62c07c31 100755
---- a/tools/g-ir-tool-template.in
-+++ b/tools/g-ir-tool-template.in
-@@ -55,7 +55,7 @@ builtins.__dict__['DATADIR'] = datadir
- 
- # Respect gir_dir_prefix
- girdir = ''
--girdir = os.path.abspath(os.path.join(filedir, '..', '@gir_dir_prefix@'))
-+girdir = os.path.abspath(os.path.join(filedir, '..', '@gir_dir_prefix@', 'gir-1.0'))
- builtins.__dict__['GIRDIR'] = [girdir]
- 
- # Again, relative paths first so that the installation prefix is relocatable
--- 
-2.30.2
-
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.76.1.bb b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.76.1.bb
deleted file mode 100644
index 6d00633..0000000
--- a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.76.1.bb
+++ /dev/null
@@ -1,194 +0,0 @@
-SUMMARY = "Middleware layer between GObject-using C libraries and language bindings"
-DESCRIPTION = "GObject Introspection is a project for providing machine \
-readable introspection data of the API of C libraries. This introspection \
-data can be used in several different use cases, for example automatic code \
-generation for bindings, API verification and documentation generation."
-HOMEPAGE = "https://wiki.gnome.org/action/show/Projects/GObjectIntrospection"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/gobject-introspection/issues"
-SECTION = "libs"
-LICENSE = "LGPL-2.0-or-later & GPL-2.0-or-later & MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
-                    file://tools/compiler.c;endline=20;md5=fc5007fc20022720e6c0b0cdde41fabd \
-                    file://giscanner/sourcescanner.c;endline=22;md5=194d6e0c1d00662f32d030ce44de8d39 \
-                    file://girepository/giregisteredtypeinfo.c;endline=21;md5=661847611ae6979465415f31a759ba27 \
-                    "
-
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
-           file://0001-g-ir-tool-template.in-fix-girdir-path.patch \
-           "
-
-SRC_URI[sha256sum] = "196178bf64345501dcdc4d8469b36aa6fe80489354efe71cb7cb8ab82a3738bf"
-
-SRC_URI:append:class-native = " file://0001-Relocate-the-repository-directory-for-native-builds.patch"
-
-inherit meson pkgconfig gtk-doc python3targetconfig qemu gobject-introspection-data upstream-version-is-even multilib_script
-
-GTKDOC_MESON_OPTION = "gtk_doc"
-
-MULTILIB_SCRIPTS = "${PN}:${bindir}/g-ir-annotation-tool ${PN}:${bindir}/g-ir-scanner"
-
-DEPENDS += " libffi zlib glib-2.0 python3 flex-native bison-native"
-
-# target build needs qemu to run temporary introspection binaries created
-# on the fly by g-ir-scanner and a native version of itself to run
-# native versions of its own tools during build.
-DEPENDS:append:class-target = " gobject-introspection-native qemu-native"
-
-# needed for writing out the qemu wrapper script
-export STAGING_DIR_HOST
-export B
-
-PACKAGECONFIG ?= ""
-PACKAGECONFIG[doctool] = "-Ddoctool=enabled,-Ddoctool=disabled,python3-mako,"
-
-# Configure target build to use native tools of itself and to use a qemu wrapper
-# and optionally to generate introspection data
-EXTRA_OEMESON:class-target = " \
-    -Dgi_cross_use_prebuilt_gi=true \
-    -Dgi_cross_binary_wrapper=${B}/g-ir-scanner-qemuwrapper \
-    -Dgi_cross_ldd_wrapper=${B}/g-ir-scanner-lddwrapper \
-    -Dgi_cross_pkgconfig_sysroot_path=${PKG_CONFIG_SYSROOT_DIR} \
-    ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dbuild_introspection_data=true', '-Dbuild_introspection_data=false', d)} \
-    ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
-"
-
-do_configure:prepend:class-native() {
-        # Tweak the native python scripts so that they don't refer to the
-        # full path of native python binary (the solution is taken from glib-2.0 recipe)
-        # This removes the risk of exceeding Linux kernel's shebang line limit (128 bytes)
-        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
-}
-
-do_configure:prepend:class-target() {
-        # Write out a qemu wrapper that will be given to gi-scanner so that it
-        # can run target helper binaries through that.
-        qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','.libs','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
-        cat > ${B}/g-ir-scanner-qemuwrapper << EOF
-#!/bin/sh
-# Use a modules directory which doesn't exist so we don't load random things
-# which may then get deleted (or their dependencies) and potentially segfault
-export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
-
-$qemu_binary "\$@"
-if [ \$? -ne 0 ]; then
-    echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
-    echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
-    exit 1
-fi
-EOF
-        chmod +x ${B}/g-ir-scanner-qemuwrapper
-
-        # Write out a wrapper for g-ir-scanner itself, which will be used when building introspection files
-        # for glib-based packages. This wrapper calls the native version of the scanner, and tells it to use
-        # a qemu wrapper for running transient target binaries produced by the scanner, and an include directory
-        # from the target sysroot.
-        cat > ${B}/g-ir-scanner-wrapper << EOF
-#!/bin/sh
-# This prevents g-ir-scanner from writing cache data to user's HOME dir
-export GI_SCANNER_DISABLE_CACHE=1
-
-g-ir-scanner --lib-dirs-envvar=GIR_EXTRA_LIBS_PATH --use-binary-wrapper=${STAGING_BINDIR}/g-ir-scanner-qemuwrapper --use-ldd-wrapper=${STAGING_BINDIR}/g-ir-scanner-lddwrapper --add-include-path=${STAGING_DATADIR}/gir-1.0 --add-include-path=${STAGING_LIBDIR}/gir-1.0 "\$@"
-EOF
-        chmod +x ${B}/g-ir-scanner-wrapper
-
-        # Write out a wrapper for g-ir-compiler, which runs the target version of it through qemu.
-        # g-ir-compiler writes out the raw content of a C struct to disk, and therefore is architecture dependent.
-        cat > ${B}/g-ir-compiler-wrapper << EOF
-#!/bin/sh
-${STAGING_BINDIR}/g-ir-scanner-qemuwrapper ${STAGING_BINDIR}/g-ir-compiler "\$@"
-EOF
-        chmod +x ${B}/g-ir-compiler-wrapper
-
-        # Write out a wrapper to use instead of ldd, which does not work when a binary is built
-        # for a different architecture
-        cat > ${B}/g-ir-scanner-lddwrapper << EOF
-#!/bin/sh
-\$OBJDUMP -p "\$@"
-EOF
-        chmod +x ${B}/g-ir-scanner-lddwrapper
-
-        # Also tweak the target python scripts so that they don't refer to the
-        # native version of python binary (the solution is taken from glib-2.0 recipe)
-        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
-}
-
-do_compile:prepend() {
-        # Needed to run g-ir unit tests, which won't be able to find the built libraries otherwise
-        export GIR_EXTRA_LIBS_PATH=$B/.libs
-}
-
-do_install:prepend() {
-        # This prevents g-ir-scanner from writing cache data to $HOME
-        export GI_SCANNER_DISABLE_CACHE=1
-}
-
-# Our wrappers need to be available system-wide, because they will be used
-# to build introspection files for all other gobject-based packages
-do_install:append:class-target() {
-        install -d ${D}${bindir}/
-        install ${B}/g-ir-scanner-qemuwrapper ${D}${bindir}/
-        install ${B}/g-ir-scanner-wrapper ${D}${bindir}/
-        install ${B}/g-ir-compiler-wrapper ${D}${bindir}/
-        install ${B}/g-ir-scanner-lddwrapper ${D}${bindir}/
-}
-
-# we need target versions of introspection tools in sysroot so that they can be run via qemu
-# when building introspection files in other packages
-SYSROOT_DIRS:append:class-target = " ${bindir}"
-
-SYSROOT_PREPROCESS_FUNCS:append:class-target = " gi_binaries_sysroot_preprocess"
-gi_binaries_sysroot_preprocess() {
-        # Tweak the binary names in the introspection pkgconfig file, so that it
-        # picks up our wrappers which do the cross-compile and qemu magic.
-        sed -i \
-           -e "s|g_ir_scanner=.*|g_ir_scanner=${bindir}/g-ir-scanner-wrapper|" \
-           -e "s|g_ir_compiler=.*|g_ir_compiler=${bindir}/g-ir-compiler-wrapper|" \
-           ${SYSROOT_DESTDIR}${libdir}/pkgconfig/gobject-introspection-1.0.pc
-}
-
-SYSROOT_PREPROCESS_FUNCS:append = " gi_ldsoconf_sysroot_preprocess"
-gi_ldsoconf_sysroot_preprocess () {
-	mkdir -p ${SYSROOT_DESTDIR}${bindir}
-	dest=${SYSROOT_DESTDIR}${bindir}/postinst-ldsoconf-${PN}
-	echo "#!/bin/sh" > $dest
-	echo "mkdir -p ${STAGING_DIR_TARGET}${sysconfdir}" >> $dest
-	echo "echo ${base_libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
-	echo "echo ${libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
-	chmod 755 $dest
-}
-
-# Remove wrapper files from the package, only used for cross-compiling
-PACKAGE_PREPROCESS_FUNCS += "gi_package_preprocess"
-gi_package_preprocess() {
-	rm -f ${PKGD}${bindir}/g-ir-scanner-qemuwrapper
-	rm -f ${PKGD}${bindir}/g-ir-scanner-wrapper
-	rm -f ${PKGD}${bindir}/g-ir-compiler-wrapper
-	rm -f ${PKGD}${bindir}/g-ir-scanner-lddwrapper
-}
-
-SSTATE_SCAN_FILES += "g-ir-scanner-qemuwrapper g-ir-scanner-wrapper g-ir-compiler-wrapper g-ir-scanner-lddwrapper Gio-2.0.gir postinst-ldsoconf-${PN}"
-
-# .typelib files are needed at runtime and so they go to the main package
-FILES:${PN}:append = " ${libdir}/girepository-*/*.typelib"
-
-# .gir files go to dev package, as they're needed for developing (but not for running)
-# things that depends on introspection.
-FILES:${PN}-dev:append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
-FILES:${PN}-dev:append = " ${datadir}/gir-*/*.rnc"
-
-# These are used by gobject-based packages
-# to generate transient introspection binaries
-FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/gdump.c \
-                           ${datadir}/gobject-introspection-1.0/Makefile.introspection"
-
-# These are used by dependent packages (e.g. pygobject) to build their
-# testsuites.
-FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/tests/*.c \
-                           ${datadir}/gobject-introspection-1.0/tests/*.h"
-
-FILES:${PN}-dbg += "${libdir}/gobject-introspection/giscanner/.debug/"
-FILES:${PN}-staticdev += "${libdir}/gobject-introspection/giscanner/*.a"
-
-RDEPENDS:${PN} = "python3-pickle python3-xml"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb
new file mode 100644
index 0000000..2c6fb7a
--- /dev/null
+++ b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.78.1.bb
@@ -0,0 +1,193 @@
+SUMMARY = "Middleware layer between GObject-using C libraries and language bindings"
+DESCRIPTION = "GObject Introspection is a project for providing machine \
+readable introspection data of the API of C libraries. This introspection \
+data can be used in several different use cases, for example automatic code \
+generation for bindings, API verification and documentation generation."
+HOMEPAGE = "https://wiki.gnome.org/action/show/Projects/GObjectIntrospection"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/gobject-introspection/issues"
+SECTION = "libs"
+LICENSE = "LGPL-2.0-or-later & GPL-2.0-or-later & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
+                    file://tools/compiler.c;endline=20;md5=fc5007fc20022720e6c0b0cdde41fabd \
+                    file://giscanner/sourcescanner.c;endline=22;md5=194d6e0c1d00662f32d030ce44de8d39 \
+                    file://girepository/giregisteredtypeinfo.c;endline=21;md5=661847611ae6979465415f31a759ba27 \
+                    "
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
+           "
+
+SRC_URI[sha256sum] = "bd7babd99af7258e76819e45ba4a6bc399608fe762d83fde3cac033c50841bb4"
+
+SRC_URI:append:class-native = " file://0001-Relocate-the-repository-directory-for-native-builds.patch"
+
+inherit meson pkgconfig gtk-doc python3targetconfig qemu gobject-introspection-data upstream-version-is-even multilib_script
+
+GTKDOC_MESON_OPTION = "gtk_doc"
+
+MULTILIB_SCRIPTS = "${PN}:${bindir}/g-ir-annotation-tool ${PN}:${bindir}/g-ir-scanner"
+
+DEPENDS += " libffi zlib glib-2.0 python3 flex-native bison-native"
+
+# target build needs qemu to run temporary introspection binaries created
+# on the fly by g-ir-scanner and a native version of itself to run
+# native versions of its own tools during build.
+DEPENDS:append:class-target = " gobject-introspection-native qemu-native"
+
+# needed for writing out the qemu wrapper script
+export STAGING_DIR_HOST
+export B
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[doctool] = "-Ddoctool=enabled,-Ddoctool=disabled,python3-mako,"
+
+# Configure target build to use native tools of itself and to use a qemu wrapper
+# and optionally to generate introspection data
+EXTRA_OEMESON:class-target = " \
+    -Dgi_cross_use_prebuilt_gi=true \
+    -Dgi_cross_binary_wrapper=${B}/g-ir-scanner-qemuwrapper \
+    -Dgi_cross_ldd_wrapper=${B}/g-ir-scanner-lddwrapper \
+    -Dgi_cross_pkgconfig_sysroot_path=${PKG_CONFIG_SYSROOT_DIR} \
+    ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dbuild_introspection_data=true', '-Dbuild_introspection_data=false', d)} \
+    ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
+"
+
+do_configure:prepend:class-native() {
+        # Tweak the native python scripts so that they don't refer to the
+        # full path of native python binary (the solution is taken from glib-2.0 recipe)
+        # This removes the risk of exceeding Linux kernel's shebang line limit (128 bytes)
+        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
+}
+
+do_configure:prepend:class-target() {
+        # Write out a qemu wrapper that will be given to gi-scanner so that it
+        # can run target helper binaries through that.
+        qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['\\$GIR_EXTRA_LIBS_PATH','.libs','$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
+        cat > ${B}/g-ir-scanner-qemuwrapper << EOF
+#!/bin/sh
+# Use a modules directory which doesn't exist so we don't load random things
+# which may then get deleted (or their dependencies) and potentially segfault
+export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
+
+$qemu_binary "\$@"
+if [ \$? -ne 0 ]; then
+    echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the recipe should help."
+    echo "(typically like this: GIR_EXTRA_LIBS_PATH=\"$""{B}/something/.libs\" )"
+    exit 1
+fi
+EOF
+        chmod +x ${B}/g-ir-scanner-qemuwrapper
+
+        # Write out a wrapper for g-ir-scanner itself, which will be used when building introspection files
+        # for glib-based packages. This wrapper calls the native version of the scanner, and tells it to use
+        # a qemu wrapper for running transient target binaries produced by the scanner, and an include directory
+        # from the target sysroot.
+        cat > ${B}/g-ir-scanner-wrapper << EOF
+#!/bin/sh
+# This prevents g-ir-scanner from writing cache data to user's HOME dir
+export GI_SCANNER_DISABLE_CACHE=1
+
+g-ir-scanner --lib-dirs-envvar=GIR_EXTRA_LIBS_PATH --use-binary-wrapper=${STAGING_BINDIR}/g-ir-scanner-qemuwrapper --use-ldd-wrapper=${STAGING_BINDIR}/g-ir-scanner-lddwrapper --add-include-path=${STAGING_DATADIR}/gir-1.0 --add-include-path=${STAGING_LIBDIR}/gir-1.0 "\$@"
+EOF
+        chmod +x ${B}/g-ir-scanner-wrapper
+
+        # Write out a wrapper for g-ir-compiler, which runs the target version of it through qemu.
+        # g-ir-compiler writes out the raw content of a C struct to disk, and therefore is architecture dependent.
+        cat > ${B}/g-ir-compiler-wrapper << EOF
+#!/bin/sh
+${STAGING_BINDIR}/g-ir-scanner-qemuwrapper ${STAGING_BINDIR}/g-ir-compiler "\$@"
+EOF
+        chmod +x ${B}/g-ir-compiler-wrapper
+
+        # Write out a wrapper to use instead of ldd, which does not work when a binary is built
+        # for a different architecture
+        cat > ${B}/g-ir-scanner-lddwrapper << EOF
+#!/bin/sh
+\$OBJDUMP -p "\$@"
+EOF
+        chmod +x ${B}/g-ir-scanner-lddwrapper
+
+        # Also tweak the target python scripts so that they don't refer to the
+        # native version of python binary (the solution is taken from glib-2.0 recipe)
+        sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/tools/g-ir-tool-template.in
+}
+
+do_compile:prepend() {
+        # Needed to run g-ir unit tests, which won't be able to find the built libraries otherwise
+        export GIR_EXTRA_LIBS_PATH=$B/.libs
+}
+
+do_install:prepend() {
+        # This prevents g-ir-scanner from writing cache data to $HOME
+        export GI_SCANNER_DISABLE_CACHE=1
+}
+
+# Our wrappers need to be available system-wide, because they will be used
+# to build introspection files for all other gobject-based packages
+do_install:append:class-target() {
+        install -d ${D}${bindir}/
+        install ${B}/g-ir-scanner-qemuwrapper ${D}${bindir}/
+        install ${B}/g-ir-scanner-wrapper ${D}${bindir}/
+        install ${B}/g-ir-compiler-wrapper ${D}${bindir}/
+        install ${B}/g-ir-scanner-lddwrapper ${D}${bindir}/
+}
+
+# we need target versions of introspection tools in sysroot so that they can be run via qemu
+# when building introspection files in other packages
+SYSROOT_DIRS:append:class-target = " ${bindir}"
+
+SYSROOT_PREPROCESS_FUNCS:append:class-target = " gi_binaries_sysroot_preprocess"
+gi_binaries_sysroot_preprocess() {
+        # Tweak the binary names in the introspection pkgconfig file, so that it
+        # picks up our wrappers which do the cross-compile and qemu magic.
+        sed -i \
+           -e "s|g_ir_scanner=.*|g_ir_scanner=${bindir}/g-ir-scanner-wrapper|" \
+           -e "s|g_ir_compiler=.*|g_ir_compiler=${bindir}/g-ir-compiler-wrapper|" \
+           ${SYSROOT_DESTDIR}${libdir}/pkgconfig/gobject-introspection-1.0.pc
+}
+
+SYSROOT_PREPROCESS_FUNCS:append = " gi_ldsoconf_sysroot_preprocess"
+gi_ldsoconf_sysroot_preprocess () {
+	mkdir -p ${SYSROOT_DESTDIR}${bindir}
+	dest=${SYSROOT_DESTDIR}${bindir}/postinst-ldsoconf-${PN}
+	echo "#!/bin/sh" > $dest
+	echo "mkdir -p ${STAGING_DIR_TARGET}${sysconfdir}" >> $dest
+	echo "echo ${base_libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
+	echo "echo ${libdir} >> ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf" >> $dest
+	chmod 755 $dest
+}
+
+# Remove wrapper files from the package, only used for cross-compiling
+PACKAGE_PREPROCESS_FUNCS += "gi_package_preprocess"
+gi_package_preprocess() {
+	rm -f ${PKGD}${bindir}/g-ir-scanner-qemuwrapper
+	rm -f ${PKGD}${bindir}/g-ir-scanner-wrapper
+	rm -f ${PKGD}${bindir}/g-ir-compiler-wrapper
+	rm -f ${PKGD}${bindir}/g-ir-scanner-lddwrapper
+}
+
+SSTATE_SCAN_FILES += "g-ir-scanner-qemuwrapper g-ir-scanner-wrapper g-ir-compiler-wrapper g-ir-scanner-lddwrapper Gio-2.0.gir postinst-ldsoconf-${PN}"
+
+# .typelib files are needed at runtime and so they go to the main package
+FILES:${PN}:append = " ${libdir}/girepository-*/*.typelib"
+
+# .gir files go to dev package, as they're needed for developing (but not for running)
+# things that depends on introspection.
+FILES:${PN}-dev:append = " ${datadir}/gir-*/*.gir ${libdir}/gir-*/*.gir"
+FILES:${PN}-dev:append = " ${datadir}/gir-*/*.rnc"
+
+# These are used by gobject-based packages
+# to generate transient introspection binaries
+FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/gdump.c \
+                           ${datadir}/gobject-introspection-1.0/Makefile.introspection"
+
+# These are used by dependent packages (e.g. pygobject) to build their
+# testsuites.
+FILES:${PN}-dev:append = " ${datadir}/gobject-introspection-1.0/tests/*.c \
+                           ${datadir}/gobject-introspection-1.0/tests/*.h"
+
+FILES:${PN}-dbg += "${libdir}/gobject-introspection/giscanner/.debug/"
+FILES:${PN}-staticdev += "${libdir}/gobject-introspection/giscanner/*.a"
+
+RDEPENDS:${PN} = "python3-pickle python3-xml"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-gnome/libadwaita/libadwaita_1.3.4.bb b/poky/meta/recipes-gnome/libadwaita/libadwaita_1.3.4.bb
deleted file mode 100644
index 2abc8d9..0000000
--- a/poky/meta/recipes-gnome/libadwaita/libadwaita_1.3.4.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Building blocks for modern GNOME applications"
-HOMEPAGE = "https://gitlab.gnome.org/GNOME/libadwaita"
-LICENSE="LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
-    gtk4 \
-"
-
-inherit gnomebase gobject-introspection gi-docgen vala features_check
-
-SRC_URI[archive.sha256sum] = "801ccaf3a760213b59ebb9b8185327df225049544aee68a1340b165710acb1bd"
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-GIR_MESON_ENABLE_FLAG = 'enabled'
-GIR_MESON_DISABLE_FLAG = 'disabled'
-GTKDOC_MESON_OPTION = 'gtk_doc'
-
-PACKAGECONFIG[examples] = "-Dexamples=true,-Dexamples=false"
-
-FILES:${PN} += "${datadir}/metainfo"
diff --git a/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb b/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb
new file mode 100644
index 0000000..d8aa2cd
--- /dev/null
+++ b/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Building blocks for modern GNOME applications"
+HOMEPAGE = "https://gitlab.gnome.org/GNOME/libadwaita"
+LICENSE="LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+DEPENDS = " \
+    gtk4 \
+    appstream \
+"
+
+inherit gnomebase gobject-introspection gi-docgen vala features_check
+
+SRC_URI[archive.sha256sum] = "e51a098a54d43568218fc48fcf52e80e36f469b3ce912d8ce9c308a37e9f47c2"
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+GTKDOC_MESON_OPTION = 'gtk_doc'
+
+PACKAGECONFIG[examples] = "-Dexamples=true,-Dexamples=false"
+
+FILES:${PN} += "${datadir}/metainfo"
+
+EXTRA_OEMESON += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)}"
diff --git a/poky/meta/recipes-gnome/libportal/libportal_0.6.bb b/poky/meta/recipes-gnome/libportal/libportal_0.6.bb
deleted file mode 100644
index bf38fc8..0000000
--- a/poky/meta/recipes-gnome/libportal/libportal_0.6.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "libportal provides GIO-style async APIs for most Flatpak portals."
-DESCRIPTION = "It provides simple asynchronous wrappers for most Flatpak portals \
-with a familiar GObject API along side the D-Bus API"
-HOMEPAGE = "https://github.com/flatpak/libportal"
-BUGTRACKER = "https://github.com/flatpak/libportal/issues"
-LICENSE = "LGPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3000208d539ec061b899bce1d9ce9404"
-
-SRC_URI = "git://github.com/flatpak/${BPN}.git;protocol=https;branch=main"
-SRCREV = "13df0b887a7eb7b0f9b14069561a41f62e813155"
-S = "${WORKDIR}/git"
-
-inherit meson gi-docgen gobject-introspection vala features_check pkgconfig
-GIDOCGEN_MESON_OPTION = 'docs'
-
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-DEPENDS += "glib-2.0 glib-2.0-native gtk+3 ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gtk4', '', d)}"
-
-EXTRA_OEMESON = "-Dbackends=gtk3${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ',gtk4', '', d)}"
diff --git a/poky/meta/recipes-gnome/libportal/libportal_0.7.1.bb b/poky/meta/recipes-gnome/libportal/libportal_0.7.1.bb
new file mode 100644
index 0000000..22e4555
--- /dev/null
+++ b/poky/meta/recipes-gnome/libportal/libportal_0.7.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "libportal provides GIO-style async APIs for most Flatpak portals."
+DESCRIPTION = "It provides simple asynchronous wrappers for most Flatpak portals \
+with a familiar GObject API along side the D-Bus API"
+HOMEPAGE = "https://github.com/flatpak/libportal"
+BUGTRACKER = "https://github.com/flatpak/libportal/issues"
+LICENSE = "LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3000208d539ec061b899bce1d9ce9404"
+
+SRC_URI = "git://github.com/flatpak/${BPN}.git;protocol=https;branch=main"
+SRCREV = "e9ed3a50cdde321eaf42361212480a66eb94a57a"
+S = "${WORKDIR}/git"
+
+inherit meson gi-docgen gobject-introspection vala features_check pkgconfig
+GIDOCGEN_MESON_OPTION = 'docs'
+
+ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
+
+DEPENDS += "glib-2.0 glib-2.0-native gtk+3 ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gtk4', '', d)}"
+
+EXTRA_OEMESON = "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)} -Dbackend-qt5=disabled"
diff --git a/poky/meta/recipes-gnome/libsecret/libsecret_0.21.0.bb b/poky/meta/recipes-gnome/libsecret/libsecret_0.21.0.bb
deleted file mode 100644
index 8f560f9..0000000
--- a/poky/meta/recipes-gnome/libsecret/libsecret_0.21.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "libsecret is a library for storing and retrieving passwords and other secrets"
-DESCRIPTION = "A GObject-based library for accessing the Secret Service API of \
-the freedesktop.org project, a cross-desktop effort to access passwords, \
-tokens and other types of secrets. libsecret provides a convenient wrapper \
-for these methods so consumers do not have to call the low-level DBus methods."
-LICENSE = "LGPL-2.1-only"
-HOMEPAGE = "https://github.com/GNOME/libsecret"
-BUGTRACKER = "https://gitlab.gnome.org/GNOME/libsecret/issues"
-LIC_FILES_CHKSUM = "file://COPYING;md5=23c2a5e0106b99d75238986559bb5fc6"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit gnomebase gi-docgen vala gobject-introspection manpages
-
-DEPENDS += "glib-2.0 libgcrypt gettext-native"
-
-SRC_URI[archive.sha256sum] = "2735b29d1cc0e5b12ba90bee88bd21774ac8db4ae1a4b716f46c409c19a14613"
-
-GTKDOC_MESON_OPTION = 'gtk_doc'
-
-PACKAGECONFIG[manpages] = "-Dmanpage=true,-Dmanpage=false,libxslt-native xmlto-native"
-
-# http://errors.yoctoproject.org/Errors/Details/20228/
-ARM_INSTRUCTION_SET:armv4 = "arm"
-ARM_INSTRUCTION_SET:armv5 = "arm"
-ARM_INSTRUCTION_SET:armv6 = "arm"
diff --git a/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb b/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb
new file mode 100644
index 0000000..6310247
--- /dev/null
+++ b/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb
@@ -0,0 +1,26 @@
+SUMMARY = "libsecret is a library for storing and retrieving passwords and other secrets"
+DESCRIPTION = "A GObject-based library for accessing the Secret Service API of \
+the freedesktop.org project, a cross-desktop effort to access passwords, \
+tokens and other types of secrets. libsecret provides a convenient wrapper \
+for these methods so consumers do not have to call the low-level DBus methods."
+LICENSE = "LGPL-2.1-only"
+HOMEPAGE = "https://github.com/GNOME/libsecret"
+BUGTRACKER = "https://gitlab.gnome.org/GNOME/libsecret/issues"
+LIC_FILES_CHKSUM = "file://COPYING;md5=23c2a5e0106b99d75238986559bb5fc6"
+
+GNOMEBASEBUILDCLASS = "meson"
+
+inherit gnomebase gi-docgen vala gobject-introspection manpages
+
+DEPENDS += "glib-2.0 libgcrypt gettext-native"
+
+SRC_URI[archive.sha256sum] = "674f51323a5f74e4cb7e3277da68b5afddd333eca25bc9fd2d820a92972f90b1"
+
+GTKDOC_MESON_OPTION = 'gtk_doc'
+
+PACKAGECONFIG[manpages] = "-Dmanpage=true,-Dmanpage=false,libxslt-native xmlto-native"
+
+# http://errors.yoctoproject.org/Errors/Details/20228/
+ARM_INSTRUCTION_SET:armv4 = "arm"
+ARM_INSTRUCTION_SET:armv5 = "arm"
+ARM_INSTRUCTION_SET:armv6 = "arm"
diff --git a/poky/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch b/poky/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch
new file mode 100644
index 0000000..da8ce68
--- /dev/null
+++ b/poky/meta/recipes-gnome/libxmlb/libxmlb/0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch
@@ -0,0 +1,35 @@
+From dc208bafc57c1ccaa0ca260f99c8b4c976271ebc Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sat, 16 Sep 2023 14:02:57 +0200
+Subject: [PATCH] xb-self-test.c: hardcode G_TEST_SRCDIR
+
+This avoids:
+ libxmlb-0.3.14-r0 do_package_qa: QA Issue: File
+ /usr/libexec/installed-tests/libxmlb/xb-self-test in package libxmlb-ptest
+ contains reference to TMPDIR [buildpaths]
+
+and also fixes the runtime for the ptest.
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+---
+ src/xb-self-test.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xb-self-test.c b/src/xb-self-test.c
+index 47d9728..8b3dd0e 100644
+--- a/src/xb-self-test.c
++++ b/src/xb-self-test.c
+@@ -2870,7 +2870,7 @@ xb_speed_func(void)
+ int
+ main(int argc, char **argv)
+ {
+-	g_setenv("G_TEST_SRCDIR", SRCDIR, FALSE);
++	g_setenv("G_TEST_SRCDIR", "/usr/libexec/installed-tests/libxmlb", FALSE);
+ 
+ 	g_test_init(&argc, &argv, NULL);
+ 
+-- 
+2.41.0
+
diff --git a/meta-openembedded/meta-oe/recipes-gnome/libxmlb/libxmlb/run-ptest b/poky/meta/recipes-gnome/libxmlb/libxmlb/run-ptest
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-gnome/libxmlb/libxmlb/run-ptest
rename to poky/meta/recipes-gnome/libxmlb/libxmlb/run-ptest
diff --git a/poky/meta/recipes-gnome/libxmlb/libxmlb_0.3.14.bb b/poky/meta/recipes-gnome/libxmlb/libxmlb_0.3.14.bb
new file mode 100644
index 0000000..1d3b0de
--- /dev/null
+++ b/poky/meta/recipes-gnome/libxmlb/libxmlb_0.3.14.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A library to help create and query binary XML blobs"
+HOMEPAGE = "https://github.com/hughsie/libxmlb"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1803fa9c2c3ce8cb06b4861d75310742"
+
+SRC_URI = " \
+	git://github.com/hughsie/libxmlb.git;branch=main;protocol=https \
+	file://0001-xb-selftest.c-hardcode-G_TEST_SRCDIR.patch \
+	file://run-ptest \
+"
+SRCREV = "aa577b276adc66564f5777f9a522ca3bf0bfa65e"
+S = "${WORKDIR}/git"
+
+DEPENDS = "glib-2.0 xz zstd"
+
+inherit gobject-introspection gtk-doc meson ptest-gnome lib_package pkgconfig
+
+PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)}"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+
+GTKDOC_MESON_OPTION = "gtkdoc"
+
+FILES:${PN} += "${datadir}"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-graphics/builder/builder_0.1.bb b/poky/meta/recipes-graphics/builder/builder_0.1.bb
index 1700015..52c9351 100644
--- a/poky/meta/recipes-graphics/builder/builder_0.1.bb
+++ b/poky/meta/recipes-graphics/builder/builder_0.1.bb
@@ -1,7 +1,6 @@
 SUMMARY = "New user to do specific job"
 DESCRIPTION = "This recipe create a new user named ${PN}, who is used for specific jobs like building. The task can be auto started via mini X"
 SECTION = "x11"
-PR = "r6"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://builder_session.sh;endline=5;md5=84796c3c41785d86100fdabcbdade00e"
 
diff --git a/poky/meta/recipes-graphics/freetype/freetype_2.13.1.bb b/poky/meta/recipes-graphics/freetype/freetype_2.13.1.bb
deleted file mode 100644
index 5b1c520..0000000
--- a/poky/meta/recipes-graphics/freetype/freetype_2.13.1.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-SUMMARY = "Freetype font rendering library"
-DESCRIPTION = "FreeType is a software font engine that is designed to be small, efficient, \
-highly customizable, and portable while capable of producing high-quality output (glyph \
-images). It can be used in graphics libraries, display servers, font conversion tools, text \
-image generation tools, and many other products as well."
-HOMEPAGE = "http://www.freetype.org/"
-BUGTRACKER = "https://savannah.nongnu.org/bugs/?group=freetype"
-SECTION = "libs"
-
-LICENSE = "(FTL | GPL-2.0-or-later) & MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=843b6efc16f6b1652ec97f89d5a516c0 \
-                    file://docs/FTL.TXT;md5=9f37b4e6afa3fef9dba8932b16bd3f97 \
-                    file://docs/GPLv2.TXT;md5=8ef380476f642c20ebf40fecb0add2ec \
-                    "
-
-SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "ea67e3b019b1104d1667aa274f5dc307d8cbd606b399bc32df308a77f1a564bf"
-
-UPSTREAM_CHECK_REGEX = "freetype-(?P<pver>\d+(\.\d+)+)"
-
-inherit autotools pkgconfig multilib_header
-
-# Adapt autotools to work with the minimal autoconf usage in freetype
-AUTOTOOLS_SCRIPT_PATH = "${S}/builds/unix"
-CONFIGURE_SCRIPT = "${S}/configure"
-EXTRA_AUTORECONF += "--exclude=autoheader --exclude=automake"
-
-PACKAGECONFIG ??= "zlib pixmap"
-
-PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
-# harfbuzz results in a circular dependency so enabling is non-trivial
-PACKAGECONFIG[harfbuzz] = "--with-harfbuzz,--without-harfbuzz,harfbuzz"
-PACKAGECONFIG[pixmap] = "--with-png,--without-png,libpng"
-PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
-PACKAGECONFIG[freetypeconfig] = "--enable-freetype-config=yes,--enable-freetype-config=no,"
-
-EXTRA_OECONF = "CC_BUILD='${BUILD_CC}'"
-
-TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
-
-do_install:append() {
-	oe_multilib_header freetype2/freetype/config/ftconfig.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/freetype/freetype_2.13.2.bb b/poky/meta/recipes-graphics/freetype/freetype_2.13.2.bb
new file mode 100644
index 0000000..4e7a0ad
--- /dev/null
+++ b/poky/meta/recipes-graphics/freetype/freetype_2.13.2.bb
@@ -0,0 +1,45 @@
+SUMMARY = "Freetype font rendering library"
+DESCRIPTION = "FreeType is a software font engine that is designed to be small, efficient, \
+highly customizable, and portable while capable of producing high-quality output (glyph \
+images). It can be used in graphics libraries, display servers, font conversion tools, text \
+image generation tools, and many other products as well."
+HOMEPAGE = "http://www.freetype.org/"
+BUGTRACKER = "https://savannah.nongnu.org/bugs/?group=freetype"
+SECTION = "libs"
+
+LICENSE = "(FTL | GPL-2.0-or-later) & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=843b6efc16f6b1652ec97f89d5a516c0 \
+                    file://docs/FTL.TXT;md5=9f37b4e6afa3fef9dba8932b16bd3f97 \
+                    file://docs/GPLv2.TXT;md5=8ef380476f642c20ebf40fecb0add2ec \
+                    "
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "12991c4e55c506dd7f9b765933e62fd2be2e06d421505d7950a132e4f1bb484d"
+
+UPSTREAM_CHECK_REGEX = "freetype-(?P<pver>\d+(\.\d+)+)"
+
+inherit autotools pkgconfig multilib_header
+
+# Adapt autotools to work with the minimal autoconf usage in freetype
+AUTOTOOLS_SCRIPT_PATH = "${S}/builds/unix"
+CONFIGURE_SCRIPT = "${S}/configure"
+EXTRA_AUTORECONF += "--exclude=autoheader --exclude=automake"
+
+PACKAGECONFIG ??= "zlib pixmap"
+
+PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
+# harfbuzz results in a circular dependency so enabling is non-trivial
+PACKAGECONFIG[harfbuzz] = "--with-harfbuzz,--without-harfbuzz,harfbuzz"
+PACKAGECONFIG[pixmap] = "--with-png,--without-png,libpng"
+PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
+PACKAGECONFIG[freetypeconfig] = "--enable-freetype-config=yes,--enable-freetype-config=no,"
+
+EXTRA_OECONF = "CC_BUILD='${BUILD_CC}'"
+
+TARGET_CPPFLAGS += "-D_FILE_OFFSET_BITS=64"
+
+do_install:append() {
+	oe_multilib_header freetype2/freetype/config/ftconfig.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/glslang/glslang_1.3.250.0.bb b/poky/meta/recipes-graphics/glslang/glslang_1.3.250.0.bb
deleted file mode 100644
index 6e9c666..0000000
--- a/poky/meta/recipes-graphics/glslang/glslang_1.3.250.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "OpenGL / OpenGL ES Reference Compiler"
-DESCRIPTION = "Glslang is the official reference compiler front end for the \
-OpenGL ES and OpenGL shading languages. It implements a strict interpretation \
-of the specifications for these languages. It is open and free for anyone to use, \
-either from a command line or programmatically."
-SECTION = "graphics"
-HOMEPAGE = "https://www.khronos.org/opengles/sdk/tools/Reference-Compiler"
-LICENSE = "BSD-3-Clause & BSD-2-Clause & MIT & Apache-2.0 & GPL-3-with-bison-exception"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2a2b5acd7bc4844964cfda45fe807dc3"
-
-SRCREV = "d1517d64cfca91f573af1bf7341dc3a5113349c0"
-SRC_URI = "git://github.com/KhronosGroup/glslang.git;protocol=https;branch=main \
-           file://0001-generate-glslang-pkg-config.patch \
-           "
-PE = "1"
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
-S = "${WORKDIR}/git"
-
-inherit cmake python3native
-
-EXTRA_OECMAKE = " \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DBUILD_SHARED_LIBS=ON \
-    -DENABLE_PCH=OFF \
-    -DENABLE_CTEST=OFF \
-    -DBUILD_EXTERNAL=OFF \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb b/poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb
new file mode 100644
index 0000000..e607045
--- /dev/null
+++ b/poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "OpenGL / OpenGL ES Reference Compiler"
+DESCRIPTION = "Glslang is the official reference compiler front end for the \
+OpenGL ES and OpenGL shading languages. It implements a strict interpretation \
+of the specifications for these languages. It is open and free for anyone to use, \
+either from a command line or programmatically."
+SECTION = "graphics"
+HOMEPAGE = "https://www.khronos.org/opengles/sdk/tools/Reference-Compiler"
+LICENSE = "BSD-3-Clause & BSD-2-Clause & MIT & Apache-2.0 & GPL-3-with-bison-exception"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2a2b5acd7bc4844964cfda45fe807dc3"
+
+SRCREV = "76b52ebf77833908dc4c0dd6c70a9c357ac720bd"
+SRC_URI = "git://github.com/KhronosGroup/glslang.git;protocol=https;branch=main \
+           file://0001-generate-glslang-pkg-config.patch \
+           "
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake python3native
+
+EXTRA_OECMAKE = " \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DBUILD_SHARED_LIBS=ON \
+    -DENABLE_PCH=OFF \
+    -DENABLE_CTEST=OFF \
+    -DBUILD_EXTERNAL=OFF \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.1.1.bb b/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.1.1.bb
deleted file mode 100644
index 9422db2..0000000
--- a/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.1.1.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-SUMMARY = "Text shaping library"
-DESCRIPTION = "HarfBuzz is an OpenType text shaping engine."
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/HarfBuzz"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=HarfBuzz"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b98429b8e8e3c2a67cfef01e99e4893d \
-                    file://src/hb-ucd.cc;beginline=1;endline=15;md5=29d4dcb6410429195df67efe3382d8bc \
-                    "
-
-SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "0305ad702e11906a5fc0c1ba11c270b7f64a8f5390d676aacfd71db129d6565f"
-
-DEPENDS += "glib-2.0-native"
-
-inherit meson pkgconfig lib_package gtk-doc gobject-introspection github-releases
-
-GIR_MESON_ENABLE_FLAG = 'enabled'
-GIR_MESON_DISABLE_FLAG = 'disabled'
-GTKDOC_MESON_ENABLE_FLAG = 'enabled'
-GTKDOC_MESON_DISABLE_FLAG = 'disabled'
-
-PACKAGECONFIG ??= "cairo freetype glib icu"
-PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
-PACKAGECONFIG[chafa] = "-Dchafa=enabled,-Dchafa=disabled,chafa"
-PACKAGECONFIG[freetype] = "-Dfreetype=enabled,-Dfreetype=disabled,freetype"
-PACKAGECONFIG[glib] = "-Dglib=enabled,-Dglib=disabled,glib-2.0"
-PACKAGECONFIG[graphite] = "-Dgraphite2=enabled,-Dgraphite2=disabled,graphite2"
-PACKAGECONFIG[icu] = "-Dicu=enabled,-Dicu=disabled,icu"
-
-PACKAGES =+ "${PN}-icu ${PN}-icu-dev ${PN}-subset"
-
-LEAD_SONAME = "libharfbuzz.so"
-
-do_install:append() {
-    # If no tools are installed due to PACKAGECONFIG then this directory might
-    # still be installed, so remove it to stop packaging warnings.
-    [ ! -d ${D}${bindir} ] || rmdir --ignore-fail-on-non-empty ${D}${bindir}
-}
-
-FILES:${PN}-icu = "${libdir}/libharfbuzz-icu.so.*"
-FILES:${PN}-icu-dev = "${libdir}/libharfbuzz-icu.la \
-                       ${libdir}/libharfbuzz-icu.so \
-                       ${libdir}/pkgconfig/harfbuzz-icu.pc \
-"
-FILES:${PN}-subset = "${libdir}/libharfbuzz-subset.so.*"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb b/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb
new file mode 100644
index 0000000..df41af2
--- /dev/null
+++ b/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Text shaping library"
+DESCRIPTION = "HarfBuzz is an OpenType text shaping engine."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/HarfBuzz"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=HarfBuzz"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b98429b8e8e3c2a67cfef01e99e4893d \
+                    file://src/hb-ucd.cc;beginline=1;endline=15;md5=29d4dcb6410429195df67efe3382d8bc \
+                    "
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "0fec78f98c9c8faf228957a201c8846f809452c20f8445eb092a1ba6f22dbea5"
+
+DEPENDS += "glib-2.0-native"
+
+inherit meson pkgconfig lib_package gtk-doc gobject-introspection github-releases
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+GTKDOC_MESON_ENABLE_FLAG = 'enabled'
+GTKDOC_MESON_DISABLE_FLAG = 'disabled'
+
+PACKAGECONFIG ??= "cairo freetype glib icu"
+PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo"
+PACKAGECONFIG[chafa] = "-Dchafa=enabled,-Dchafa=disabled,chafa"
+PACKAGECONFIG[freetype] = "-Dfreetype=enabled,-Dfreetype=disabled,freetype"
+PACKAGECONFIG[glib] = "-Dglib=enabled,-Dglib=disabled,glib-2.0"
+PACKAGECONFIG[graphite] = "-Dgraphite2=enabled,-Dgraphite2=disabled,graphite2"
+PACKAGECONFIG[icu] = "-Dicu=enabled,-Dicu=disabled,icu"
+
+PACKAGES =+ "${PN}-icu ${PN}-icu-dev ${PN}-subset"
+
+LEAD_SONAME = "libharfbuzz.so"
+
+do_install:append() {
+    # If no tools are installed due to PACKAGECONFIG then this directory might
+    # still be installed, so remove it to stop packaging warnings.
+    [ ! -d ${D}${bindir} ] || rmdir --ignore-fail-on-non-empty ${D}${bindir}
+}
+
+FILES:${PN}-icu = "${libdir}/libharfbuzz-icu.so.*"
+FILES:${PN}-icu-dev = "${libdir}/libharfbuzz-icu.la \
+                       ${libdir}/libharfbuzz-icu.so \
+                       ${libdir}/pkgconfig/harfbuzz-icu.pc \
+"
+FILES:${PN}-subset = "${libdir}/libharfbuzz-subset.so.*"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools/0001-Support-procps-4.x.patch b/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools/0001-Support-procps-4.x.patch
deleted file mode 100644
index fe9663b..0000000
--- a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools/0001-Support-procps-4.x.patch
+++ /dev/null
@@ -1,502 +0,0 @@
-From 524e58f3b2f9e4702293af66f6768755b300e8d3 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Thu, 2 Mar 2023 13:59:13 +0100
-Subject: [PATCH] Support procps 4.x
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/issues/116#note_1785522]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- lib/igt_aux.c   | 238 ++++++++++++++++++++++++++++++++++++++++--------
- lib/meson.build |   7 +-
- meson.build     |  10 +-
- 3 files changed, 215 insertions(+), 40 deletions(-)
-
-diff --git a/lib/igt_aux.c b/lib/igt_aux.c
-index 15e30440..d23c9a40 100644
---- a/lib/igt_aux.c
-+++ b/lib/igt_aux.c
-@@ -52,8 +52,16 @@
- #include <assert.h>
- #include <grp.h>
- 
-+#ifdef HAVE_LIBPROCPS
- #include <proc/readproc.h>
-+#endif
-+#ifdef HAVE_LIBPROC2
-+#include <libproc2/pids.h>
-+#endif
-+
- #include <libudev.h>
-+#include <linux/limits.h>
-+#include <dirent.h>
- 
- #include "drmtest.h"
- #include "i915_drm.h"
-@@ -1217,6 +1225,7 @@ void igt_unlock_mem(void)
-  */
- int igt_is_process_running(const char *comm)
- {
-+#if HAVE_LIBPROCPS
- 	PROCTAB *proc;
- 	proc_t *proc_info;
- 	bool found = false;
-@@ -1235,6 +1244,26 @@ int igt_is_process_running(const char *comm)
- 
- 	closeproc(proc);
- 	return found;
-+#endif
-+#ifdef HAVE_LIBPROC2
-+	enum pids_item Item[] = { PIDS_CMD };
-+	struct pids_info *info = NULL;
-+	struct pids_stack *stack;
-+	char *pid_comm;
-+	bool found = false;
-+
-+	if (procps_pids_new(&info, Item, 1) < 0)
-+	    return false;
-+	while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+	    pid_comm = PIDS_VAL(0, str, stack, info);
-+	    if (!strncasecmp(pid_comm, comm, strlen(pid_comm))) {
-+		found = true;
-+		break;
-+	    }
-+	}
-+	procps_pids_unref(&info);
-+	return found;
-+#endif
- }
- 
- /**
-@@ -1251,6 +1280,7 @@ int igt_is_process_running(const char *comm)
-  */
- int igt_terminate_process(int sig, const char *comm)
- {
-+#ifdef HAVE_LIBPROCPS
- 	PROCTAB *proc;
- 	proc_t *proc_info;
- 	int err = 0;
-@@ -1272,6 +1302,29 @@ int igt_terminate_process(int sig, const char *comm)
- 
- 	closeproc(proc);
- 	return err;
-+#endif
-+#ifdef HAVE_LIBPROC2
-+	enum pids_item Items[] = { PIDS_ID_PID, PIDS_CMD };
-+	struct pids_info *info = NULL;
-+	struct pids_stack *stack;
-+	char *pid_comm;
-+	int pid;
-+	int err = 0;
-+
-+	if (procps_pids_new(&info, Items, 2) < 0)
-+		return -errno;
-+	while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+		pid = PIDS_VAL(0, s_int, stack, info);
-+		pid_comm = PIDS_VAL(1, str, stack, info);
-+		if (!strncasecmp(pid_comm, comm, strlen(pid_comm))) {
-+			if (kill(pid, sig) < 0)
-+				err = -errno;
-+			break;
-+		}
-+	}
-+	procps_pids_unref(&info);
-+	return err;
-+#endif
- }
- 
- struct pinfo {
-@@ -1341,9 +1394,9 @@ igt_show_stat_header(void)
- }
- 
- static void
--igt_show_stat(proc_t *info, int *state, const char *fn)
-+igt_show_stat(const pid_t tid, const char *cmd, int *state, const char *fn)
- {
--	struct pinfo p = { .pid = info->tid, .comm = info->cmd, .fn = fn };
-+	struct pinfo p = { .pid = tid, .comm = cmd, .fn = fn };
- 
- 	if (!*state)
- 		igt_show_stat_header();
-@@ -1353,7 +1406,7 @@ igt_show_stat(proc_t *info, int *state, const char *fn)
- }
- 
- static void
--__igt_lsof_fds(proc_t *proc_info, int *state, char *proc_path, const char *dir)
-+__igt_lsof_fds(const pid_t tid, const char *cmd, int *state, char *proc_path, const char *dir)
- {
- 	struct dirent *d;
- 	struct stat st;
-@@ -1400,7 +1453,7 @@ again:
- 		dirn = dirname(copy_fd_lnk);
- 
- 		if (!strncmp(dir, dirn, strlen(dir)))
--			igt_show_stat(proc_info, state, fd_lnk);
-+			igt_show_stat(tid, cmd, state, fd_lnk);
- 
- 		free(copy_fd_lnk);
- 		free(fd_lnk);
-@@ -1416,13 +1469,14 @@ again:
- static void
- __igt_lsof(const char *dir)
- {
--	PROCTAB *proc;
--	proc_t *proc_info;
--
- 	char path[30];
- 	char *name_lnk;
- 	struct stat st;
- 	int state = 0;
-+#ifdef HAVE_LIBPROCPS
-+	PROCTAB *proc;
-+	proc_t *proc_info;
-+
- 
- 	proc = openproc(PROC_FILLCOM | PROC_FILLSTAT | PROC_FILLARG);
- 	igt_assert(proc != NULL);
-@@ -1456,6 +1510,44 @@ __igt_lsof(const char *dir)
- 	}
- 
- 	closeproc(proc);
-+#endif
-+#ifdef HAVE_LIBPROC2
-+	enum pids_item Items[] = { PIDS_ID_PID, PIDS_CMD };
-+	struct pids_info *info = NULL;
-+	struct pids_stack *stack;
-+
-+	if (procps_pids_new(&info, Items, 2) < 0)
-+		return;
-+	while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+		ssize_t read;
-+		int tid = PIDS_VAL(0, s_int, stack, info);
-+		char *pid_comm = PIDS_VAL(1, str, stack, info);
-+
-+		/* check current working directory */
-+		memset(path, 0, sizeof(path));
-+		snprintf(path, sizeof(path), "/proc/%d/cwd", tid);
-+
-+		if (stat(path, &st) == -1)
-+			continue;
-+
-+		name_lnk = malloc(st.st_size + 1);
-+
-+		igt_assert((read = readlink(path, name_lnk, st.st_size + 1)));
-+		name_lnk[read] = '\0';
-+
-+		if (!strncmp(dir, name_lnk, strlen(dir)))
-+			igt_show_stat(tid, pid_comm, &state, name_lnk);
-+
-+		/* check also fd, seems that lsof(8) doesn't look here */
-+		memset(path, 0, sizeof(path));
-+		snprintf(path, sizeof(path), "/proc/%d/fd", tid);
-+
-+		__igt_lsof_fds(tid, pid_comm, &state, path, dir);
-+
-+		free(name_lnk);
-+	}
-+	procps_pids_unref(&info);
-+#endif
- }
- 
- /**
-@@ -1490,7 +1582,7 @@ igt_lsof(const char *dpath)
- 	free(sanitized);
- }
- 
--static void pulseaudio_unload_module(proc_t *proc_info)
-+static void pulseaudio_unload_module(const uid_t euid, const gid_t egid)
- {
- 	struct igt_helper_process pa_proc = {};
- 	char xdg_dir[PATH_MAX];
-@@ -1498,14 +1590,14 @@ static void pulseaudio_unload_module(proc_t *proc_info)
- 	struct passwd *pw;
- 
- 	igt_fork_helper(&pa_proc) {
--		pw = getpwuid(proc_info->euid);
-+		pw = getpwuid(euid);
- 		homedir = pw->pw_dir;
--		snprintf(xdg_dir, sizeof(xdg_dir), "/run/user/%d", proc_info->euid);
-+		snprintf(xdg_dir, sizeof(xdg_dir), "/run/user/%d", euid);
- 
- 		igt_info("Request pulseaudio to stop using audio device\n");
- 
--		setgid(proc_info->egid);
--		setuid(proc_info->euid);
-+		setgid(egid);
-+		setuid(euid);
- 		clearenv();
- 		setenv("HOME", homedir, 1);
- 		setenv("XDG_RUNTIME_DIR",xdg_dir, 1);
-@@ -1524,10 +1616,12 @@ static void pipewire_reserve_wait(void)
- 	char xdg_dir[PATH_MAX];
- 	const char *homedir;
- 	struct passwd *pw;
--	proc_t *proc_info;
--	PROCTAB *proc;
-+	int tid=0, euid, egid;
- 
-+#ifdef HAVE_LIBPROCPS
- 	igt_fork_helper(&pw_reserve_proc) {
-+		proc_t *proc_info;
-+		PROCTAB *proc;
- 		igt_info("Preventing pipewire-pulse to use the audio drivers\n");
- 
- 		proc = openproc(PROC_FILLCOM | PROC_FILLSTAT | PROC_FILLARG);
-@@ -1539,21 +1633,44 @@ static void pipewire_reserve_wait(void)
- 			freeproc(proc_info);
- 		}
- 		closeproc(proc);
-+		tid = proc_info->tid;
-+		euid = proc_info->euid;
-+		egid = proc_info->egid;
-+		freeproc(proc_info);
-+#endif
-+#ifdef HAVE_LIBPROC2
-+	igt_fork(child, 1) {
-+		enum pids_item Items[] = { PIDS_ID_PID, PIDS_ID_EUID, PIDS_ID_EGID };
-+		enum rel_items { EU_PID, EU_EUID, EU_EGID };
-+		struct pids_info *info = NULL;
-+		struct pids_stack *stack;
-+
-+		igt_info("Preventing pipewire-pulse to use the audio drivers\n");
-+
-+		if (procps_pids_new(&info, Items, 3) < 0)
-+		    return;
-+		while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+			tid = PIDS_VAL(EU_PID, s_int, stack, info);
-+			if (pipewire_pulse_pid == tid)
-+				break;
-+		}
-+		euid = PIDS_VAL(EU_EUID, s_int, stack, info);
-+		egid = PIDS_VAL(EU_EGID, s_int, stack, info);
-+		procps_pids_unref(&info);
-+#endif
- 
- 		/* Sanity check: if it can't find the process, it means it has gone */
--		if (pipewire_pulse_pid != proc_info->tid)
-+		if (pipewire_pulse_pid != tid)
- 			exit(0);
- 
--		pw = getpwuid(proc_info->euid);
-+		pw = getpwuid(euid);
- 		homedir = pw->pw_dir;
--		snprintf(xdg_dir, sizeof(xdg_dir), "/run/user/%d", proc_info->euid);
--		setgid(proc_info->egid);
--		setuid(proc_info->euid);
-+		snprintf(xdg_dir, sizeof(xdg_dir), "/run/user/%d", euid);
-+		setgid(egid);
-+		setuid(euid);
- 		clearenv();
- 		setenv("HOME", homedir, 1);
- 		setenv("XDG_RUNTIME_DIR",xdg_dir, 1);
--		freeproc(proc_info);
--
- 		/*
- 		 * pw-reserve will run in background. It will only exit when
- 		 * igt_kill_children() is called later on. So, it shouldn't
-@@ -1570,9 +1687,7 @@ static void pipewire_reserve_wait(void)
- int pipewire_pulse_start_reserve(void)
- {
- 	bool is_pw_reserve_running = false;
--	proc_t *proc_info;
- 	int attempts = 0;
--	PROCTAB *proc;
- 
- 	if (!pipewire_pulse_pid)
- 		return 0;
-@@ -1584,6 +1699,10 @@ int pipewire_pulse_start_reserve(void)
- 	 * pipewire version 0.3.50 or upper.
- 	 */
- 	for (attempts = 0; attempts < PIPEWIRE_RESERVE_MAX_TIME; attempts++) {
-+#ifdef HAVE_LIBPROCPS
-+		proc_t *proc_info;
-+		PROCTAB *proc;
-+
- 		usleep(1000);
- 		proc = openproc(PROC_FILLCOM | PROC_FILLSTAT | PROC_FILLARG);
- 		igt_assert(proc != NULL);
-@@ -1598,6 +1717,25 @@ int pipewire_pulse_start_reserve(void)
- 			freeproc(proc_info);
- 		}
- 		closeproc(proc);
-+#endif
-+#ifdef HAVE_LIBPROC2
-+		enum pids_item Items[] = { PIDS_ID_PID, PIDS_CMD };
-+		struct pids_info *info = NULL;
-+		struct pids_stack *stack;
-+
-+		usleep(1000);
-+
-+		if (procps_pids_new(&info, Items, 2) < 0)
-+			return 1;
-+		while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+			if (!strcmp(PIDS_VAL(1, str, stack, info), "pw-reserve")) {
-+				is_pw_reserve_running = true;
-+				pipewire_pw_reserve_pid = PIDS_VAL(0, s_int, stack, info);
-+				break;
-+			}
-+		}
-+		procps_pids_unref(&info);
-+#endif
- 		if (is_pw_reserve_running)
- 			break;
- 	}
-@@ -1645,7 +1783,7 @@ void pipewire_pulse_stop_reserve(void)
-  * If the check fails, it means that the process can simply be killed.
-  */
- static int
--__igt_lsof_audio_and_kill_proc(proc_t *proc_info, char *proc_path)
-+__igt_lsof_audio_and_kill_proc(const pid_t tid, const char *cmd, const uid_t euid, const gid_t egid, char *proc_path)
- {
- 	const char *audio_dev = "/dev/snd/";
- 	char path[PATH_MAX * 2];
-@@ -1670,10 +1808,10 @@ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char *proc_path)
- 	 * 2) unload/unbind the the audio driver(s);
- 	 * 3) stop the pw-reserve thread.
- 	 */
--	if (!strcmp(proc_info->cmd, "pipewire-pulse")) {
-+	if (!strcmp(cmd, "pipewire-pulse")) {
- 		igt_info("process %d (%s) is using audio device. Should be requested to stop using them.\n",
--			 proc_info->tid, proc_info->cmd);
--		pipewire_pulse_pid = proc_info->tid;
-+			 tid, cmd);
-+		pipewire_pulse_pid = tid;
- 		return 0;
- 	}
- 	/*
-@@ -1685,9 +1823,9 @@ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char *proc_path)
- 	 * will respawn them. So, just ignore here, they'll honor pw-reserve,
- 	 * when the time comes.
- 	 */
--	if (!strcmp(proc_info->cmd, "pipewire-media-session"))
-+	if (!strcmp(cmd, "pipewire-media-session"))
- 		return 0;
--	if (!strcmp(proc_info->cmd, "wireplumber"))
-+	if (!strcmp(cmd, "wireplumber"))
- 		return 0;
- 
- 	dp = opendir(proc_path);
-@@ -1723,22 +1861,22 @@ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char *proc_path)
- 		 * enough to unbind audio modules and won't cause race issues
- 		 * with systemd trying to reload it.
- 		 */
--		if (!strcmp(proc_info->cmd, "pulseaudio")) {
--			pulseaudio_unload_module(proc_info);
-+		if (!strcmp(cmd, "pulseaudio")) {
-+			pulseaudio_unload_module(euid, egid);
- 			break;
- 		}
- 
- 		/* For all other processes, just kill them */
- 		igt_info("process %d (%s) is using audio device. Should be terminated.\n",
--				proc_info->tid, proc_info->cmd);
-+				tid, cmd);
- 
--		if (kill(proc_info->tid, SIGTERM) < 0) {
-+		if (kill(tid, SIGTERM) < 0) {
- 			igt_info("Fail to terminate %s (pid: %d) with SIGTERM\n",
--				proc_info->cmd, proc_info->tid);
--			if (kill(proc_info->tid, SIGABRT) < 0) {
-+				cmd, tid);
-+			if (kill(tid, SIGABRT) < 0) {
- 				fail++;
- 				igt_info("Fail to terminate %s (pid: %d) with SIGABRT\n",
--					proc_info->cmd, proc_info->tid);
-+					cmd, tid);
- 			}
- 		}
- 
-@@ -1760,9 +1898,10 @@ int
- igt_lsof_kill_audio_processes(void)
- {
- 	char path[PATH_MAX];
-+	int fail = 0;
-+#ifdef HAVE_LIBPROCPS
- 	proc_t *proc_info;
- 	PROCTAB *proc;
--	int fail = 0;
- 
- 	proc = openproc(PROC_FILLCOM | PROC_FILLSTAT | PROC_FILLARG);
- 	igt_assert(proc != NULL);
-@@ -1772,12 +1911,35 @@ igt_lsof_kill_audio_processes(void)
- 		if (snprintf(path, sizeof(path), "/proc/%d/fd", proc_info->tid) < 1)
- 			fail++;
- 		else
--			fail += __igt_lsof_audio_and_kill_proc(proc_info, path);
-+			fail += __igt_lsof_audio_and_kill_proc(proc_info->pid, proc_info->cmd, proc_info->euid, proc_info->egid, path);
- 
- 		freeproc(proc_info);
- 	}
- 	closeproc(proc);
-+#endif
-+#ifdef HAVE_LIBPROC2
-+	enum pids_item Items[] = { PIDS_ID_PID, PIDS_CMD, PIDS_ID_EUID, PIDS_ID_EGID };
-+	enum rel_items { EU_PID, EU_CMD, EU_EUID, EU_EGID };
-+	struct pids_info *info = NULL;
-+	struct pids_stack *stack;
-+	pid_t tid;
-+
-+	if (procps_pids_new(&info, Items, 4) < 0)
-+		return 1;
-+	while ((stack = procps_pids_get(info, PIDS_FETCH_TASKS_ONLY))) {
-+		tid = PIDS_VAL(EU_PID, s_int, stack, info);
- 
-+		if (snprintf(path, sizeof(path), "/proc/%d/fd", tid) < 1)
-+			fail++;
-+		else
-+			fail += __igt_lsof_audio_and_kill_proc(tid,
-+				PIDS_VAL(EU_CMD, str, stack, info),
-+				PIDS_VAL(EU_EUID, s_int, stack, info),
-+				PIDS_VAL(EU_EGID, s_int, stack, info),
-+				path);
-+	}
-+	procps_pids_unref(&info);
-+#endif
- 	return fail;
- }
- 
-diff --git a/lib/meson.build b/lib/meson.build
-index cc784686..90591e0e 100644
---- a/lib/meson.build
-+++ b/lib/meson.build
-@@ -105,7 +105,6 @@ lib_deps = [
- 	libdrm,
- 	libdw,
- 	libkmod,
--	libprocps,
- 	libudev,
- 	math,
- 	pciaccess,
-@@ -169,6 +168,12 @@ if chamelium.found()
- 	lib_sources += 'monitor_edids/monitor_edids_helper.c'
- endif
- 
-+if libprocps.found()
-+	lib_deps += libprocps
-+else
-+	lib_deps += libproc2
-+endif
-+
- if get_option('srcdir') != ''
-     srcdir = join_paths(get_option('srcdir'), 'tests')
- else
-diff --git a/meson.build b/meson.build
-index e7a68503..309b0af3 100644
---- a/meson.build
-+++ b/meson.build
-@@ -120,7 +120,15 @@ build_info += 'With libdrm: ' + ','.join(libdrm_info)
- 
- pciaccess = dependency('pciaccess', version : '>=0.10')
- libkmod = dependency('libkmod')
--libprocps = dependency('libprocps', required : true)
-+libprocps = dependency('libprocps', required : false)
-+libproc2 = dependency('libproc2', required : false)
-+if libprocps.found()
-+  config.set('HAVE_LIBPROCPS', 1)
-+elif libproc2.found()
-+  config.set('HAVE_LIBPROC2', 1)
-+else
-+  error('Either libprocps or libproc2 is required')
-+endif
- 
- libunwind = dependency('libunwind', required : get_option('libunwind'))
- build_info += 'With libunwind: @0@'.format(libunwind.found())
diff --git a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb b/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
index f4799fb..529b374 100644
--- a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
+++ b/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
@@ -9,12 +9,10 @@
 
 inherit meson pkgconfig
 
-SRCREV = "2b29e8ac07fbcfadc48b9d60e4d736a6e3b289ab"
-PV = "1.27.1"
+SRCREV = "31ec677ca24e7ed86e35f367f40a29d3d9f51c06"
+PV = "1.28"
 
-SRC_URI = "git://gitlab.freedesktop.org/drm/igt-gpu-tools.git;protocol=https;branch=master \
-           file://0001-Support-procps-4.x.patch \
-           "
+SRC_URI = "git://gitlab.freedesktop.org/drm/igt-gpu-tools.git;protocol=https;branch=master"
 
 S = "${WORKDIR}/git"
 
@@ -26,7 +24,7 @@
 
 PACKAGECONFIG[chamelium] = "-Dchamelium=enabled,-Dchamelium=disabled,gsl xmlrpc-c"
 
-EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled -Dsrcdir=/usr/src/debug/${PN}/${PV}-${PR}/git/"
+EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled -Dsrcdir=/usr/src/debug/${PN}/${PV}-${PR}/git/ -Dversion_hash=${PV}"
 COMPATIBLE_HOST = "(x86_64.*|i.86.*|arm.*|aarch64).*-linux"
 COMPATIBLE_HOST:libc-musl:class-target = "null"
 SECURITY_LDFLAGS = "${SECURITY_X_LDFLAGS}"
diff --git a/poky/meta/recipes-graphics/kmscube/kmscube_git.bb b/poky/meta/recipes-graphics/kmscube/kmscube_git.bb
index b385ff7..4cdc0f0 100644
--- a/poky/meta/recipes-graphics/kmscube/kmscube_git.bb
+++ b/poky/meta/recipes-graphics/kmscube/kmscube_git.bb
@@ -10,7 +10,7 @@
 
 LIC_FILES_CHKSUM = "file://kmscube.c;beginline=1;endline=23;md5=8b309d4ee67b7315ff7381270dd631fb"
 
-SRCREV = "53ea71efe63470cf698726d983e9da5748a754a1"
+SRCREV = "ea6c5d1eeefbfb0a1c27ab74a6e4621f1d9adf4c"
 SRC_URI = "git://gitlab.freedesktop.org/mesa/kmscube;branch=master;protocol=https"
 
 UPSTREAM_CHECK_COMMITS = "1"
diff --git a/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.0.bb b/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.0.bb
deleted file mode 100644
index 1228217..0000000
--- a/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.0.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-SUMMARY = "Simple DirectMedia Layer"
-DESCRIPTION = "Simple DirectMedia Layer is a cross-platform multimedia \
-library designed to provide low level access to audio, keyboard, mouse, \
-joystick, 3D hardware via OpenGL, and 2D video framebuffer."
-HOMEPAGE = "http://www.libsdl.org"
-BUGTRACKER = "http://bugzilla.libsdl.org/"
-
-SECTION = "libs"
-
-LICENSE = "Zlib & BSD-2-Clause"
-LIC_FILES_CHKSUM = "\
-    file://LICENSE.txt;md5=31f575634fd56b27fc6b6cbe8dc9bd38 \
-    file://src/hidapi/LICENSE.txt;md5=7c3949a631240cb6c31c50f3eb696077 \
-    file://src/hidapi/LICENSE-bsd.txt;md5=b5fa085ce0926bb50d0621620a82361f \
-    file://src/video/yuv2rgb/LICENSE;md5=79f8f3418d91531e05f0fc94ca67e071 \
-"
-
-# arm-neon adds MIT license
-LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', '& MIT', '', d)}"
-LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', 'file://src/video/arm/pixman-arm-neon-asm.h;md5=9a9cc1e51abbf1da58f4d9528ec9d49b;beginline=1;endline=24', '', d)}"
-
-PROVIDES = "virtual/libsdl2"
-
-SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz"
-
-S = "${WORKDIR}/SDL2-${PV}"
-
-SRC_URI[sha256sum] = "d215ae4541e69d628953711496cd7b0e8b8d5c8d811d5b0f98fdc7fd1422998a"
-
-inherit cmake lib_package binconfig-disabled pkgconfig upstream-version-is-even
-
-BINCONFIG = "${bindir}/sdl2-config"
-
-CVE_PRODUCT = "simple_directmedia_layer sdl"
-
-EXTRA_OECMAKE = "-DSDL_OSS=OFF -DSDL_ESD=OFF -DSDL_ARTS=OFF \
-                 -DSDL_DISKAUDIO=OFF -DSDL_NAS=OFF -DSDL_ESD_SHARED=OFF \
-                 -DSDL_DUMMYVIDEO=OFF \
-                 -DSDL_RPI=OFF \
-                 -DSDL_PTHREADS=ON \
-                 -DSDL_RPATH=OFF \
-                 -DSDL_SNDIO=OFF \
-                 -DSDL_X11_XCURSOR=OFF \
-                 -DSDL_X11_XDBE=OFF \
-                 -DSDL_X11_XFIXES=OFF \
-                 -DSDL_X11_XINPUT=OFF \
-                 -DSDL_X11_XRANDR=OFF \
-                 -DSDL_X11_XSCRNSAVER=OFF \
-                 -DSDL_X11_XSHAPE=OFF \
-"
-
-# opengl packageconfig factored out to make it easy for distros
-# and BSP layers to pick either (desktop) opengl, gles2, or no GL
-PACKAGECONFIG_GL ?= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)}"
-
-PACKAGECONFIG:class-native = "x11 ${PACKAGECONFIG_GL}"
-PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} ${PACKAGECONFIG_GL}"
-PACKAGECONFIG ??= " \
-    ${PACKAGECONFIG_GL} \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa directfb pulseaudio pipewire x11 vulkan', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
-    ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
-"
-PACKAGECONFIG[alsa]       = "-DSDL_ALSA=ON,-DSDL_ALSA=OFF,alsa-lib,"
-PACKAGECONFIG[arm-neon]   = "-DSDL_ARMNEON=ON,-DSDL_ARMNEON=OFF"
-PACKAGECONFIG[directfb]   = "-DSDL_DIRECTFB=ON,-DSDL_DIRECTFB=OFF,directfb,directfb"
-PACKAGECONFIG[gles2]      = "-DSDL_OPENGLES=ON,-DSDL_OPENGLES=OFF,virtual/libgles2"
-PACKAGECONFIG[jack]       = "-DSDL_JACK=ON,-DSDL_JACK=OFF,jack"
-PACKAGECONFIG[kmsdrm]     = "-DSDL_KMSDRM=ON,-DSDL_KMSDRM=OFF,libdrm virtual/libgbm"
-# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
-#  so we'll just use libusb when it's available.
-PACKAGECONFIG[libusb] = ",,libusb1"
-PACKAGECONFIG[libdecor] = "-DSDL_WAYLAND_LIBDECOR=ON,-DSDL_WAYLAND_LIBDECOR=OFF,libdecor,libdecor"
-PACKAGECONFIG[opengl]     = "-DSDL_OPENGL=ON,-DSDL_OPENGL=OFF,virtual/egl"
-PACKAGECONFIG[pipewire] = "-DSDL_PIPEWIRE_SHARED=ON,-DSDL_PIPEWIRE_SHARED=OFF,pipewire"
-PACKAGECONFIG[pulseaudio] = "-DSDL_PULSEAUDIO=ON,-DSDL_PULSEAUDIO=OFF,pulseaudio"
-PACKAGECONFIG[vulkan]    = "-DSDL_VULKAN=ON,-DSDL_VULKAN=OFF"
-PACKAGECONFIG[wayland]    = "-DSDL_WAYLAND=ON,-DSDL_WAYLAND=OFF,wayland-native wayland wayland-protocols libxkbcommon"
-PACKAGECONFIG[x11]        = "-DSDL_X11=ON,-DSDL_X11=OFF,virtual/libx11 libxext libxrandr libxrender"
-
-CFLAGS:append:class-native = " -DNO_SHARED_MEMORY"
-
-FILES:${PN} += "${datadir}/licenses/SDL2/LICENSE.txt"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb b/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb
new file mode 100644
index 0000000..f866a36
--- /dev/null
+++ b/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb
@@ -0,0 +1,85 @@
+SUMMARY = "Simple DirectMedia Layer"
+DESCRIPTION = "Simple DirectMedia Layer is a cross-platform multimedia \
+library designed to provide low level access to audio, keyboard, mouse, \
+joystick, 3D hardware via OpenGL, and 2D video framebuffer."
+HOMEPAGE = "http://www.libsdl.org"
+BUGTRACKER = "http://bugzilla.libsdl.org/"
+
+SECTION = "libs"
+
+LICENSE = "Zlib & BSD-2-Clause"
+LIC_FILES_CHKSUM = "\
+    file://LICENSE.txt;md5=31f575634fd56b27fc6b6cbe8dc9bd38 \
+    file://src/hidapi/LICENSE.txt;md5=7c3949a631240cb6c31c50f3eb696077 \
+    file://src/hidapi/LICENSE-bsd.txt;md5=b5fa085ce0926bb50d0621620a82361f \
+    file://src/video/yuv2rgb/LICENSE;md5=79f8f3418d91531e05f0fc94ca67e071 \
+"
+
+# arm-neon adds MIT license
+LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', '& MIT', '', d)}"
+LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'arm-neon', 'file://src/video/arm/pixman-arm-neon-asm.h;md5=9a9cc1e51abbf1da58f4d9528ec9d49b;beginline=1;endline=24', '', d)}"
+
+PROVIDES = "virtual/libsdl2"
+
+SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz"
+
+S = "${WORKDIR}/SDL2-${PV}"
+
+SRC_URI[sha256sum] = "7acb8679652701a2504d734e2ba7543ec1a83e310498ddd22fd44bf965eb5518"
+
+inherit cmake lib_package binconfig-disabled pkgconfig upstream-version-is-even
+
+BINCONFIG = "${bindir}/sdl2-config"
+
+CVE_PRODUCT = "simple_directmedia_layer sdl"
+
+EXTRA_OECMAKE = "-DSDL_OSS=OFF -DSDL_ESD=OFF -DSDL_ARTS=OFF \
+                 -DSDL_DISKAUDIO=OFF -DSDL_NAS=OFF -DSDL_ESD_SHARED=OFF \
+                 -DSDL_DUMMYVIDEO=OFF \
+                 -DSDL_RPI=OFF \
+                 -DSDL_PTHREADS=ON \
+                 -DSDL_RPATH=OFF \
+                 -DSDL_SNDIO=OFF \
+                 -DSDL_X11_XCURSOR=OFF \
+                 -DSDL_X11_XDBE=OFF \
+                 -DSDL_X11_XFIXES=OFF \
+                 -DSDL_X11_XINPUT=OFF \
+                 -DSDL_X11_XRANDR=OFF \
+                 -DSDL_X11_XSCRNSAVER=OFF \
+                 -DSDL_X11_XSHAPE=OFF \
+"
+
+# opengl packageconfig factored out to make it easy for distros
+# and BSP layers to pick either (desktop) opengl, gles2, or no GL
+PACKAGECONFIG_GL ?= "${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)}"
+
+PACKAGECONFIG:class-native = "x11 ${PACKAGECONFIG_GL}"
+PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} ${PACKAGECONFIG_GL}"
+PACKAGECONFIG ??= " \
+    ${PACKAGECONFIG_GL} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa directfb pulseaudio pipewire x11 vulkan', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
+    ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
+"
+PACKAGECONFIG[alsa]       = "-DSDL_ALSA=ON,-DSDL_ALSA=OFF,alsa-lib,"
+PACKAGECONFIG[arm-neon]   = "-DSDL_ARMNEON=ON,-DSDL_ARMNEON=OFF"
+PACKAGECONFIG[directfb]   = "-DSDL_DIRECTFB=ON,-DSDL_DIRECTFB=OFF,directfb,directfb"
+PACKAGECONFIG[gles2]      = "-DSDL_OPENGLES=ON,-DSDL_OPENGLES=OFF,virtual/libgles2"
+PACKAGECONFIG[jack]       = "-DSDL_JACK=ON,-DSDL_JACK=OFF,jack"
+PACKAGECONFIG[kmsdrm]     = "-DSDL_KMSDRM=ON,-DSDL_KMSDRM=OFF,libdrm virtual/libgbm"
+# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
+#  so we'll just use libusb when it's available.
+PACKAGECONFIG[libusb] = ",,libusb1"
+PACKAGECONFIG[libdecor] = "-DSDL_WAYLAND_LIBDECOR=ON,-DSDL_WAYLAND_LIBDECOR=OFF,libdecor,libdecor"
+PACKAGECONFIG[opengl]     = "-DSDL_OPENGL=ON,-DSDL_OPENGL=OFF,virtual/egl"
+PACKAGECONFIG[pipewire] = "-DSDL_PIPEWIRE_SHARED=ON,-DSDL_PIPEWIRE_SHARED=OFF,pipewire"
+PACKAGECONFIG[pulseaudio] = "-DSDL_PULSEAUDIO=ON,-DSDL_PULSEAUDIO=OFF,pulseaudio"
+PACKAGECONFIG[vulkan]    = "-DSDL_VULKAN=ON,-DSDL_VULKAN=OFF"
+PACKAGECONFIG[wayland]    = "-DSDL_WAYLAND=ON,-DSDL_WAYLAND=OFF,wayland-native wayland wayland-protocols libxkbcommon"
+PACKAGECONFIG[x11]        = "-DSDL_X11=ON,-DSDL_X11=OFF,virtual/libx11 libxext libxrandr libxrender"
+
+CFLAGS:append:class-native = " -DNO_SHARED_MEMORY"
+
+FILES:${PN} += "${datadir}/licenses/SDL2/LICENSE.txt"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/libva/libva-utils_2.19.0.bb b/poky/meta/recipes-graphics/libva/libva-utils_2.19.0.bb
deleted file mode 100644
index acb25a3..0000000
--- a/poky/meta/recipes-graphics/libva/libva-utils_2.19.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "libva-utils is a collection of utilities from libva project"
-
-DESCRIPTION = "libva-utils is a collection of utilities \
-and examples to exercise VA-API in accordance with the libva \
-project.VA-API is an open-source library and API specification, \
-which provides access to graphics hardware acceleration capabilities \
-for video processing. It consists of a main library and driver-specific \
-acceleration backends for each supported hardware vendor"
-
-HOMEPAGE = "https://01.org/linuxmedia/vaapi"
-BUGTRACKER = "https://github.com/intel/libva-utils/issues"
-
-SECTION = "x11"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b148fc8adf19dc9aec17cf9cd29a9a5e"
-
-SRC_URI = "git://github.com/intel/libva-utils.git;branch=v2.19-branch;protocol=https"
-SRCREV = "5bf107ec4f7b18a6457d23abf57560dfb382a751"
-S = "${WORKDIR}/git"
-
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))$"
-
-DEPENDS = "libva"
-
-inherit meson pkgconfig features_check
-
-# depends on libva which requires opengl
-REQUIRED_DISTRO_FEATURES = "opengl"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-PACKAGECONFIG[x11] = "-Dx11=true, -Dx11=false,virtual/libx11 libxext libxfixes"
-PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false,wayland-native wayland"
diff --git a/poky/meta/recipes-graphics/libva/libva-utils_2.20.0.bb b/poky/meta/recipes-graphics/libva/libva-utils_2.20.0.bb
new file mode 100644
index 0000000..2e1fd09
--- /dev/null
+++ b/poky/meta/recipes-graphics/libva/libva-utils_2.20.0.bb
@@ -0,0 +1,32 @@
+SUMMARY = "libva-utils is a collection of utilities from libva project"
+
+DESCRIPTION = "libva-utils is a collection of utilities \
+and examples to exercise VA-API in accordance with the libva \
+project.VA-API is an open-source library and API specification, \
+which provides access to graphics hardware acceleration capabilities \
+for video processing. It consists of a main library and driver-specific \
+acceleration backends for each supported hardware vendor"
+
+HOMEPAGE = "https://01.org/linuxmedia/vaapi"
+BUGTRACKER = "https://github.com/intel/libva-utils/issues"
+
+SECTION = "x11"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b148fc8adf19dc9aec17cf9cd29a9a5e"
+
+SRC_URI = "git://github.com/intel/libva-utils.git;branch=v2.20-branch;protocol=https"
+SRCREV = "0c8373e62af3e4d9a3831334c5402ad255797e67"
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(\d+(\.\d+)+))$"
+
+DEPENDS = "libva"
+
+inherit meson pkgconfig features_check
+
+# depends on libva which requires opengl
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+PACKAGECONFIG[x11] = "-Dx11=true, -Dx11=false,virtual/libx11 libxext libxfixes"
+PACKAGECONFIG[wayland] = "-Dwayland=true, -Dwayland=false,wayland-native wayland"
diff --git a/poky/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb b/poky/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
index 1a16ed4..d1f0a67 100644
--- a/poky/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
+++ b/poky/meta/recipes-graphics/matchbox-session/matchbox-session_0.1.bb
@@ -12,7 +12,6 @@
 SRC_URI = "file://matchbox-session"
 S = "${WORKDIR}"
 
-PR = "r4"
 
 inherit update-alternatives
 
diff --git a/poky/meta/recipes-graphics/mesa/files/0001-gallium-Fix-build-with-llvm-17.patch b/poky/meta/recipes-graphics/mesa/files/0001-gallium-Fix-build-with-llvm-17.patch
index 3631a91..1657081 100644
--- a/poky/meta/recipes-graphics/mesa/files/0001-gallium-Fix-build-with-llvm-17.patch
+++ b/poky/meta/recipes-graphics/mesa/files/0001-gallium-Fix-build-with-llvm-17.patch
@@ -1,4 +1,4 @@
-From 865762e0a767a121206d818bdd58301afbf30104 Mon Sep 17 00:00:00 2001
+From c8e9776abc3dfd3f2411797a90a03e7fa16263ef Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Fri, 23 Jun 2023 01:20:38 -0700
 Subject: [PATCH] gallium: Fix build with llvm 17
@@ -10,11 +10,9 @@
 Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23827]
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
- src/gallium/auxiliary/gallivm/lp_bld_init.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
+ src/gallium/auxiliary/gallivm/lp_bld_init.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
 
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c
-index 24d0823..3d4573e 100644
 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c
 +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c
 @@ -42,8 +42,10 @@
@@ -29,6 +27,14 @@
  #include <llvm-c/Transforms/Utils.h>
  #endif
  #include <llvm-c/BitWriter.h>
--- 
-2.41.0
-
+@@ -53,8 +55,10 @@
+ #if LLVM_VERSION_MAJOR <= 8 && (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM || DETECT_ARCH_S390 || DETECT_ARCH_MIPS64)
+ #include <llvm-c/Transforms/IPO.h>
+ #endif
++#if LLVM_VERSION_MAJOR < 17
+ #include <llvm-c/Transforms/Coroutines.h>
+ #endif
++#endif
+ 
+ unsigned gallivm_perf = 0;
+ 
diff --git a/poky/meta/recipes-graphics/mesa/files/0001-meson-Disable-cmake-dependency-detector-for-llvm.patch b/poky/meta/recipes-graphics/mesa/files/0001-meson-Disable-cmake-dependency-detector-for-llvm.patch
new file mode 100644
index 0000000..4cded05
--- /dev/null
+++ b/poky/meta/recipes-graphics/mesa/files/0001-meson-Disable-cmake-dependency-detector-for-llvm.patch
@@ -0,0 +1,42 @@
+From 00d41cd5aa3f4b494dc276c9b4ccdc096310c91f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 28 Sep 2023 15:34:22 -0700
+Subject: [PATCH] meson: use llvm-config instead of cmake to fix linking errors with meson 1.2.1
+
+meson dependency auto dependency detection uses cmake and then
+config-tool to process dependencies, in mesa the logic to detect llvm is
+using auto detection which means if it finds cmake then it will try to
+use cmake method. Cmake method works ok except a case when llvm-dev
+package is installed on the build host then it generates its own
+native.meson file and ignores OE supplied meson.native file which has
+correct llvm-config tool specified which is pointing to llvm-config from
+native sysroot. The generated meson.native file points to one found in
+/usr/bin and there onwards detector finds native install of llvm and
+configures that into building native mesa package.
+
+Since cmake detector does not always work, disable it by default and use
+config-tool which works in all cases. This is suggested in below issues
+too
+
+A similar issue is open in meson upstream [1] and mesa [2]
+
+[1] https://github.com/mesonbuild/meson/issues/10483
+[2] https://gitlab.freedesktop.org/mesa/mesa/-/issues/6738
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25438]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/meson.build
++++ b/meson.build
+@@ -1659,6 +1659,7 @@ with_llvm = false
+ if _llvm.allowed()
+   dep_llvm = dependency(
+     'llvm',
++    method : host_machine.system() == 'windows' ? 'auto' : 'config-tool',
+     version : _llvm_version,
+     modules : llvm_modules,
+     optional_modules : llvm_optional_modules,
diff --git a/poky/meta/recipes-graphics/mesa/mesa-gl_23.1.3.bb b/poky/meta/recipes-graphics/mesa/mesa-gl_23.1.8.bb
similarity index 100%
rename from poky/meta/recipes-graphics/mesa/mesa-gl_23.1.3.bb
rename to poky/meta/recipes-graphics/mesa/mesa-gl_23.1.8.bb
diff --git a/poky/meta/recipes-graphics/mesa/mesa.inc b/poky/meta/recipes-graphics/mesa/mesa.inc
index 83535eb..4e82450 100644
--- a/poky/meta/recipes-graphics/mesa/mesa.inc
+++ b/poky/meta/recipes-graphics/mesa/mesa.inc
@@ -19,9 +19,10 @@
            file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
            file://0001-gallium-Fix-build-with-llvm-17.patch \
            file://0001-intel-Allow-using-intel_clc-from-the-system.patch \
+           file://0001-meson-Disable-cmake-dependency-detector-for-llvm.patch \
            "
 
-SRC_URI[sha256sum] = "2f6d7381bc10fbd2d6263ad1022785b8b511046c1a904162f8f7da18eea8aed9"
+SRC_URI[sha256sum] = "45434ff91a709844130a3174d9c0ef39c6b50725b2bb0c13e736f36134db14ad"
 
 UPSTREAM_CHECK_GITTAGREGEX = "mesa-(?P<pver>\d+(\.\d+)+)"
 
diff --git a/poky/meta/recipes-graphics/mesa/mesa_23.1.3.bb b/poky/meta/recipes-graphics/mesa/mesa_23.1.8.bb
similarity index 100%
rename from poky/meta/recipes-graphics/mesa/mesa_23.1.3.bb
rename to poky/meta/recipes-graphics/mesa/mesa_23.1.8.bb
diff --git a/poky/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb b/poky/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
index 12c72ed..ba81d0b 100644
--- a/poky/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
+++ b/poky/meta/recipes-graphics/mini-x-session/mini-x-session_0.1.bb
@@ -3,7 +3,6 @@
 HOMEPAGE = "http://www.yoctoproject.org"
 BUGTRACKER = "http://bugzilla.pokylinux.org"
 
-PR = "r4"
 
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://mini-x-session;endline=5;md5=b6430bffbcf05f9760e72938826b7487"
diff --git a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb
index 0ce91ca..dd302c8 100644
--- a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb
+++ b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-weston.bb
@@ -1,6 +1,5 @@
 SUMMARY = "Basic Weston compositor setup"
 DESCRIPTION = "Packages required to set up a basic working Weston session"
-PR = "r1"
 
 inherit packagegroup features_check
 
diff --git a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
index 0185c93..db6242a 100644
--- a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
+++ b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb
@@ -1,6 +1,5 @@
 SUMMARY = "Basic X11 session"
 DESCRIPTION = "Packages required to set up a basic working X11 session"
-PR = "r1"
 
 inherit packagegroup features_check
 # rdepends on matchbox-wm
diff --git a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
index 3bb308f..ebc1330 100644
--- a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
+++ b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11-xserver.bb
@@ -3,7 +3,6 @@
 #
 
 SUMMARY = "X11 display server"
-PR = "r40"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
@@ -11,7 +10,10 @@
 # rdepends on XSERVER
 REQUIRED_DISTRO_FEATURES = "x11"
 
-XSERVER ?= "xserver-xorg xf86-video-fbdev"
+XSERVER ?= "xserver-xorg \
+            xf86-video-fbdev \
+            xf86-video-modesetting \
+            "
 XSERVERCODECS ?= ""
 
 RDEPENDS:${PN} = "\
diff --git a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
index 9ca058b..91db7ed 100644
--- a/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
+++ b/poky/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
@@ -2,7 +2,6 @@
 # Copyright (C) 2011 Intel Corporation
 #
 
-PR = "r40"
 
 inherit packagegroup features_check
 REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/poky/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch b/poky/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch
deleted file mode 100644
index e07e810..0000000
--- a/poky/meta/recipes-graphics/piglit/piglit/0001-cmake-install-bash-completions-in-the-right-place.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 26faa2c157a27a18a9f767976730fe0c115e3af4 Mon Sep 17 00:00:00 2001
-From: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Date: Wed, 13 Jul 2016 19:19:02 +0300
-Subject: [PATCH] cmake: install bash-completions in the right place
-
-The completionsdir variable is a full path and should not be
-prefixed.
-
-This does mean the files may be installed outside of
-CMAKE_INSTALL_PREFIX -- the alternative is more difficult and
-means that bash completion files may be installed where
-bash-completion can't find them.
-
-Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-Upstream-Status: Submitted [mailing list]
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 8e2abba..784a8f9 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -532,7 +532,7 @@ install (
- if (BASH_COMPLETION_FOUND)
- 	install(
- 		FILES completions/bash/piglit
--		DESTINATION ${CMAKE_INSTALL_PREFIX}/${BASH_COMPLETION_COMPLETIONSDIR}/
-+		DESTINATION ${BASH_COMPLETION_COMPLETIONSDIR}/
- 	)
- endif (BASH_COMPLETION_FOUND)
- 
--- 
-2.8.1
-
diff --git a/poky/meta/recipes-graphics/piglit/piglit_git.bb b/poky/meta/recipes-graphics/piglit/piglit_git.bb
index 62cada7..69294c6 100644
--- a/poky/meta/recipes-graphics/piglit/piglit_git.bb
+++ b/poky/meta/recipes-graphics/piglit/piglit_git.bb
@@ -7,14 +7,13 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b2beded7103a3d8a442a2a0391d607b0"
 
 SRC_URI = "git://gitlab.freedesktop.org/mesa/piglit.git;protocol=https;branch=main \
-           file://0001-cmake-install-bash-completions-in-the-right-place.patch \
            file://0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch \
            file://0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch \
            file://0001-tests-Fix-narrowing-errors-seen-with-clang.patch \
            "
 UPSTREAM_CHECK_COMMITS = "1"
 
-SRCREV = "5036601c43fff63f7be5cd8ad7b319a5c1f6652c"
+SRCREV = "71c21b1157c4f9a96453bdfcb9f4dda091360afd"
 # (when PV goes above 1.0 remove the trailing r)
 PV = "1.0+gitr"
 
diff --git a/poky/meta/recipes-graphics/spir/spirv-headers_1.3.250.0.bb b/poky/meta/recipes-graphics/spir/spirv-headers_1.3.250.0.bb
deleted file mode 100644
index d0a2e2e..0000000
--- a/poky/meta/recipes-graphics/spir/spirv-headers_1.3.250.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Machine-readable files for the SPIR-V Registry"
-SECTION = "graphics"
-HOMEPAGE = "https://www.khronos.org/registry/spir-v"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c938b85bceb8fb26c1a807f28a52ae2d"
-
-SRCREV = "268a061764ee69f09a477a695bf6a11ffe311b8d"
-SRC_URI = "git://github.com/KhronosGroup/SPIRV-Headers;protocol=https;branch=main"
-PE = "1"
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb b/poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb
new file mode 100644
index 0000000..945f087
--- /dev/null
+++ b/poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Machine-readable files for the SPIR-V Registry"
+SECTION = "graphics"
+HOMEPAGE = "https://www.khronos.org/registry/spir-v"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c938b85bceb8fb26c1a807f28a52ae2d"
+
+SRCREV = "124a9665e464ef98b8b718d572d5f329311061eb"
+SRC_URI = "git://github.com/KhronosGroup/SPIRV-Headers;protocol=https;branch=main"
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/spir/spirv-tools_1.3.250.0.bb b/poky/meta/recipes-graphics/spir/spirv-tools_1.3.250.0.bb
deleted file mode 100644
index bde6ddd..0000000
--- a/poky/meta/recipes-graphics/spir/spirv-tools_1.3.250.0.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SUMMARY  = "The SPIR-V Tools project provides an API and commands for \
-processing SPIR-V modules"
-DESCRIPTION = "The project includes an assembler, binary module parser, \
-disassembler, validator, and optimizer for SPIR-V."
-HOMEPAGE = "https://github.com/KhronosGroup/SPIRV-Tools"
-SECTION = "graphics"
-LICENSE  = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRCREV = "e7c6084fd1d6d6f5ac393e842728d8be309688ca"
-SRC_URI = "git://github.com/KhronosGroup/SPIRV-Tools.git;branch=main;protocol=https"
-PE = "1"
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-DEPENDS = "spirv-headers"
-
-EXTRA_OECMAKE += "\
-    -DSPIRV-Headers_SOURCE_DIR=${STAGING_EXECPREFIXDIR} \
-    -DSPIRV_TOOLS_BUILD_STATIC=OFF \
-    -DBUILD_SHARED_LIBS=ON \
-    -DSPIRV_SKIP_TESTS=ON \
-"
-
-do_install:append:class-target() {
-    # Properly set _IMPORT_PREFIX in INTERFACE_LINK_LIBRARIES so that dependent
-    # tools can find the right library
-    sed -i ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake \
-        -e 's:INTERFACE_LINK_LIBRARIES.*$:INTERFACE_LINK_LIBRARIES "\$\{_IMPORT_PREFIX\}/${baselib}":'
-}
-
-# all the libraries are unversioned, so don't pack it on PN-dev
-SOLIBS = ".so"
-FILES_SOLIBSDEV = ""
-
-PACKAGES =+ "${PN}-lesspipe"
-FILES:${PN}-lesspipe = "${base_bindir}/spirv-lesspipe.sh"
-RDEPENDS:${PN}-lesspipe += "${PN} bash"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb b/poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb
new file mode 100644
index 0000000..6904288
--- /dev/null
+++ b/poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb
@@ -0,0 +1,46 @@
+SUMMARY  = "The SPIR-V Tools project provides an API and commands for \
+processing SPIR-V modules"
+DESCRIPTION = "The project includes an assembler, binary module parser, \
+disassembler, validator, and optimizer for SPIR-V."
+HOMEPAGE = "https://github.com/KhronosGroup/SPIRV-Tools"
+SECTION = "graphics"
+LICENSE  = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRCREV = "e553b884c7c9febaa4e52334f683641fb5f196a0"
+SRC_URI = "git://github.com/KhronosGroup/SPIRV-Tools.git;branch=main;protocol=https"
+PE = "1"
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+DEPENDS = "spirv-headers"
+
+EXTRA_OECMAKE += "\
+    -DSPIRV-Headers_SOURCE_DIR=${STAGING_EXECPREFIXDIR} \
+    -DSPIRV_TOOLS_BUILD_STATIC=OFF \
+    -DBUILD_SHARED_LIBS=ON \
+    -DSPIRV_SKIP_TESTS=ON \
+"
+
+do_install:append:class-target() {
+    # Properly set _IMPORT_PREFIX in INTERFACE_LINK_LIBRARIES so that dependent
+    # tools can find the right library
+    sed -i ${D}${libdir}/cmake/SPIRV-Tools/SPIRV-ToolsTarget.cmake \
+        -e 's:INTERFACE_LINK_LIBRARIES.*$:INTERFACE_LINK_LIBRARIES "\$\{_IMPORT_PREFIX\}/${baselib}":'
+}
+
+# all the libraries are unversioned, so don't pack it on PN-dev
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+PACKAGES =+ "${PN}-lesspipe"
+FILES:${PN}-lesspipe = "${base_bindir}/spirv-lesspipe.sh"
+RDEPENDS:${PN}-lesspipe += "${PN} bash"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb b/poky/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
index efd426f..aa18881 100644
--- a/poky/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
+++ b/poky/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb
@@ -13,7 +13,6 @@
                     file://libsn/sn-common.h;endline=23;md5=6d05bc0ebdcf5513a6e77cb26e8cd7e2 \
                     file://test/test-boilerplate.h;endline=23;md5=923e706b2a70586176eead261cc5bb98"
 
-PR = "r2"
 
 SECTION = "libs"
 
diff --git a/poky/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb b/poky/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
index d3d1cfd..0fc075a 100644
--- a/poky/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
+++ b/poky/meta/recipes-graphics/ttf-fonts/ttf-bitstream-vera_1.10.bb
@@ -8,7 +8,6 @@
 SECTION = "x11/fonts"
 LICENSE = "BitstreamVera"
 LIC_FILES_CHKSUM = "file://COPYRIGHT.TXT;md5=27d7484b1e18d0ee4ce538644a3f04be"
-PR = "r8"
 
 inherit allarch fontcache
 
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.250.0.bb b/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.250.0.bb
deleted file mode 100644
index 2970767..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.250.0.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Vulkan Header files and API registry"
-DESCRIPTION = "Vulkan is a 3D graphics and compute API providing cross-platform access \
-to modern GPUs with low overhead and targeting realtime graphics applications such as \
-games and interactive media. This package contains the development headers \
-for packages wanting to make use of Vulkan."
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Headers"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Headers.git;branch=main;protocol=https"
-
-SRCREV = "9e61870ecbd32514113b467e0a0c46f60ed222c7"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-FILES:${PN} += "${datadir}/vulkan"
-RDEPENDS:${PN} += "python3-core"
-
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb
new file mode 100644
index 0000000..01eb14b
--- /dev/null
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Vulkan Header files and API registry"
+DESCRIPTION = "Vulkan is a 3D graphics and compute API providing cross-platform access \
+to modern GPUs with low overhead and targeting realtime graphics applications such as \
+games and interactive media. This package contains the development headers \
+for packages wanting to make use of Vulkan."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Headers"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=1bc355d8c4196f774c8b87ed1a8dd625"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Headers.git;branch=main;protocol=https"
+
+SRCREV = "85c2334e92e215cce34e8e0ed8b2dce4700f4a50"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES:${PN} += "${datadir}/vulkan"
+RDEPENDS:${PN} += "python3-core"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.250.0.bb b/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.250.0.bb
deleted file mode 100644
index 456c973..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.250.0.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "3D graphics and compute API common loader"
-DESCRIPTION = "Vulkan is a new generation graphics and compute API \
-that provides efficient access to modern GPUs. These packages \
-provide only the common vendor-agnostic library loader, headers and \
-the vulkaninfo utility."
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Loader"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7dbefed23242760aa3475ee42801c5ac"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=sdk-1.3.250;protocol=https"
-SRCREV = "f372068d09fc13bcf54b8c81274f37aa5f46aea3"
-
-S = "${WORKDIR}/git"
-
-REQUIRED_DISTRO_FEATURES = "vulkan"
-
-inherit cmake features_check pkgconfig
-
-DEPENDS += "vulkan-headers"
-
-EXTRA_OECMAKE = "\
-                 -DBUILD_TESTS=OFF \
-                 -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
-                 -DASSEMBLER_WORKS=FALSE \
-                 -DVulkanHeaders_INCLUDE_DIR=${STAGING_INCDIR} \
-                 -DVulkanRegistry_DIR=${RECIPE_SYSROOT}/${datadir} \
-                 "
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-
-PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
-PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
-
-RRECOMMENDS:${PN} = "mesa-vulkan-drivers"
-
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb
new file mode 100644
index 0000000..01cbeaf
--- /dev/null
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb
@@ -0,0 +1,42 @@
+SUMMARY = "3D graphics and compute API common loader"
+DESCRIPTION = "Vulkan is a new generation graphics and compute API \
+that provides efficient access to modern GPUs. These packages \
+provide only the common vendor-agnostic library loader, headers and \
+the vulkaninfo utility."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Loader"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7dbefed23242760aa3475ee42801c5ac"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=main;protocol=https"
+SRCREV = "afdd025ead2b63b2c73d900ab128a2d3b512cdf0"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+inherit cmake features_check pkgconfig
+
+DEPENDS += "vulkan-headers"
+
+EXTRA_OECMAKE = "\
+                 -DBUILD_TESTS=OFF \
+                 -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
+                 -DASSEMBLER_WORKS=FALSE \
+                 -DVulkanHeaders_INCLUDE_DIR=${STAGING_INCDIR} \
+                 -DVulkanRegistry_DIR=${RECIPE_SYSROOT}/${datadir} \
+                 "
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+RRECOMMENDS:${PN} = "mesa-vulkan-drivers"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-tools/0001-scripts-CMakeLists.txt-do-not-make-special-arrangeme.patch b/poky/meta/recipes-graphics/vulkan/vulkan-tools/0001-scripts-CMakeLists.txt-do-not-make-special-arrangeme.patch
deleted file mode 100644
index 6b70a1e..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-tools/0001-scripts-CMakeLists.txt-do-not-make-special-arrangeme.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 9060e916ca05d34b56c62f2be0b4a77dd104e2aa Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Fri, 2 Jun 2023 14:13:00 +0200
-Subject: [PATCH] scripts/CMakeLists.txt: append to CMAKE_FIND_ROOT_PATH
- instead of replacing it
-
-Resetting CMAKE_FIND_ROOT_PATH in particular breaks builds in Yocto
-(which is a major cross compiling framework).
-
-Upstream-Status: Submitted [https://github.com/KhronosGroup/Vulkan-Tools/pull/808]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
-
----
- scripts/CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
-index 5b979d43..19a58bf9 100644
---- a/scripts/CMakeLists.txt
-+++ b/scripts/CMakeLists.txt
-@@ -114,7 +114,7 @@ if (MOLTENVK_REPO_ROOT)
- endif()
- 
- if (CMAKE_CROSSCOMPILING)
--    set(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
-+    set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
- else()
-     set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
- endif()
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.250.0.bb b/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.250.0.bb
deleted file mode 100644
index 0346b38..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.250.0.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "Vulkan Utilities and Tools"
-DESCRIPTION = "Assist development by enabling developers to verify their applications correct use of the Vulkan API."
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Tools"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Tools.git;branch=main;protocol=https \
-           file://0001-scripts-CMakeLists.txt-do-not-make-special-arrangeme.patch \
-           "
-SRCREV = "695887a994ef9cc00a7aa3f9c00b31a56ea79534"
-
-S = "${WORKDIR}/git"
-
-inherit cmake features_check pkgconfig
-ANY_OF_DISTRO_FEATURES = "x11 wayland"
-REQUIRED_DISTRO_FEATURES = "vulkan"
-
-DEPENDS += "vulkan-headers vulkan-loader"
-
-EXTRA_OECMAKE = "\
-                 -DBUILD_TESTS=OFF \
-                 -DBUILD_CUBE=OFF \
-                 -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
-                 "
-
-# must choose x11 or wayland or both
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
-
-PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
-PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
-
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb
new file mode 100644
index 0000000..7a7edc9
--- /dev/null
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Vulkan Utilities and Tools"
+DESCRIPTION = "Assist development by enabling developers to verify their applications correct use of the Vulkan API."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Tools"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Tools.git;branch=main;protocol=https"
+SRCREV = "a7da7027ca9fd0901639f02619c226da9c6036f1"
+
+S = "${WORKDIR}/git"
+
+inherit cmake features_check pkgconfig
+ANY_OF_DISTRO_FEATURES = "x11 wayland"
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS += "vulkan-headers vulkan-loader"
+
+EXTRA_OECMAKE = "\
+                 -DBUILD_TESTS=OFF \
+                 -DBUILD_CUBE=OFF \
+                 -DPYTHON_EXECUTABLE=${HOSTTOOLS_DIR}/python3 \
+                 "
+
+# must choose x11 or wayland or both
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}"
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers/0001-scripts-CMakeLists.txt-append-to-CMAKE_FIND_ROOT_PAT.patch b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers/0001-scripts-CMakeLists.txt-append-to-CMAKE_FIND_ROOT_PAT.patch
deleted file mode 100644
index 4db686f..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers/0001-scripts-CMakeLists.txt-append-to-CMAKE_FIND_ROOT_PAT.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From ea7b9e6fc0b3f45d6032ce624bed85bbde5ec0bf Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex@linutronix.de>
-Date: Wed, 21 Jun 2023 20:03:03 +0200
-Subject: [PATCH] scripts/CMakeLists.txt: append to CMAKE_FIND_ROOT_PATH
- instead of replacing it
-
-Resetting CMAKE_FIND_ROOT_PATH in particular breaks builds in Yocto
-(which is a major cross compiling framework).
-
-Upstream-Status: Backport [https://github.com/KhronosGroup/Vulkan-ValidationLayers/commit/e1b11dc7856765cf45a283ac805ea5066c81cd9b]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- scripts/CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
-index 94c8528c8..cd86c54eb 100644
---- a/scripts/CMakeLists.txt
-+++ b/scripts/CMakeLists.txt
-@@ -124,7 +124,7 @@ if (MIMALLOC_INSTALL_DIR)
- endif()
- 
- if (CMAKE_CROSSCOMPILING)
--    set(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
-+    set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
- else()
-     set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
- endif()
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.250.0.bb b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.250.0.bb
deleted file mode 100644
index 62c6343..0000000
--- a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.250.0.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "Vulkan Validation layers"
-DESCRIPTION = "Khronos official Vulkan validation layers to assist developers \
-in verifying that their applications correctly use the Vulkan API"
-HOMEPAGE = "https://www.khronos.org/vulkan/"
-BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-ValidationLayers"
-SECTION = "libs"
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=8df9e8826734226d08cb412babfa599c"
-
-SRC_URI = "git://git@github.com/KhronosGroup/Vulkan-ValidationLayers.git;branch=sdk-1.3.250;protocol=https \
-           file://0001-scripts-CMakeLists.txt-append-to-CMAKE_FIND_ROOT_PAT.patch \
-           "
-SRCREV = "1541e00a63cd125f15d231d5a8059ebe66503b25"
-
-S = "${WORKDIR}/git"
-
-REQUIRED_DISTRO_FEATURES = "vulkan"
-
-DEPENDS = "vulkan-headers vulkan-loader spirv-headers spirv-tools glslang"
-
-# BUILD_TESTS            - Not required for OE builds
-# USE_ROBIN_HOOD_HASHING - Provides substantial performance improvements on all platforms.
-#                          Yocto project doesn't contain a recipe for package so disabled it.
-EXTRA_OECMAKE = "\
-    -DBUILD_TESTS=OFF \
-    -DUSE_ROBIN_HOOD_HASHING=OFF \
-    -DGLSLANG_INSTALL_DIR=${STAGING_LIBDIR} \
-    -DVULKAN_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
-    -DSPIRV_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
-    "
-
-PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
-PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}"
-
-inherit cmake features_check pkgconfig
-
-FILES:${PN} += "${datadir}/vulkan"
-
-SOLIBS = ".so"
-FILES_SOLIBSDEV = ""
-
-# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
-# vulkan-validation-layers, spirv-headers, spirv-tools
-# The tags versions should always be sdk-x.y.z, as this is what
-# upstream considers a release.
-UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb
new file mode 100644
index 0000000..1e2a0ac
--- /dev/null
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Vulkan Validation layers"
+DESCRIPTION = "Khronos official Vulkan validation layers to assist developers \
+in verifying that their applications correctly use the Vulkan API"
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-ValidationLayers"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cd3c0bc366cd9b6a906e22f0bcb5910f"
+
+SRC_URI = "git://git@github.com/KhronosGroup/Vulkan-ValidationLayers.git;branch=sdk-1.3.261;protocol=https"
+SRCREV = "628cd310bef6d54b4e6b25b5ac2ed013473409d6"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS = "vulkan-headers vulkan-loader spirv-headers spirv-tools glslang"
+
+# BUILD_TESTS            - Not required for OE builds
+# USE_ROBIN_HOOD_HASHING - Provides substantial performance improvements on all platforms.
+#                          Yocto project doesn't contain a recipe for package so disabled it.
+EXTRA_OECMAKE = "\
+    -DBUILD_TESTS=OFF \
+    -DUSE_ROBIN_HOOD_HASHING=OFF \
+    -DGLSLANG_INSTALL_DIR=${STAGING_LIBDIR} \
+    -DVULKAN_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
+    -DSPIRV_HEADERS_INSTALL_DIR=${STAGING_EXECPREFIXDIR} \
+    "
+
+PACKAGECONFIG[x11] = "-DBUILD_WSI_XLIB_SUPPORT=ON -DBUILD_WSI_XCB_SUPPORT=ON, -DBUILD_WSI_XLIB_SUPPORT=OFF -DBUILD_WSI_XCB_SUPPORT=OFF, libxcb libx11 libxrandr"
+PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SUPPORT=OFF, wayland"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}"
+
+inherit cmake features_check pkgconfig
+
+FILES:${PN} += "${datadir}/vulkan"
+
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
+# vulkan-validation-layers, spirv-headers, spirv-tools
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/wayland/files/0001-wayland-info-Fix-build-without-libdrm.patch b/poky/meta/recipes-graphics/wayland/files/0001-wayland-info-Fix-build-without-libdrm.patch
deleted file mode 100644
index 86c44d4..0000000
--- a/poky/meta/recipes-graphics/wayland/files/0001-wayland-info-Fix-build-without-libdrm.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From c79a3fb51718c4286b74edf0f758df9219994844 Mon Sep 17 00:00:00 2001
-From: Olivier Fourdan <ofourdan@redhat.com>
-Date: Wed, 14 Sep 2022 09:07:10 +0200
-Subject: [PATCH] wayland-info: Fix build without libdrm
-
-wayland-info can optionally use libdrm to provide a description of the
-dmabuf format modifiers.
-
-When not using libdrm however, the build fails because "dev_t" is not
-defined.
-
-The definition of "dev_t" comes from <sys/types.h> which is included
-from <libdrm.h>, which is not included without libdrm support, hence the
-build failure.
-
-Simply include <sys/types.h> unconditionally to make sure "dev_t" is
-defined regardless of libdrm support, to fix the build failure.
-
-Closes: https://gitlab.freedesktop.org/wayland/wayland-utils/-/issues/6
-Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
-Fixes: 240cb739 - "Add support for linux_dmabuf version 4"
-Reviewed-by: Simon Ser <contact@emersion.fr>
-Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
-
-Upstream-Status: Backport [https://gitlab.freedesktop.org/wayland/wayland-utils/-/commit/baa65ba9f62e6a05c32b9202b524158a21f24245]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- wayland-info/wayland-info.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/wayland-info/wayland-info.c b/wayland-info/wayland-info.c
-index 53cd04b..98ff205 100644
---- a/wayland-info/wayland-info.c
-+++ b/wayland-info/wayland-info.c
-@@ -34,6 +34,7 @@
- #include <ctype.h>
- #include <unistd.h>
- #include <sys/mman.h>
-+#include <sys/types.h>
- 
- #include <wayland-client.h>
- #if HAVE_HUMAN_FORMAT_MODIFIER
diff --git a/poky/meta/recipes-graphics/wayland/libinput_1.23.0.bb b/poky/meta/recipes-graphics/wayland/libinput_1.23.0.bb
deleted file mode 100644
index b83d5fd..0000000
--- a/poky/meta/recipes-graphics/wayland/libinput_1.23.0.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-SUMMARY = "Library to handle input devices in Wayland compositors"
-DESCRIPTION = "libinput is a library to handle input devices in Wayland \
-compositors and to provide a generic X.Org input driver. It provides \
-device detection, device handling, input device event processing and \
-abstraction so minimize the amount of custom input code compositors need to \
-provide the common set of functionality that users expect."
-HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libinput/"
-SECTION = "libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=bab4ac7dc1c10bc0fb037dc76c46ef8a"
-
-DEPENDS = "libevdev udev mtdev libcheck"
-
-SRC_URI = "git://gitlab.freedesktop.org/libinput/libinput.git;protocol=https;branch=main \
-           file://run-ptest \
-           "
-SRCREV = "0b005eb64b12603e65a620a77c67ec62fd03f413"
-S = "${WORKDIR}/git"
-
-UPSTREAM_CHECK_REGEX = "libinput-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
-
-inherit meson pkgconfig lib_package ptest
-
-# Patch out build directory, otherwise it leaks into ptest binary
-do_configure:append() {
-    sed -i -e "s,${WORKDIR},,g" config.h
-    if [ -e "litest-config.h" ]; then
-        sed -i -e "s,${WORKDIR},,g" litest-config.h
-    fi
-}
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[libwacom] = "-Dlibwacom=true,-Dlibwacom=false,libwacom"
-PACKAGECONFIG[gui] = "-Ddebug-gui=true,-Ddebug-gui=false,cairo gtk+3"
-
-UDEVDIR = "`pkg-config --variable=udevdir udev`"
-
-EXTRA_OEMESON += "-Dudev-dir=${UDEVDIR} \
-                  -Ddocumentation=false \
-                  ${@bb.utils.contains('PTEST_ENABLED', '1', '-Dtests=true -Dinstall-tests=true', '-Dtests=false -Dinstall-tests=false', d)} \
-                  -Dzshcompletiondir=no"
-
-# package name changed in 1.8.1 upgrade: make sure package upgrades work
-RPROVIDES:${PN} = "libinput"
-RREPLACES:${PN} = "libinput"
-RCONFLICTS:${PN} = "libinput"
-
-FILES:${PN}-ptest += "${libexecdir}/libinput/libinput-test-suite"
diff --git a/poky/meta/recipes-graphics/wayland/libinput_1.24.0.bb b/poky/meta/recipes-graphics/wayland/libinput_1.24.0.bb
new file mode 100644
index 0000000..49a1da2
--- /dev/null
+++ b/poky/meta/recipes-graphics/wayland/libinput_1.24.0.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Library to handle input devices in Wayland compositors"
+DESCRIPTION = "libinput is a library to handle input devices in Wayland \
+compositors and to provide a generic X.Org input driver. It provides \
+device detection, device handling, input device event processing and \
+abstraction so minimize the amount of custom input code compositors need to \
+provide the common set of functionality that users expect."
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/libinput/"
+SECTION = "libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=bab4ac7dc1c10bc0fb037dc76c46ef8a"
+
+DEPENDS = "libevdev udev mtdev libcheck"
+
+SRC_URI = "git://gitlab.freedesktop.org/libinput/libinput.git;protocol=https;branch=main \
+           file://run-ptest \
+           "
+SRCREV = "1680f2fbaa63a91739012c6b57988ab1918ea0b7"
+S = "${WORKDIR}/git"
+
+UPSTREAM_CHECK_REGEX = "libinput-(?P<pver>\d+\.\d+\.(?!9\d+)\d+)"
+
+inherit meson pkgconfig lib_package ptest
+
+# Patch out build directory, otherwise it leaks into ptest binary
+do_configure:append() {
+    sed -i -e "s,${WORKDIR},,g" config.h
+    if [ -e "litest-config.h" ]; then
+        sed -i -e "s,${WORKDIR},,g" litest-config.h
+    fi
+}
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libwacom] = "-Dlibwacom=true,-Dlibwacom=false,libwacom"
+PACKAGECONFIG[gui] = "-Ddebug-gui=true,-Ddebug-gui=false,cairo gtk+3"
+
+UDEVDIR = "`pkg-config --variable=udevdir udev`"
+
+EXTRA_OEMESON += "-Dudev-dir=${UDEVDIR} \
+                  -Ddocumentation=false \
+                  ${@bb.utils.contains('PTEST_ENABLED', '1', '-Dtests=true -Dinstall-tests=true', '-Dtests=false -Dinstall-tests=false', d)} \
+                  -Dzshcompletiondir=no"
+
+# package name changed in 1.8.1 upgrade: make sure package upgrades work
+RPROVIDES:${PN} = "libinput"
+RREPLACES:${PN} = "libinput"
+RCONFLICTS:${PN} = "libinput"
+
+FILES:${PN}-ptest += "${libexecdir}/libinput/libinput-test-suite"
diff --git a/poky/meta/recipes-graphics/wayland/wayland-utils_1.1.0.bb b/poky/meta/recipes-graphics/wayland/wayland-utils_1.1.0.bb
deleted file mode 100644
index 48e1409..0000000
--- a/poky/meta/recipes-graphics/wayland/wayland-utils_1.1.0.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Wayland utilities"
-DESCRIPTION = "Wayland-utils contains (for now) \
-wayland-info, a utility for displaying information about the Wayland \
-protocols supported by a Wayland compositor. \
-wayland-info is basically a standalone version of weston-info as found \
-in weston repository. "
-HOMEPAGE = "http://wayland.freedesktop.org"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=548a66038a77415e1df51118625e832f \
-                   "
-
-SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz \
-           file://0001-wayland-info-Fix-build-without-libdrm.patch \
-           "
-SRC_URI[sha256sum] = "9e685863025b4feade36d53bbc8e31b43e26498be743dea84c7a84912959410a"
-
-UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
-
-inherit meson pkgconfig
-
-DEPENDS += "wayland wayland-native wayland-protocols"
-
-PACKAGECONFIG ??= "drm"
-PACKAGECONFIG[drm] = "-Ddrm=enabled,-Ddrm=disabled,libdrm"
diff --git a/poky/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb b/poky/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
new file mode 100644
index 0000000..657f67f
--- /dev/null
+++ b/poky/meta/recipes-graphics/wayland/wayland-utils_1.2.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Wayland utilities"
+DESCRIPTION = "Wayland-utils contains (for now) \
+wayland-info, a utility for displaying information about the Wayland \
+protocols supported by a Wayland compositor. \
+wayland-info is basically a standalone version of weston-info as found \
+in weston repository. "
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=548a66038a77415e1df51118625e832f \
+                   "
+
+SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-utils/-/releases/${PV}/downloads/${BPN}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "d9278c22554586881802540751bcc42569262bf80cd9ac9b0fd12ff4bd09a9e4"
+
+UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
+
+inherit meson pkgconfig
+
+DEPENDS += "wayland wayland-native wayland-protocols"
+
+PACKAGECONFIG ??= "drm"
+PACKAGECONFIG[drm] = "-Ddrm=enabled,-Ddrm=disabled,libdrm"
diff --git a/poky/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb b/poky/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
index 3cc8e9e..671c0a2 100644
--- a/poky/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
+++ b/poky/meta/recipes-graphics/x11-common/xserver-nodm-init_3.0.bb
@@ -2,7 +2,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
 SECTION = "x11"
-PR = "r31"
 
 SRC_URI = "file://xserver-nodm \
            file://Xserver \
diff --git a/poky/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb b/poky/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
index b77c940..5c9742f 100644
--- a/poky/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
+++ b/poky/meta/recipes-graphics/xinput-calibrator/pointercal-xinput_0.0.bb
@@ -5,7 +5,6 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
-PR = "r7"
 
 SRC_URI = "file://pointercal.xinput"
 S = "${WORKDIR}"
diff --git a/poky/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb b/poky/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
index 05f07c1..7b49668 100644
--- a/poky/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
+++ b/poky/meta/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bb
@@ -5,7 +5,6 @@
 DEPENDS = "virtual/libx11 libxi libxrandr"
 
 PV = "0.7.5+git"
-PR = "r6"
 
 inherit autotools pkgconfig features_check
 # depends on virtual/libx11
diff --git a/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.3.0.bb b/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.3.0.bb
deleted file mode 100644
index 892046e..0000000
--- a/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.3.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require xorg-driver-input.inc
-
-SUMMARY = "Generic input driver for the X.Org server based on libinput"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a22925127bd3c827c384cedd23ed2309"
-
-DEPENDS += "libinput"
-
-XORG_DRIVER_COMPRESSOR = ".tar.xz"
-SRC_URI[sha256sum] = "1446ba20a22bc968b5a4a0b4dbc3b8e037c50d9c59ac75fa3f7fc506c58c1abb"
-
-FILES:${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb b/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb
new file mode 100644
index 0000000..92272c3
--- /dev/null
+++ b/poky/meta/recipes-graphics/xorg-driver/xf86-input-libinput_1.4.0.bb
@@ -0,0 +1,12 @@
+require xorg-driver-input.inc
+
+SUMMARY = "Generic input driver for the X.Org server based on libinput"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a22925127bd3c827c384cedd23ed2309"
+
+DEPENDS += "libinput"
+
+XORG_DRIVER_COMPRESSOR = ".tar.xz"
+SRC_URI[sha256sum] = "3a3d14cd895dc75b59ae2783b888031956a0bac7a1eff16d240dbb9d5df3e398"
+
+FILES:${PN} += "${datadir}/X11/xorg.conf.d"
diff --git a/poky/meta/recipes-graphics/xorg-font/font-util_1.4.0.bb b/poky/meta/recipes-graphics/xorg-font/font-util_1.4.0.bb
deleted file mode 100644
index db82104..0000000
--- a/poky/meta/recipes-graphics/xorg-font/font-util_1.4.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "X.Org font package creation/installation utilities"
-
-require xorg-font-common.inc
-
-#Unicode is MIT
-LICENSE = "MIT & MIT & BSD-4-Clause & BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5df208ec65eb84ce5bb8d82d8f3b9675 \
-                    file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \
-                    file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \
-                    file://map-ISO8859-1;beginline=9;endline=23;md5=1cecb984063248f29ffe5c46f5c04f34"
-
-DEPENDS = "encodings util-macros"
-DEPENDS:class-native = "util-macros-native"
-RDEPENDS:${PN} = "mkfontdir mkfontscale encodings"
-RDEPENDS:${PN}:class-native = ""
-
-BBCLASSEXTEND = "native"
-
-SRC_URI[sha256sum] = "9f724bf940128c7e39f7252bd961cd38cfac2359de2100a8bed696bf40d40f7d"
-
-SYSROOT_DIRS_IGNORE:remove = "${datadir}/fonts"
-
-SRC_URI_EXT = "xz"
diff --git a/poky/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb b/poky/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
new file mode 100644
index 0000000..0c65927
--- /dev/null
+++ b/poky/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "X.Org font package creation/installation utilities"
+
+require xorg-font-common.inc
+
+LICENSE = "Unicode-TOU & BSD-4-Clause & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2a9e705c00e463c8d294f90486852e06 \
+                    file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \
+                    file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \
+                    file://map-ISO8859-1;beginline=1;endline=4;md5=9c9c1d525d29c0e82b5c99edbb8e71c1 \
+                    "
+
+DEPENDS = "encodings util-macros"
+DEPENDS:class-native = "util-macros-native"
+RDEPENDS:${PN} = "mkfontdir mkfontscale encodings"
+RDEPENDS:${PN}:class-native = ""
+
+BBCLASSEXTEND = "native"
+
+SRC_URI[sha256sum] = "5c9f64123c194b150fee89049991687386e6ff36ef2af7b80ba53efaf368cc95"
+
+SYSROOT_DIRS_IGNORE:remove = "${datadir}/fonts"
+
+SRC_URI_EXT = "xz"
diff --git a/poky/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb b/poky/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
index babde4b..d32ef77 100644
--- a/poky/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
+++ b/poky/meta/recipes-graphics/xorg-font/xorg-minimal-fonts.bb
@@ -13,7 +13,6 @@
 SOURCE_DATE_EPOCH = "1613559011"
 
 PE = "1"
-PR = "r4"
 
 inherit allarch features_check
 
diff --git a/poky/meta/recipes-graphics/xorg-lib/libxcb_1.15.bb b/poky/meta/recipes-graphics/xorg-lib/libxcb_1.15.bb
deleted file mode 100644
index 411f51a..0000000
--- a/poky/meta/recipes-graphics/xorg-lib/libxcb_1.15.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-SUMMARY = "XCB: The X protocol C binding library"
-DESCRIPTION = "The X protocol C-language Binding (XCB) is a replacement \
-for Xlib featuring a small footprint, latency hiding, direct access to \
-the protocol, improved threading support, and extensibility."
-HOMEPAGE = "http://xcb.freedesktop.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
-SECTION = "x11/libs"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.xz \
-           file://0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch"
-
-SRC_URI[sha256sum] = "cc38744f817cf6814c847e2df37fcb8997357d72fa4bcbc228ae0fe47219a059"
-
-BBCLASSEXTEND = "native nativesdk"
-
-DEPENDS = "xcb-proto xorgproto libxau libpthread-stubs libxdmcp"
-
-PACKAGES_DYNAMIC = "^${PN}-.*"
-
-FILES:${PN} = "${libdir}/libxcb.so.*"
-
-inherit autotools pkgconfig features_check
-
-# The libxau and others requires x11 in DISTRO_FEATURES
-REQUIRED_DISTRO_FEATURES = "x11"
-
-export PYTHON = "python3"
-
-do_install:append () {
-	chown root.root ${D}${datadir}/doc/${BPN}/tutorial -R
-}
-
-python populate_packages:prepend () {
-    do_split_packages(d, '${libdir}', r'^libxcb-(.*)\.so\..*$', '${PN}-%s', 'XCB library module for %s', allow_links=True)
-}
diff --git a/poky/meta/recipes-graphics/xorg-lib/libxcb_1.16.bb b/poky/meta/recipes-graphics/xorg-lib/libxcb_1.16.bb
new file mode 100644
index 0000000..04b1eaa
--- /dev/null
+++ b/poky/meta/recipes-graphics/xorg-lib/libxcb_1.16.bb
@@ -0,0 +1,38 @@
+SUMMARY = "XCB: The X protocol C binding library"
+DESCRIPTION = "The X protocol C-language Binding (XCB) is a replacement \
+for Xlib featuring a small footprint, latency hiding, direct access to \
+the protocol, improved threading support, and extensibility."
+HOMEPAGE = "http://xcb.freedesktop.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
+SECTION = "x11/libs"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.xz \
+           file://0001-use-_Alignof-to-avoid-UB-in-ALIGNOF.patch"
+
+SRC_URI[sha256sum] = "4348566aa0fbf196db5e0a576321c65966189210cb51328ea2bb2be39c711d71"
+
+BBCLASSEXTEND = "native nativesdk"
+
+DEPENDS = "xcb-proto xorgproto libxau libpthread-stubs libxdmcp"
+
+PACKAGES_DYNAMIC = "^${PN}-.*"
+
+FILES:${PN} = "${libdir}/libxcb.so.*"
+
+inherit autotools pkgconfig features_check
+
+# The libxau and others requires x11 in DISTRO_FEATURES
+REQUIRED_DISTRO_FEATURES = "x11"
+
+export PYTHON = "python3"
+
+do_install:append () {
+	chown root.root ${D}${datadir}/doc/${BPN}/tutorial -R
+}
+
+python populate_packages:prepend () {
+    do_split_packages(d, '${libdir}', r'^libxcb-(.*)\.so\..*$', '${PN}-%s', 'XCB library module for %s', allow_links=True)
+}
diff --git a/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.15.2.bb b/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.15.2.bb
deleted file mode 100644
index e60e795..0000000
--- a/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.15.2.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "XCB: The X protocol C binding headers"
-DESCRIPTION = "Function prototypes for the X protocol C-language Binding \
-(XCB).  XCB is a replacement for Xlib featuring a small footprint, \
-latency hiding, direct access to the protocol, improved threading \
-support, and extensibility."
-HOMEPAGE = "http://xcb.freedesktop.org"
-BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
-
-SECTION = "x11/libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7 \
-                    file://src/dri2.xml;beginline=2;endline=28;md5=f8763b13ff432e8597e0d610cf598e65"
-
-SRC_URI = "https://xorg.freedesktop.org/archive/individual/proto/${BP}.tar.xz \
-           file://0001-xcb-proto.pc.in-reinstate-libdir.patch \
-           file://0001-Fix-install-conflict-when-enable-multilib.patch \
-           "
-SRC_URI[sha256sum] = "7072beb1f680a2fe3f9e535b797c146d22528990c72f63ddb49d2f350a3653ed"
-
-inherit autotools pkgconfig python3native
-
-PACKAGES += "python-xcbgen"
-
-FILES:${PN} = ""
-FILES:${PN}-dev += "${datadir}/xcb/*.xml ${datadir}/xcb/*.xsd"
-FILES:python-xcbgen = "${PYTHON_SITEPACKAGES_DIR}"
-
-DEV_PKG_DEPENDENCY = ""
-RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb b/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb
new file mode 100644
index 0000000..67c1e8d
--- /dev/null
+++ b/poky/meta/recipes-graphics/xorg-proto/xcb-proto_1.16.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "XCB: The X protocol C binding headers"
+DESCRIPTION = "Function prototypes for the X protocol C-language Binding \
+(XCB).  XCB is a replacement for Xlib featuring a small footprint, \
+latency hiding, direct access to the protocol, improved threading \
+support, and extensibility."
+HOMEPAGE = "http://xcb.freedesktop.org"
+BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=XCB"
+
+SECTION = "x11/libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d763b081cb10c223435b01e00dc0aba7 \
+                    file://src/dri2.xml;beginline=2;endline=28;md5=f8763b13ff432e8597e0d610cf598e65"
+
+SRC_URI = "https://xorg.freedesktop.org/archive/individual/proto/${BP}.tar.xz \
+           file://0001-xcb-proto.pc.in-reinstate-libdir.patch \
+           file://0001-Fix-install-conflict-when-enable-multilib.patch \
+           "
+SRC_URI[sha256sum] = "a75a1848ad2a89a82d841a51be56ce988ff3c63a8d6bf4383ae3219d8d915119"
+
+inherit autotools pkgconfig python3native
+
+PACKAGES += "python-xcbgen"
+
+FILES:${PN} = ""
+FILES:${PN}-dev += "${datadir}/xcb/*.xml ${datadir}/xcb/*.xsd"
+FILES:python-xcbgen = "${PYTHON_SITEPACKAGES_DIR}"
+
+DEV_PKG_DEPENDENCY = ""
+RRECOMMENDS:${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb b/poky/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
index f82a696..03f14ce 100644
--- a/poky/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
+++ b/poky/meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb
@@ -3,7 +3,6 @@
 SECTION = "x11/base"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-PR = "r33"
 
 SRC_URI = "file://xorg.conf"
 
diff --git a/poky/meta/recipes-graphics/xrestop/xrestop_0.4.bb b/poky/meta/recipes-graphics/xrestop/xrestop_0.4.bb
index 0b5ab50..a6b6c42 100644
--- a/poky/meta/recipes-graphics/xrestop/xrestop_0.4.bb
+++ b/poky/meta/recipes-graphics/xrestop/xrestop_0.4.bb
@@ -10,7 +10,6 @@
                     file://xrestop.c;endline=18;md5=730876c30f0d8a928676bcd1242a3b35"
 
 SECTION = "x11/utils"
-PR = "r3"
 
 DEPENDS = "libxres libxext virtual/libx11 ncurses"
 
diff --git a/poky/meta/recipes-graphics/xwayland/xwayland_23.1.2.bb b/poky/meta/recipes-graphics/xwayland/xwayland_23.1.2.bb
deleted file mode 100644
index de51653..0000000
--- a/poky/meta/recipes-graphics/xwayland/xwayland_23.1.2.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-SUMMARY = "XWayland is an X Server that runs under Wayland."
-DESCRIPTION = "XWayland is an X Server running as a Wayland client, \
-and thus is capable of displaying native X11 client applications in a \
-Wayland compositor environment. The goal of XWayland is to facilitate \
-the transition from X Window System to Wayland environments, providing \
-a way to run unported applications in the meantime."
-HOMEPAGE = "https://fedoraproject.org/wiki/Changes/XwaylandStandalone"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=5df87950af51ac2c5822094553ea1880"
-
-SRC_URI = "https://www.x.org/archive/individual/xserver/xwayland-${PV}.tar.xz"
-SRC_URI[sha256sum] = "bd25d8498ee4d77874fda125127e2db37fc332531febc966231ea06fae8cf77f"
-
-UPSTREAM_CHECK_REGEX = "xwayland-(?P<pver>\d+(\.(?!90\d)\d+)+)\.tar"
-
-inherit meson features_check pkgconfig
-REQUIRED_DISTRO_FEATURES = "x11 opengl"
-
-DEPENDS += "xorgproto xtrans pixman libxkbfile libxfont2 wayland wayland-native wayland-protocols libdrm libepoxy libxcvt"
-
-OPENGL_PKGCONFIGS = "glx glamor dri3"
-PACKAGECONFIG ??= "${XORG_CRYPTO} \
-                   ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '${OPENGL_PKGCONFIGS}', '', d)} \
-"
-PACKAGECONFIG[dri3] = "-Ddri3=true,-Ddri3=false,libxshmfence"
-PACKAGECONFIG[glx] = "-Dglx=true,-Dglx=false,virtual/libgl virtual/libx11"
-PACKAGECONFIG[glamor] = "-Dglamor=true,-Dglamor=false,libepoxy virtual/libgbm,libegl"
-PACKAGECONFIG[unwind] = "-Dlibunwind=true,-Dlibunwind=false,libunwind"
-PACKAGECONFIG[xinerama] = "-Dxinerama=true,-Dxinerama=false"
-
-# Xorg requires a SHA1 implementation, pick one
-XORG_CRYPTO ??= "openssl"
-PACKAGECONFIG[openssl] = "-Dsha1=libcrypto,,openssl"
-PACKAGECONFIG[nettle] = "-Dsha1=libnettle,,nettle"
-PACKAGECONFIG[gcrypt] = "-Dsha1=libgcrypt,,libgcrypt"
-
-do_install:append() {
-    # remove files not needed and clashing with xserver-xorg
-    rm -rf ${D}/${libdir}/xorg/
-}
-
-FILES:${PN} += "${libdir}/xorg/protocol.txt"
-
-RDEPENDS:${PN} += "xkbcomp"
diff --git a/poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb b/poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb
new file mode 100644
index 0000000..e97a921
--- /dev/null
+++ b/poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb
@@ -0,0 +1,45 @@
+SUMMARY = "XWayland is an X Server that runs under Wayland."
+DESCRIPTION = "XWayland is an X Server running as a Wayland client, \
+and thus is capable of displaying native X11 client applications in a \
+Wayland compositor environment. The goal of XWayland is to facilitate \
+the transition from X Window System to Wayland environments, providing \
+a way to run unported applications in the meantime."
+HOMEPAGE = "https://fedoraproject.org/wiki/Changes/XwaylandStandalone"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5df87950af51ac2c5822094553ea1880"
+
+SRC_URI = "https://www.x.org/archive/individual/xserver/xwayland-${PV}.tar.xz"
+SRC_URI[sha256sum] = "eebc2692c3aa80617d78428bc6ec7b91b254a98214d2a70e997098503cd6ef90"
+
+UPSTREAM_CHECK_REGEX = "xwayland-(?P<pver>\d+(\.(?!90\d)\d+)+)\.tar"
+
+inherit meson features_check pkgconfig
+REQUIRED_DISTRO_FEATURES = "x11 opengl"
+
+DEPENDS += "xorgproto xtrans pixman libxkbfile libxfont2 wayland wayland-native wayland-protocols libdrm libepoxy libxcvt"
+
+OPENGL_PKGCONFIGS = "glx glamor dri3"
+PACKAGECONFIG ??= "${XORG_CRYPTO} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '${OPENGL_PKGCONFIGS}', '', d)} \
+"
+PACKAGECONFIG[dri3] = "-Ddri3=true,-Ddri3=false,libxshmfence"
+PACKAGECONFIG[glx] = "-Dglx=true,-Dglx=false,virtual/libgl virtual/libx11"
+PACKAGECONFIG[glamor] = "-Dglamor=true,-Dglamor=false,libepoxy virtual/libgbm,libegl"
+PACKAGECONFIG[unwind] = "-Dlibunwind=true,-Dlibunwind=false,libunwind"
+PACKAGECONFIG[xinerama] = "-Dxinerama=true,-Dxinerama=false"
+
+# Xorg requires a SHA1 implementation, pick one
+XORG_CRYPTO ??= "openssl"
+PACKAGECONFIG[openssl] = "-Dsha1=libcrypto,,openssl"
+PACKAGECONFIG[nettle] = "-Dsha1=libnettle,,nettle"
+PACKAGECONFIG[gcrypt] = "-Dsha1=libgcrypt,,libgcrypt"
+
+do_install:append() {
+    # remove files not needed and clashing with xserver-xorg
+    rm -rf ${D}/${libdir}/xorg/
+}
+
+FILES:${PN} += "${libdir}/xorg/protocol.txt"
+
+RDEPENDS:${PN} += "xkbcomp"
diff --git a/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.26.bb b/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.26.bb
deleted file mode 100644
index 11a3c4f..0000000
--- a/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.26.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-
-SUMMARY = "Kexec fast reboot tools"
-DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel"
-HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kexec/"
-SECTION = "kernel/userland"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
-                    file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
-DEPENDS = "zlib xz"
-
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz \
-           file://kdump \
-           file://kdump.conf \
-           file://kdump.service \
-           file://0001-powerpc-change-the-memory-size-limit.patch \
-           file://0002-purgatory-Pass-r-directly-to-linker.patch \
-           file://0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch \
-           file://0005-Disable-PIE-during-link.patch \
-           file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \
-           "
-
-SRC_URI[sha256sum] = "89bdd941542c64fec16311858df304ed3a3908c1a60874d69df5d9bf1611e062"
-
-inherit autotools update-rc.d systemd
-
-export LDFLAGS = "-L${STAGING_LIBDIR}"
-EXTRA_OECONF = " --with-zlib=yes"
-
-do_compile:prepend() {
-    # Remove the prepackaged config.h from the source tree as it overrides
-    # the same file generated by configure and placed in the build tree
-    rm -f ${S}/include/config.h
-
-    # Remove the '*.d' file to make sure the recompile is OK
-    for dep in `find ${B} -type f -name '*.d'`; do
-        dep_no_d="`echo $dep | sed 's#.d$##'`"
-        # Remove file.d when there is a file.o
-        if [ -f "$dep_no_d.o" ]; then
-            rm -f $dep
-        fi
-    done
-}
-
-do_install:append () {
-        install -d ${D}${sysconfdir}/sysconfig
-        install -m 0644 ${WORKDIR}/kdump.conf ${D}${sysconfdir}/sysconfig
-
-        if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
-                install -D -m 0755 ${WORKDIR}/kdump ${D}${sysconfdir}/init.d/kdump
-        fi
-
-        if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-                install -D -m 0755 ${WORKDIR}/kdump ${D}${libexecdir}/kdump-helper
-                install -D -m 0644 ${WORKDIR}/kdump.service ${D}${systemd_system_unitdir}/kdump.service
-                sed -i -e 's,@LIBEXECDIR@,${libexecdir},g' ${D}${systemd_system_unitdir}/kdump.service
-        fi
-}
-
-PACKAGES =+ "kexec kdump vmcore-dmesg"
-
-ALLOW_EMPTY:${PN} = "1"
-RRECOMMENDS:${PN} = "kexec kdump vmcore-dmesg"
-
-FILES:kexec = "${sbindir}/kexec"
-FILES:kdump = "${sbindir}/kdump \
-               ${sysconfdir}/sysconfig/kdump.conf \
-               ${sysconfdir}/init.d/kdump \
-               ${libexecdir}/kdump-helper \
-               ${systemd_system_unitdir}/kdump.service \
-"
-
-FILES:vmcore-dmesg = "${sbindir}/vmcore-dmesg"
-
-INITSCRIPT_PACKAGES = "kdump"
-INITSCRIPT_NAME:kdump = "kdump"
-INITSCRIPT_PARAMS:kdump = "start 56 2 3 4 5 . stop 56 0 1 6 ."
-
-SYSTEMD_PACKAGES = "kdump"
-SYSTEMD_SERVICE:kdump = "kdump.service"
-
-SECURITY_PIE_CFLAGS:remove = "-fPIE -pie"
-
-COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|powerpc.*|mips.*)-(linux|freebsd.*)'
-
-INSANE_SKIP:${PN} = "arch"
diff --git a/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.27.bb b/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.27.bb
new file mode 100644
index 0000000..9b9864d
--- /dev/null
+++ b/poky/meta/recipes-kernel/kexec/kexec-tools_2.0.27.bb
@@ -0,0 +1,85 @@
+
+SUMMARY = "Kexec fast reboot tools"
+DESCRIPTION = "Kexec is a fast reboot feature that lets you reboot to a new Linux kernel"
+HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kexec/"
+SECTION = "kernel/userland"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
+                    file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
+DEPENDS = "zlib xz"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz \
+           file://kdump \
+           file://kdump.conf \
+           file://kdump.service \
+           file://0001-powerpc-change-the-memory-size-limit.patch \
+           file://0002-purgatory-Pass-r-directly-to-linker.patch \
+           file://0003-kexec-ARM-Fix-add_buffer_phys_virt-align-issue.patch \
+           file://0005-Disable-PIE-during-link.patch \
+           file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \
+           "
+
+SRC_URI[sha256sum] = "410f89057d1f4cd2b0477b6c2035ec2c52e21c185e90742bbae8b4f78a7077a5"
+
+inherit autotools update-rc.d systemd
+
+export LDFLAGS = "-L${STAGING_LIBDIR}"
+EXTRA_OECONF = " --with-zlib=yes"
+
+do_compile:prepend() {
+    # Remove the prepackaged config.h from the source tree as it overrides
+    # the same file generated by configure and placed in the build tree
+    rm -f ${S}/include/config.h
+
+    # Remove the '*.d' file to make sure the recompile is OK
+    for dep in `find ${B} -type f -name '*.d'`; do
+        dep_no_d="`echo $dep | sed 's#.d$##'`"
+        # Remove file.d when there is a file.o
+        if [ -f "$dep_no_d.o" ]; then
+            rm -f $dep
+        fi
+    done
+}
+
+do_install:append () {
+        install -d ${D}${sysconfdir}/sysconfig
+        install -m 0644 ${WORKDIR}/kdump.conf ${D}${sysconfdir}/sysconfig
+
+        if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+                install -D -m 0755 ${WORKDIR}/kdump ${D}${sysconfdir}/init.d/kdump
+        fi
+
+        if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+                install -D -m 0755 ${WORKDIR}/kdump ${D}${libexecdir}/kdump-helper
+                install -D -m 0644 ${WORKDIR}/kdump.service ${D}${systemd_system_unitdir}/kdump.service
+                sed -i -e 's,@LIBEXECDIR@,${libexecdir},g' ${D}${systemd_system_unitdir}/kdump.service
+        fi
+}
+
+PACKAGES =+ "kexec kdump vmcore-dmesg"
+
+ALLOW_EMPTY:${PN} = "1"
+RRECOMMENDS:${PN} = "kexec kdump vmcore-dmesg"
+
+FILES:kexec = "${sbindir}/kexec"
+FILES:kdump = "${sbindir}/kdump \
+               ${sysconfdir}/sysconfig/kdump.conf \
+               ${sysconfdir}/init.d/kdump \
+               ${libexecdir}/kdump-helper \
+               ${systemd_system_unitdir}/kdump.service \
+"
+
+FILES:vmcore-dmesg = "${sbindir}/vmcore-dmesg"
+
+INITSCRIPT_PACKAGES = "kdump"
+INITSCRIPT_NAME:kdump = "kdump"
+INITSCRIPT_PARAMS:kdump = "start 56 2 3 4 5 . stop 56 0 1 6 ."
+
+SYSTEMD_PACKAGES = "kdump"
+SYSTEMD_SERVICE:kdump = "kdump.service"
+
+SECURITY_PIE_CFLAGS:remove = "-fPIE -pie"
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|powerpc.*|mips.*)-(linux|freebsd.*)'
+
+INSANE_SKIP:${PN} = "arch"
diff --git a/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.4.bb b/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.4.bb
deleted file mode 100644
index c523154..0000000
--- a/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require linux-libc-headers.inc
-
-SRC_URI:append:libc-musl = "\
-    file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
-    file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
-    file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
-   "
-
-SRC_URI += "\
-    file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
-"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-
-SRC_URI[sha256sum] = "8fa0588f0c2ceca44cac77a0e39ba48c9f00a6b9dc69761c02a5d3efac8da7f3"
-
-
diff --git a/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.5.bb b/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.5.bb
new file mode 100644
index 0000000..fa90274
--- /dev/null
+++ b/poky/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_6.5.bb
@@ -0,0 +1,17 @@
+require linux-libc-headers.inc
+
+SRC_URI:append:libc-musl = "\
+    file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
+    file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
+    file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
+   "
+
+SRC_URI += "\
+    file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+SRC_URI[sha256sum] = "7a574bbc20802ea76b52ca7faf07267f72045e861b18915c5272a98c27abf884"
+
+
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
index 41ee8bc..88c7e45 100644
--- a/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
+++ b/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
@@ -1,9 +1,9 @@
 
 # Auto-generated CVE metadata, DO NOT EDIT BY HAND.
-# Generated at 2023-09-07 15:29:54.983415+00:00 for version 6.1.51
+# Generated at 2023-09-30 07:26:16.988526+00:00 for version 6.1.55
 
 python check_kernel_cve_status_version() {
-    this_version = "6.1.51"
+    this_version = "6.1.55"
     kernel_version = d.getVar("LINUX_VERSION")
     if kernel_version != this_version:
         bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
@@ -3450,6 +3450,8 @@
 
 CVE_STATUS[CVE-2020-36694] = "fixed-version: Fixed from version 5.10"
 
+CVE_STATUS[CVE-2020-36766] = "fixed-version: Fixed from version 5.9rc1"
+
 CVE_STATUS[CVE-2020-3702] = "fixed-version: Fixed from version 5.12rc1"
 
 CVE_STATUS[CVE-2020-4788] = "fixed-version: Fixed from version 5.10rc5"
@@ -4518,9 +4520,9 @@
 
 CVE_STATUS[CVE-2022-43945] = "fixed-version: Fixed from version 6.1rc1"
 
-# CVE-2022-44032 has no known resolution
+# CVE-2022-44032 needs backporting (fixed from 6.4rc1)
 
-# CVE-2022-44033 has no known resolution
+# CVE-2022-44033 needs backporting (fixed from 6.4rc1)
 
 # CVE-2022-44034 has no known resolution
 
@@ -4532,13 +4534,13 @@
 
 # CVE-2022-45885 has no known resolution
 
-# CVE-2022-45886 has no known resolution
+CVE_STATUS[CVE-2022-45886] = "cpe-stable-backport: Backported in 6.1.33"
 
-# CVE-2022-45887 has no known resolution
+CVE_STATUS[CVE-2022-45887] = "cpe-stable-backport: Backported in 6.1.33"
 
 # CVE-2022-45888 needs backporting (fixed from 6.2rc1)
 
-# CVE-2022-45919 has no known resolution
+CVE_STATUS[CVE-2022-45919] = "cpe-stable-backport: Backported in 6.1.33"
 
 CVE_STATUS[CVE-2022-45934] = "fixed-version: Fixed from version 6.1"
 
@@ -4644,7 +4646,7 @@
 
 # CVE-2023-1193 has no known resolution
 
-# CVE-2023-1194 has no known resolution
+CVE_STATUS[CVE-2023-1194] = "cpe-stable-backport: Backported in 6.1.34"
 
 CVE_STATUS[CVE-2023-1195] = "fixed-version: Fixed from version 6.1rc3"
 
@@ -4786,7 +4788,7 @@
 
 CVE_STATUS[CVE-2023-23586] = "fixed-version: Fixed from version 5.12rc1"
 
-# CVE-2023-2430 needs backporting (fixed from 6.2rc5)
+CVE_STATUS[CVE-2023-2430] = "cpe-stable-backport: Backported in 6.1.50"
 
 CVE_STATUS[CVE-2023-2483] = "cpe-stable-backport: Backported in 6.1.22"
 
@@ -4794,6 +4796,8 @@
 
 CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
 
+CVE_STATUS[CVE-2023-25775] = "cpe-stable-backport: Backported in 6.1.53"
+
 CVE_STATUS[CVE-2023-2598] = "fixed-version: only affects 6.3rc1 onwards"
 
 # CVE-2023-26242 has no known resolution
@@ -4848,7 +4852,7 @@
 
 # CVE-2023-31082 has no known resolution
 
-# CVE-2023-31083 has no known resolution
+# CVE-2023-31083 needs backporting (fixed from 6.6rc1)
 
 # CVE-2023-31084 needs backporting (fixed from 6.4rc3)
 
@@ -4962,7 +4966,7 @@
 
 # CVE-2023-3640 has no known resolution
 
-# CVE-2023-37453 has no known resolution
+CVE_STATUS[CVE-2023-37453] = "fixed-version: only affects 6.3rc1 onwards"
 
 # CVE-2023-37454 has no known resolution
 
@@ -4972,6 +4976,8 @@
 
 CVE_STATUS[CVE-2023-3776] = "cpe-stable-backport: Backported in 6.1.40"
 
+CVE_STATUS[CVE-2023-3777] = "cpe-stable-backport: Backported in 6.1.42"
+
 CVE_STATUS[CVE-2023-3812] = "fixed-version: Fixed from version 6.1rc4"
 
 CVE_STATUS[CVE-2023-38409] = "cpe-stable-backport: Backported in 6.1.25"
@@ -4992,10 +4998,18 @@
 
 CVE_STATUS[CVE-2023-3863] = "cpe-stable-backport: Backported in 6.1.39"
 
+CVE_STATUS[CVE-2023-3865] = "cpe-stable-backport: Backported in 6.1.36"
+
+CVE_STATUS[CVE-2023-3866] = "cpe-stable-backport: Backported in 6.1.36"
+
+CVE_STATUS[CVE-2023-3867] = "cpe-stable-backport: Backported in 6.1.40"
+
 CVE_STATUS[CVE-2023-4004] = "cpe-stable-backport: Backported in 6.1.42"
 
 # CVE-2023-4010 has no known resolution
 
+CVE_STATUS[CVE-2023-4015] = "cpe-stable-backport: Backported in 6.1.43"
+
 CVE_STATUS[CVE-2023-40283] = "cpe-stable-backport: Backported in 6.1.45"
 
 CVE_STATUS[CVE-2023-4128] = "cpe-stable-backport: Backported in 6.1.45"
@@ -5012,8 +5026,22 @@
 
 CVE_STATUS[CVE-2023-4194] = "fixed-version: only affects 6.3rc1 onwards"
 
+CVE_STATUS[CVE-2023-4206] = "cpe-stable-backport: Backported in 6.1.45"
+
+CVE_STATUS[CVE-2023-4207] = "cpe-stable-backport: Backported in 6.1.45"
+
+CVE_STATUS[CVE-2023-4208] = "cpe-stable-backport: Backported in 6.1.45"
+
+# CVE-2023-4244 needs backporting (fixed from 6.5rc7)
+
 CVE_STATUS[CVE-2023-4273] = "cpe-stable-backport: Backported in 6.1.45"
 
+CVE_STATUS[CVE-2023-42752] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-42753] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-42755] = "cpe-stable-backport: Backported in 6.1.55"
+
 CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
 
 CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
@@ -5024,3 +5052,21 @@
 
 CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
 
+# CVE-2023-4563 needs backporting (fixed from 6.5rc6)
+
+CVE_STATUS[CVE-2023-4569] = "cpe-stable-backport: Backported in 6.1.47"
+
+CVE_STATUS[CVE-2023-4611] = "fixed-version: only affects 6.4rc1 onwards"
+
+# CVE-2023-4622 needs backporting (fixed from 6.5rc1)
+
+CVE_STATUS[CVE-2023-4623] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-4881] = "cpe-stable-backport: Backported in 6.1.54"
+
+CVE_STATUS[CVE-2023-4921] = "cpe-stable-backport: Backported in 6.1.54"
+
+# CVE-2023-5158 has no known resolution
+
+# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
+
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc
index 5a5eb9a..eacb706 100644
--- a/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc
+++ b/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc
@@ -1,9 +1,9 @@
 
 # Auto-generated CVE metadata, DO NOT EDIT BY HAND.
-# Generated at 2023-09-07 15:30:03.897686+00:00 for version 6.4.14
+# Generated at 2023-09-30 07:24:59.900581+00:00 for version 6.4.16
 
 python check_kernel_cve_status_version() {
-    this_version = "6.4.14"
+    this_version = "6.4.16"
     kernel_version = d.getVar("LINUX_VERSION")
     if kernel_version != this_version:
         bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
@@ -3450,6 +3450,8 @@
 
 CVE_STATUS[CVE-2020-36694] = "fixed-version: Fixed from version 5.10"
 
+CVE_STATUS[CVE-2020-36766] = "fixed-version: Fixed from version 5.9rc1"
+
 CVE_STATUS[CVE-2020-3702] = "fixed-version: Fixed from version 5.12rc1"
 
 CVE_STATUS[CVE-2020-4788] = "fixed-version: Fixed from version 5.10rc5"
@@ -4518,9 +4520,9 @@
 
 CVE_STATUS[CVE-2022-43945] = "fixed-version: Fixed from version 6.1rc1"
 
-# CVE-2022-44032 has no known resolution
+CVE_STATUS[CVE-2022-44032] = "fixed-version: Fixed from version 6.4rc1"
 
-# CVE-2022-44033 has no known resolution
+CVE_STATUS[CVE-2022-44033] = "fixed-version: Fixed from version 6.4rc1"
 
 # CVE-2022-44034 has no known resolution
 
@@ -4532,13 +4534,13 @@
 
 # CVE-2022-45885 has no known resolution
 
-# CVE-2022-45886 has no known resolution
+CVE_STATUS[CVE-2022-45886] = "fixed-version: Fixed from version 6.4rc3"
 
-# CVE-2022-45887 has no known resolution
+CVE_STATUS[CVE-2022-45887] = "fixed-version: Fixed from version 6.4rc3"
 
 CVE_STATUS[CVE-2022-45888] = "fixed-version: Fixed from version 6.2rc1"
 
-# CVE-2022-45919 has no known resolution
+CVE_STATUS[CVE-2022-45919] = "fixed-version: Fixed from version 6.4rc3"
 
 CVE_STATUS[CVE-2022-45934] = "fixed-version: Fixed from version 6.1"
 
@@ -4644,7 +4646,7 @@
 
 # CVE-2023-1193 has no known resolution
 
-# CVE-2023-1194 has no known resolution
+CVE_STATUS[CVE-2023-1194] = "fixed-version: Fixed from version 6.4rc6"
 
 CVE_STATUS[CVE-2023-1195] = "fixed-version: Fixed from version 6.1rc3"
 
@@ -4794,6 +4796,8 @@
 
 CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
 
+CVE_STATUS[CVE-2023-25775] = "cpe-stable-backport: Backported in 6.4.16"
+
 CVE_STATUS[CVE-2023-2598] = "fixed-version: Fixed from version 6.4rc1"
 
 # CVE-2023-26242 has no known resolution
@@ -4848,7 +4852,7 @@
 
 # CVE-2023-31082 has no known resolution
 
-# CVE-2023-31083 has no known resolution
+# CVE-2023-31083 needs backporting (fixed from 6.6rc1)
 
 CVE_STATUS[CVE-2023-31084] = "fixed-version: Fixed from version 6.4rc3"
 
@@ -4962,7 +4966,7 @@
 
 # CVE-2023-3640 has no known resolution
 
-# CVE-2023-37453 has no known resolution
+CVE_STATUS[CVE-2023-37453] = "cpe-stable-backport: Backported in 6.4.16"
 
 # CVE-2023-37454 has no known resolution
 
@@ -4972,6 +4976,8 @@
 
 CVE_STATUS[CVE-2023-3776] = "cpe-stable-backport: Backported in 6.4.5"
 
+CVE_STATUS[CVE-2023-3777] = "cpe-stable-backport: Backported in 6.4.7"
+
 CVE_STATUS[CVE-2023-3812] = "fixed-version: Fixed from version 6.1rc4"
 
 CVE_STATUS[CVE-2023-38409] = "fixed-version: Fixed from version 6.3rc7"
@@ -4992,10 +4998,18 @@
 
 CVE_STATUS[CVE-2023-3863] = "cpe-stable-backport: Backported in 6.4.4"
 
+CVE_STATUS[CVE-2023-3865] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3866] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3867] = "cpe-stable-backport: Backported in 6.4.5"
+
 CVE_STATUS[CVE-2023-4004] = "cpe-stable-backport: Backported in 6.4.7"
 
 # CVE-2023-4010 has no known resolution
 
+CVE_STATUS[CVE-2023-4015] = "cpe-stable-backport: Backported in 6.4.8"
+
 CVE_STATUS[CVE-2023-40283] = "cpe-stable-backport: Backported in 6.4.10"
 
 CVE_STATUS[CVE-2023-4128] = "cpe-stable-backport: Backported in 6.4.10"
@@ -5012,8 +5026,22 @@
 
 CVE_STATUS[CVE-2023-4194] = "cpe-stable-backport: Backported in 6.4.10"
 
+CVE_STATUS[CVE-2023-4206] = "cpe-stable-backport: Backported in 6.4.10"
+
+CVE_STATUS[CVE-2023-4207] = "cpe-stable-backport: Backported in 6.4.10"
+
+CVE_STATUS[CVE-2023-4208] = "cpe-stable-backport: Backported in 6.4.10"
+
+CVE_STATUS[CVE-2023-4244] = "cpe-stable-backport: Backported in 6.4.12"
+
 CVE_STATUS[CVE-2023-4273] = "cpe-stable-backport: Backported in 6.4.10"
 
+CVE_STATUS[CVE-2023-42752] = "cpe-stable-backport: Backported in 6.4.16"
+
+CVE_STATUS[CVE-2023-42753] = "cpe-stable-backport: Backported in 6.4.16"
+
+CVE_STATUS[CVE-2023-42755] = "fixed-version: Fixed from version 6.3rc1"
+
 CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
 
 CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
@@ -5024,3 +5052,21 @@
 
 CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
 
+CVE_STATUS[CVE-2023-4563] = "cpe-stable-backport: Backported in 6.4.11"
+
+CVE_STATUS[CVE-2023-4569] = "cpe-stable-backport: Backported in 6.4.12"
+
+CVE_STATUS[CVE-2023-4611] = "cpe-stable-backport: Backported in 6.4.8"
+
+# CVE-2023-4622 needs backporting (fixed from 6.5rc1)
+
+CVE_STATUS[CVE-2023-4623] = "cpe-stable-backport: Backported in 6.4.16"
+
+# CVE-2023-4881 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-4921 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-5158 has no known resolution
+
+# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
+
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc
new file mode 100644
index 0000000..c88b6f7
--- /dev/null
+++ b/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc
@@ -0,0 +1,5072 @@
+
+# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
+# Generated at 2023-09-29 00:20:42.494116+00:00 for version 6.5.5
+
+python check_kernel_cve_status_version() {
+    this_version = "6.5.5"
+    kernel_version = d.getVar("LINUX_VERSION")
+    if kernel_version != this_version:
+        bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
+}
+do_cve_check[prefuncs] += "check_kernel_cve_status_version"
+
+CVE_STATUS[CVE-2003-1604] = "fixed-version: Fixed from version 2.6.12rc2"
+
+CVE_STATUS[CVE-2004-0230] = "fixed-version: Fixed from version 3.6rc1"
+
+# CVE-2005-3660 has no known resolution
+
+CVE_STATUS[CVE-2006-3635] = "fixed-version: Fixed from version 2.6.26rc5"
+
+CVE_STATUS[CVE-2006-5331] = "fixed-version: Fixed from version 2.6.19rc3"
+
+CVE_STATUS[CVE-2006-6128] = "fixed-version: Fixed from version 2.6.19rc2"
+
+# CVE-2007-3719 has no known resolution
+
+CVE_STATUS[CVE-2007-4774] = "fixed-version: Fixed from version 2.6.12rc2"
+
+CVE_STATUS[CVE-2007-6761] = "fixed-version: Fixed from version 2.6.24rc6"
+
+CVE_STATUS[CVE-2007-6762] = "fixed-version: Fixed from version 2.6.20rc5"
+
+# CVE-2008-2544 has no known resolution
+
+# CVE-2008-4609 has no known resolution
+
+CVE_STATUS[CVE-2008-7316] = "fixed-version: Fixed from version 2.6.25rc1"
+
+CVE_STATUS[CVE-2009-2692] = "fixed-version: Fixed from version 2.6.31rc6"
+
+CVE_STATUS[CVE-2010-0008] = "fixed-version: Fixed from version 2.6.23rc9"
+
+CVE_STATUS[CVE-2010-3432] = "fixed-version: Fixed from version 2.6.36rc5"
+
+# CVE-2010-4563 has no known resolution
+
+CVE_STATUS[CVE-2010-4648] = "fixed-version: Fixed from version 2.6.37rc6"
+
+CVE_STATUS[CVE-2010-5313] = "fixed-version: Fixed from version 2.6.38rc1"
+
+# CVE-2010-5321 has no known resolution
+
+CVE_STATUS[CVE-2010-5328] = "fixed-version: Fixed from version 2.6.35rc1"
+
+CVE_STATUS[CVE-2010-5329] = "fixed-version: Fixed from version 2.6.39rc1"
+
+CVE_STATUS[CVE-2010-5331] = "fixed-version: Fixed from version 2.6.34rc7"
+
+CVE_STATUS[CVE-2010-5332] = "fixed-version: Fixed from version 2.6.37rc1"
+
+CVE_STATUS[CVE-2011-4098] = "fixed-version: Fixed from version 3.2rc1"
+
+CVE_STATUS[CVE-2011-4131] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2011-4915] = "fixed-version: Fixed from version 3.2rc1"
+
+# CVE-2011-4916 has no known resolution
+
+# CVE-2011-4917 has no known resolution
+
+CVE_STATUS[CVE-2011-5321] = "fixed-version: Fixed from version 3.2rc1"
+
+CVE_STATUS[CVE-2011-5327] = "fixed-version: Fixed from version 3.1rc1"
+
+CVE_STATUS[CVE-2012-0957] = "fixed-version: Fixed from version 3.7rc2"
+
+CVE_STATUS[CVE-2012-2119] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2136] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2137] = "fixed-version: Fixed from version 3.5rc2"
+
+CVE_STATUS[CVE-2012-2313] = "fixed-version: Fixed from version 3.4rc6"
+
+CVE_STATUS[CVE-2012-2319] = "fixed-version: Fixed from version 3.4rc6"
+
+CVE_STATUS[CVE-2012-2372] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2012-2375] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2012-2390] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-2669] = "fixed-version: Fixed from version 3.5rc4"
+
+CVE_STATUS[CVE-2012-2744] = "fixed-version: Fixed from version 2.6.34rc1"
+
+CVE_STATUS[CVE-2012-2745] = "fixed-version: Fixed from version 3.4rc3"
+
+CVE_STATUS[CVE-2012-3364] = "fixed-version: Fixed from version 3.5rc6"
+
+CVE_STATUS[CVE-2012-3375] = "fixed-version: Fixed from version 3.4rc5"
+
+CVE_STATUS[CVE-2012-3400] = "fixed-version: Fixed from version 3.5rc5"
+
+CVE_STATUS[CVE-2012-3412] = "fixed-version: Fixed from version 3.6rc2"
+
+CVE_STATUS[CVE-2012-3430] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-3510] = "fixed-version: Fixed from version 2.6.19rc4"
+
+CVE_STATUS[CVE-2012-3511] = "fixed-version: Fixed from version 3.5rc6"
+
+CVE_STATUS[CVE-2012-3520] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-3552] = "fixed-version: Fixed from version 3.0rc1"
+
+# Skipping CVE-2012-4220, no affected_versions
+
+# Skipping CVE-2012-4221, no affected_versions
+
+# Skipping CVE-2012-4222, no affected_versions
+
+CVE_STATUS[CVE-2012-4398] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2012-4444] = "fixed-version: Fixed from version 2.6.36rc4"
+
+CVE_STATUS[CVE-2012-4461] = "fixed-version: Fixed from version 3.7rc6"
+
+CVE_STATUS[CVE-2012-4467] = "fixed-version: Fixed from version 3.6rc5"
+
+CVE_STATUS[CVE-2012-4508] = "fixed-version: Fixed from version 3.7rc3"
+
+CVE_STATUS[CVE-2012-4530] = "fixed-version: Fixed from version 3.8rc1"
+
+# CVE-2012-4542 has no known resolution
+
+CVE_STATUS[CVE-2012-4565] = "fixed-version: Fixed from version 3.7rc4"
+
+CVE_STATUS[CVE-2012-5374] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2012-5375] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2012-5517] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6536] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6537] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6538] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2012-6539] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6540] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6541] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6542] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6543] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6544] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6545] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6546] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2012-6547] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6548] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6549] = "fixed-version: Fixed from version 3.6rc1"
+
+CVE_STATUS[CVE-2012-6638] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2012-6647] = "fixed-version: Fixed from version 3.6rc2"
+
+CVE_STATUS[CVE-2012-6657] = "fixed-version: Fixed from version 3.6"
+
+CVE_STATUS[CVE-2012-6689] = "fixed-version: Fixed from version 3.6rc5"
+
+CVE_STATUS[CVE-2012-6701] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-6703] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2012-6704] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2012-6712] = "fixed-version: Fixed from version 3.4rc1"
+
+CVE_STATUS[CVE-2013-0160] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-0190] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0216] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0217] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0228] = "fixed-version: Fixed from version 3.8"
+
+CVE_STATUS[CVE-2013-0231] = "fixed-version: Fixed from version 3.8rc7"
+
+CVE_STATUS[CVE-2013-0268] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-0290] = "fixed-version: Fixed from version 3.8"
+
+CVE_STATUS[CVE-2013-0309] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2013-0310] = "fixed-version: Fixed from version 3.5"
+
+CVE_STATUS[CVE-2013-0311] = "fixed-version: Fixed from version 3.7rc8"
+
+CVE_STATUS[CVE-2013-0313] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0343] = "fixed-version: Fixed from version 3.11rc7"
+
+CVE_STATUS[CVE-2013-0349] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-0871] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-0913] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-0914] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1059] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-1763] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-1767] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-1772] = "fixed-version: Fixed from version 3.5rc1"
+
+CVE_STATUS[CVE-2013-1773] = "fixed-version: Fixed from version 3.3rc1"
+
+CVE_STATUS[CVE-2013-1774] = "fixed-version: Fixed from version 3.8rc5"
+
+CVE_STATUS[CVE-2013-1792] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1796] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1797] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1798] = "fixed-version: Fixed from version 3.9rc4"
+
+CVE_STATUS[CVE-2013-1819] = "fixed-version: Fixed from version 3.8rc6"
+
+CVE_STATUS[CVE-2013-1826] = "fixed-version: Fixed from version 3.6rc7"
+
+CVE_STATUS[CVE-2013-1827] = "fixed-version: Fixed from version 3.6rc3"
+
+CVE_STATUS[CVE-2013-1828] = "fixed-version: Fixed from version 3.9rc2"
+
+CVE_STATUS[CVE-2013-1848] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1858] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1860] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-1928] = "fixed-version: Fixed from version 3.7rc3"
+
+CVE_STATUS[CVE-2013-1929] = "fixed-version: Fixed from version 3.9rc6"
+
+# Skipping CVE-2013-1935, no affected_versions
+
+CVE_STATUS[CVE-2013-1943] = "fixed-version: Fixed from version 3.0rc1"
+
+CVE_STATUS[CVE-2013-1956] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1957] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1958] = "fixed-version: Fixed from version 3.9rc5"
+
+CVE_STATUS[CVE-2013-1959] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-1979] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2015] = "fixed-version: Fixed from version 3.8rc2"
+
+CVE_STATUS[CVE-2013-2017] = "fixed-version: Fixed from version 2.6.34"
+
+CVE_STATUS[CVE-2013-2058] = "fixed-version: Fixed from version 3.8rc4"
+
+CVE_STATUS[CVE-2013-2094] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2128] = "fixed-version: Fixed from version 2.6.34rc4"
+
+CVE_STATUS[CVE-2013-2140] = "fixed-version: Fixed from version 3.11rc3"
+
+CVE_STATUS[CVE-2013-2141] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2146] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2147] = "fixed-version: Fixed from version 3.12rc3"
+
+CVE_STATUS[CVE-2013-2148] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-2164] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2013-2188, no affected_versions
+
+CVE_STATUS[CVE-2013-2206] = "fixed-version: Fixed from version 3.9rc4"
+
+# Skipping CVE-2013-2224, no affected_versions
+
+CVE_STATUS[CVE-2013-2232] = "fixed-version: Fixed from version 3.10"
+
+CVE_STATUS[CVE-2013-2234] = "fixed-version: Fixed from version 3.10"
+
+CVE_STATUS[CVE-2013-2237] = "fixed-version: Fixed from version 3.9rc6"
+
+# Skipping CVE-2013-2239, no affected_versions
+
+CVE_STATUS[CVE-2013-2546] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2547] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2548] = "fixed-version: Fixed from version 3.9rc1"
+
+CVE_STATUS[CVE-2013-2596] = "fixed-version: Fixed from version 3.9rc8"
+
+CVE_STATUS[CVE-2013-2634] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2635] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2636] = "fixed-version: Fixed from version 3.9rc3"
+
+CVE_STATUS[CVE-2013-2850] = "fixed-version: Fixed from version 3.10rc4"
+
+CVE_STATUS[CVE-2013-2851] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-2852] = "fixed-version: Fixed from version 3.10rc6"
+
+CVE_STATUS[CVE-2013-2888] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2889] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2890] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2891] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2892] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2893] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2894] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2895] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2896] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2897] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-2898] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2899] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-2929] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-2930] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-3076] = "fixed-version: Fixed from version 3.9"
+
+CVE_STATUS[CVE-2013-3222] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3223] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3224] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3225] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3226] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3227] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3228] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3229] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3230] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3231] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3232] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3233] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3234] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3235] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3236] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3237] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3301] = "fixed-version: Fixed from version 3.9rc7"
+
+CVE_STATUS[CVE-2013-3302] = "fixed-version: Fixed from version 3.8rc3"
+
+CVE_STATUS[CVE-2013-4125] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4127] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4129] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4162] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4163] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2013-4205] = "fixed-version: Fixed from version 3.11rc5"
+
+CVE_STATUS[CVE-2013-4220] = "fixed-version: Fixed from version 3.10rc4"
+
+CVE_STATUS[CVE-2013-4247] = "fixed-version: Fixed from version 3.10rc5"
+
+CVE_STATUS[CVE-2013-4254] = "fixed-version: Fixed from version 3.11rc6"
+
+CVE_STATUS[CVE-2013-4270] = "fixed-version: Fixed from version 3.12rc4"
+
+CVE_STATUS[CVE-2013-4299] = "fixed-version: Fixed from version 3.12rc6"
+
+CVE_STATUS[CVE-2013-4300] = "fixed-version: Fixed from version 3.11"
+
+CVE_STATUS[CVE-2013-4312] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2013-4343] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-4345] = "fixed-version: Fixed from version 3.13rc2"
+
+CVE_STATUS[CVE-2013-4348] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-4350] = "fixed-version: Fixed from version 3.12rc2"
+
+CVE_STATUS[CVE-2013-4387] = "fixed-version: Fixed from version 3.12rc4"
+
+CVE_STATUS[CVE-2013-4470] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2013-4483] = "fixed-version: Fixed from version 3.10rc1"
+
+CVE_STATUS[CVE-2013-4511] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4512] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4513] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4514] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4515] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4516] = "fixed-version: Fixed from version 3.12"
+
+CVE_STATUS[CVE-2013-4563] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-4579] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2013-4587] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-4588] = "fixed-version: Fixed from version 2.6.33rc4"
+
+CVE_STATUS[CVE-2013-4591] = "fixed-version: Fixed from version 3.8rc1"
+
+CVE_STATUS[CVE-2013-4592] = "fixed-version: Fixed from version 3.7rc1"
+
+# Skipping CVE-2013-4737, no affected_versions
+
+# Skipping CVE-2013-4738, no affected_versions
+
+# Skipping CVE-2013-4739, no affected_versions
+
+CVE_STATUS[CVE-2013-5634] = "fixed-version: Fixed from version 3.10rc5"
+
+CVE_STATUS[CVE-2013-6282] = "fixed-version: Fixed from version 3.6rc6"
+
+CVE_STATUS[CVE-2013-6367] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6368] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6376] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6378] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6380] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6381] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6382] = "fixed-version: Fixed from version 3.13rc4"
+
+CVE_STATUS[CVE-2013-6383] = "fixed-version: Fixed from version 3.12"
+
+# Skipping CVE-2013-6392, no affected_versions
+
+CVE_STATUS[CVE-2013-6431] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2013-6432] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-6885] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2013-7026] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7027] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2013-7263] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7264] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7265] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7266] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7267] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7268] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7269] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7270] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7271] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7281] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7339] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2013-7348] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2013-7421] = "fixed-version: Fixed from version 3.19rc1"
+
+# CVE-2013-7445 has no known resolution
+
+CVE_STATUS[CVE-2013-7446] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2013-7470] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-0038] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-0049] = "fixed-version: Fixed from version 3.14rc5"
+
+CVE_STATUS[CVE-2014-0055] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-0069] = "fixed-version: Fixed from version 3.14rc4"
+
+CVE_STATUS[CVE-2014-0077] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-0100] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-0101] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-0102] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-0131] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-0155] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-0181] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-0196] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-0203] = "fixed-version: Fixed from version 2.6.33rc5"
+
+CVE_STATUS[CVE-2014-0205] = "fixed-version: Fixed from version 2.6.37rc1"
+
+CVE_STATUS[CVE-2014-0206] = "fixed-version: Fixed from version 3.16rc3"
+
+# Skipping CVE-2014-0972, no affected_versions
+
+CVE_STATUS[CVE-2014-1438] = "fixed-version: Fixed from version 3.13"
+
+CVE_STATUS[CVE-2014-1444] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-1445] = "fixed-version: Fixed from version 3.12rc7"
+
+CVE_STATUS[CVE-2014-1446] = "fixed-version: Fixed from version 3.13rc7"
+
+CVE_STATUS[CVE-2014-1690] = "fixed-version: Fixed from version 3.13rc8"
+
+CVE_STATUS[CVE-2014-1737] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-1738] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2014-1739] = "fixed-version: Fixed from version 3.15rc6"
+
+CVE_STATUS[CVE-2014-1874] = "fixed-version: Fixed from version 3.14rc2"
+
+CVE_STATUS[CVE-2014-2038] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-2039] = "fixed-version: Fixed from version 3.14rc3"
+
+CVE_STATUS[CVE-2014-2309] = "fixed-version: Fixed from version 3.14rc7"
+
+CVE_STATUS[CVE-2014-2523] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-2568] = "fixed-version: Fixed from version 3.14"
+
+CVE_STATUS[CVE-2014-2580] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2672] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2673] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2678] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2706] = "fixed-version: Fixed from version 3.14rc6"
+
+CVE_STATUS[CVE-2014-2739] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-2851] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-2889] = "fixed-version: Fixed from version 3.2rc7"
+
+CVE_STATUS[CVE-2014-3122] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-3144] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-3145] = "fixed-version: Fixed from version 3.15rc2"
+
+CVE_STATUS[CVE-2014-3153] = "fixed-version: Fixed from version 3.15"
+
+CVE_STATUS[CVE-2014-3180] = "fixed-version: Fixed from version 3.17rc4"
+
+CVE_STATUS[CVE-2014-3181] = "fixed-version: Fixed from version 3.17rc3"
+
+CVE_STATUS[CVE-2014-3182] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3183] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3184] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3185] = "fixed-version: Fixed from version 3.17rc3"
+
+CVE_STATUS[CVE-2014-3186] = "fixed-version: Fixed from version 3.17rc3"
+
+# Skipping CVE-2014-3519, no affected_versions
+
+CVE_STATUS[CVE-2014-3534] = "fixed-version: Fixed from version 3.16rc7"
+
+CVE_STATUS[CVE-2014-3535] = "fixed-version: Fixed from version 2.6.36rc1"
+
+CVE_STATUS[CVE-2014-3601] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-3610] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3611] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3631] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-3645] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2014-3646] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3647] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-3673] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3687] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3688] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3690] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-3917] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-3940] = "fixed-version: Fixed from version 3.15"
+
+CVE_STATUS[CVE-2014-4014] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-4027] = "fixed-version: Fixed from version 3.14rc1"
+
+CVE_STATUS[CVE-2014-4157] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-4171] = "fixed-version: Fixed from version 3.16rc3"
+
+# Skipping CVE-2014-4322, no affected_versions
+
+# Skipping CVE-2014-4323, no affected_versions
+
+CVE_STATUS[CVE-2014-4508] = "fixed-version: Fixed from version 3.16rc3"
+
+CVE_STATUS[CVE-2014-4608] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-4611] = "fixed-version: Fixed from version 3.16rc3"
+
+CVE_STATUS[CVE-2014-4652] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4653] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4654] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4655] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4656] = "fixed-version: Fixed from version 3.16rc2"
+
+CVE_STATUS[CVE-2014-4667] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-4699] = "fixed-version: Fixed from version 3.16rc4"
+
+CVE_STATUS[CVE-2014-4943] = "fixed-version: Fixed from version 3.16rc6"
+
+CVE_STATUS[CVE-2014-5045] = "fixed-version: Fixed from version 3.16rc7"
+
+CVE_STATUS[CVE-2014-5077] = "fixed-version: Fixed from version 3.16"
+
+CVE_STATUS[CVE-2014-5206] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2014-5207] = "fixed-version: Fixed from version 3.17rc1"
+
+# Skipping CVE-2014-5332, no affected_versions
+
+CVE_STATUS[CVE-2014-5471] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-5472] = "fixed-version: Fixed from version 3.17rc2"
+
+CVE_STATUS[CVE-2014-6410] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6416] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6417] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-6418] = "fixed-version: Fixed from version 3.17rc5"
+
+CVE_STATUS[CVE-2014-7145] = "fixed-version: Fixed from version 3.17rc2"
+
+# Skipping CVE-2014-7207, no affected_versions
+
+CVE_STATUS[CVE-2014-7283] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-7284] = "fixed-version: Fixed from version 3.15rc7"
+
+CVE_STATUS[CVE-2014-7822] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-7825] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-7826] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-7841] = "fixed-version: Fixed from version 3.18rc5"
+
+CVE_STATUS[CVE-2014-7842] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-7843] = "fixed-version: Fixed from version 3.18rc5"
+
+CVE_STATUS[CVE-2014-7970] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-7975] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8086] = "fixed-version: Fixed from version 3.18rc3"
+
+CVE_STATUS[CVE-2014-8133] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8134] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8159] = "fixed-version: Fixed from version 4.0rc7"
+
+CVE_STATUS[CVE-2014-8160] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8171] = "fixed-version: Fixed from version 3.12rc1"
+
+CVE_STATUS[CVE-2014-8172] = "fixed-version: Fixed from version 3.13rc1"
+
+CVE_STATUS[CVE-2014-8173] = "fixed-version: Fixed from version 3.13rc5"
+
+# Skipping CVE-2014-8181, no affected_versions
+
+CVE_STATUS[CVE-2014-8369] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8480] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8481] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-8559] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-8709] = "fixed-version: Fixed from version 3.14rc3"
+
+CVE_STATUS[CVE-2014-8884] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2014-8989] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9090] = "fixed-version: Fixed from version 3.18rc6"
+
+CVE_STATUS[CVE-2014-9322] = "fixed-version: Fixed from version 3.18rc6"
+
+CVE_STATUS[CVE-2014-9419] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9420] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9428] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9529] = "fixed-version: Fixed from version 3.19rc4"
+
+CVE_STATUS[CVE-2014-9584] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9585] = "fixed-version: Fixed from version 3.19rc4"
+
+CVE_STATUS[CVE-2014-9644] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9683] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9710] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2014-9715] = "fixed-version: Fixed from version 3.15rc1"
+
+CVE_STATUS[CVE-2014-9717] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2014-9728] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9729] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9730] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2014-9731] = "fixed-version: Fixed from version 3.19rc3"
+
+# Skipping CVE-2014-9777, no affected_versions
+
+# Skipping CVE-2014-9778, no affected_versions
+
+# Skipping CVE-2014-9779, no affected_versions
+
+# Skipping CVE-2014-9780, no affected_versions
+
+# Skipping CVE-2014-9781, no affected_versions
+
+# Skipping CVE-2014-9782, no affected_versions
+
+# Skipping CVE-2014-9783, no affected_versions
+
+# Skipping CVE-2014-9784, no affected_versions
+
+# Skipping CVE-2014-9785, no affected_versions
+
+# Skipping CVE-2014-9786, no affected_versions
+
+# Skipping CVE-2014-9787, no affected_versions
+
+# Skipping CVE-2014-9788, no affected_versions
+
+# Skipping CVE-2014-9789, no affected_versions
+
+CVE_STATUS[CVE-2014-9803] = "fixed-version: Fixed from version 3.16rc1"
+
+# Skipping CVE-2014-9863, no affected_versions
+
+# Skipping CVE-2014-9864, no affected_versions
+
+# Skipping CVE-2014-9865, no affected_versions
+
+# Skipping CVE-2014-9866, no affected_versions
+
+# Skipping CVE-2014-9867, no affected_versions
+
+# Skipping CVE-2014-9868, no affected_versions
+
+# Skipping CVE-2014-9869, no affected_versions
+
+CVE_STATUS[CVE-2014-9870] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2014-9871, no affected_versions
+
+# Skipping CVE-2014-9872, no affected_versions
+
+# Skipping CVE-2014-9873, no affected_versions
+
+# Skipping CVE-2014-9874, no affected_versions
+
+# Skipping CVE-2014-9875, no affected_versions
+
+# Skipping CVE-2014-9876, no affected_versions
+
+# Skipping CVE-2014-9877, no affected_versions
+
+# Skipping CVE-2014-9878, no affected_versions
+
+# Skipping CVE-2014-9879, no affected_versions
+
+# Skipping CVE-2014-9880, no affected_versions
+
+# Skipping CVE-2014-9881, no affected_versions
+
+# Skipping CVE-2014-9882, no affected_versions
+
+# Skipping CVE-2014-9883, no affected_versions
+
+# Skipping CVE-2014-9884, no affected_versions
+
+# Skipping CVE-2014-9885, no affected_versions
+
+# Skipping CVE-2014-9886, no affected_versions
+
+# Skipping CVE-2014-9887, no affected_versions
+
+CVE_STATUS[CVE-2014-9888] = "fixed-version: Fixed from version 3.13rc1"
+
+# Skipping CVE-2014-9889, no affected_versions
+
+# Skipping CVE-2014-9890, no affected_versions
+
+# Skipping CVE-2014-9891, no affected_versions
+
+# Skipping CVE-2014-9892, no affected_versions
+
+# Skipping CVE-2014-9893, no affected_versions
+
+# Skipping CVE-2014-9894, no affected_versions
+
+CVE_STATUS[CVE-2014-9895] = "fixed-version: Fixed from version 3.11rc1"
+
+# Skipping CVE-2014-9896, no affected_versions
+
+# Skipping CVE-2014-9897, no affected_versions
+
+# Skipping CVE-2014-9898, no affected_versions
+
+# Skipping CVE-2014-9899, no affected_versions
+
+# Skipping CVE-2014-9900, no affected_versions
+
+CVE_STATUS[CVE-2014-9903] = "fixed-version: Fixed from version 3.14rc4"
+
+CVE_STATUS[CVE-2014-9904] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2014-9914] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2014-9922] = "fixed-version: Fixed from version 3.18rc2"
+
+CVE_STATUS[CVE-2014-9940] = "fixed-version: Fixed from version 3.19rc1"
+
+CVE_STATUS[CVE-2015-0239] = "fixed-version: Fixed from version 3.19rc6"
+
+CVE_STATUS[CVE-2015-0274] = "fixed-version: Fixed from version 3.15rc5"
+
+CVE_STATUS[CVE-2015-0275] = "fixed-version: Fixed from version 4.1rc1"
+
+# Skipping CVE-2015-0777, no affected_versions
+
+# Skipping CVE-2015-1328, no affected_versions
+
+CVE_STATUS[CVE-2015-1333] = "fixed-version: Fixed from version 4.2rc5"
+
+CVE_STATUS[CVE-2015-1339] = "fixed-version: Fixed from version 4.4rc5"
+
+CVE_STATUS[CVE-2015-1350] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2015-1420] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-1421] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-1465] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-1573] = "fixed-version: Fixed from version 3.19rc5"
+
+CVE_STATUS[CVE-2015-1593] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-1805] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2015-2041] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-2042] = "fixed-version: Fixed from version 3.19"
+
+CVE_STATUS[CVE-2015-2150] = "fixed-version: Fixed from version 4.0rc4"
+
+CVE_STATUS[CVE-2015-2666] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-2672] = "fixed-version: Fixed from version 4.0rc3"
+
+CVE_STATUS[CVE-2015-2686] = "fixed-version: Fixed from version 4.0rc6"
+
+CVE_STATUS[CVE-2015-2830] = "fixed-version: Fixed from version 4.0rc3"
+
+# CVE-2015-2877 has no known resolution
+
+CVE_STATUS[CVE-2015-2922] = "fixed-version: Fixed from version 4.0rc7"
+
+CVE_STATUS[CVE-2015-2925] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-3212] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-3214] = "fixed-version: Fixed from version 2.6.33rc8"
+
+CVE_STATUS[CVE-2015-3288] = "fixed-version: Fixed from version 4.2rc2"
+
+CVE_STATUS[CVE-2015-3290] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-3291] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-3331] = "fixed-version: Fixed from version 4.0rc5"
+
+# Skipping CVE-2015-3332, no affected_versions
+
+CVE_STATUS[CVE-2015-3339] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-3636] = "fixed-version: Fixed from version 4.1rc2"
+
+CVE_STATUS[CVE-2015-4001] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4002] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4003] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-4004] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-4036] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-4167] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-4170] = "fixed-version: Fixed from version 3.13rc5"
+
+CVE_STATUS[CVE-2015-4176] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4177] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4178] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-4692] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-4700] = "fixed-version: Fixed from version 4.1rc6"
+
+CVE_STATUS[CVE-2015-5156] = "fixed-version: Fixed from version 4.2rc7"
+
+CVE_STATUS[CVE-2015-5157] = "fixed-version: Fixed from version 4.2rc3"
+
+CVE_STATUS[CVE-2015-5257] = "fixed-version: Fixed from version 4.3rc3"
+
+CVE_STATUS[CVE-2015-5283] = "fixed-version: Fixed from version 4.3rc3"
+
+CVE_STATUS[CVE-2015-5307] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-5327] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-5364] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-5366] = "fixed-version: Fixed from version 4.1rc7"
+
+CVE_STATUS[CVE-2015-5697] = "fixed-version: Fixed from version 4.2rc6"
+
+CVE_STATUS[CVE-2015-5706] = "fixed-version: Fixed from version 4.1rc3"
+
+CVE_STATUS[CVE-2015-5707] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-6252] = "fixed-version: Fixed from version 4.2rc5"
+
+CVE_STATUS[CVE-2015-6526] = "fixed-version: Fixed from version 4.1rc1"
+
+# CVE-2015-6619 has no known resolution
+
+# CVE-2015-6646 has no known resolution
+
+CVE_STATUS[CVE-2015-6937] = "fixed-version: Fixed from version 4.3rc1"
+
+# Skipping CVE-2015-7312, no affected_versions
+
+CVE_STATUS[CVE-2015-7509] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2015-7513] = "fixed-version: Fixed from version 4.4rc7"
+
+CVE_STATUS[CVE-2015-7515] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-7550] = "fixed-version: Fixed from version 4.4rc8"
+
+# Skipping CVE-2015-7553, no affected_versions
+
+CVE_STATUS[CVE-2015-7566] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2015-7613] = "fixed-version: Fixed from version 4.3rc4"
+
+CVE_STATUS[CVE-2015-7799] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7833] = "fixed-version: Fixed from version 4.6rc6"
+
+# Skipping CVE-2015-7837, no affected_versions
+
+CVE_STATUS[CVE-2015-7872] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2015-7884] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7885] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-7990] = "fixed-version: Fixed from version 4.4rc4"
+
+# Skipping CVE-2015-8019, no affected_versions
+
+CVE_STATUS[CVE-2015-8104] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8215] = "fixed-version: Fixed from version 4.0rc3"
+
+CVE_STATUS[CVE-2015-8324] = "fixed-version: Fixed from version 2.6.34rc1"
+
+CVE_STATUS[CVE-2015-8374] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8539] = "fixed-version: Fixed from version 4.4rc3"
+
+CVE_STATUS[CVE-2015-8543] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8550] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8551] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8552] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8553] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8569] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8575] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8660] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2015-8709] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2015-8746] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-8767] = "fixed-version: Fixed from version 4.3rc4"
+
+CVE_STATUS[CVE-2015-8785] = "fixed-version: Fixed from version 4.4rc5"
+
+CVE_STATUS[CVE-2015-8787] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8812] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8816] = "fixed-version: Fixed from version 4.4rc6"
+
+CVE_STATUS[CVE-2015-8830] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-8839] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8844] = "fixed-version: Fixed from version 4.4rc3"
+
+CVE_STATUS[CVE-2015-8845] = "fixed-version: Fixed from version 4.4rc3"
+
+# Skipping CVE-2015-8937, no affected_versions
+
+# Skipping CVE-2015-8938, no affected_versions
+
+# Skipping CVE-2015-8939, no affected_versions
+
+# Skipping CVE-2015-8940, no affected_versions
+
+# Skipping CVE-2015-8941, no affected_versions
+
+# Skipping CVE-2015-8942, no affected_versions
+
+# Skipping CVE-2015-8943, no affected_versions
+
+# Skipping CVE-2015-8944, no affected_versions
+
+CVE_STATUS[CVE-2015-8950] = "fixed-version: Fixed from version 4.1rc2"
+
+CVE_STATUS[CVE-2015-8952] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2015-8953] = "fixed-version: Fixed from version 4.3"
+
+CVE_STATUS[CVE-2015-8955] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2015-8956] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2015-8961] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8962] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2015-8963] = "fixed-version: Fixed from version 4.4"
+
+CVE_STATUS[CVE-2015-8964] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-8966] = "fixed-version: Fixed from version 4.4rc8"
+
+CVE_STATUS[CVE-2015-8967] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2015-8970] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2015-9004] = "fixed-version: Fixed from version 3.19rc7"
+
+CVE_STATUS[CVE-2015-9016] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2015-9289] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2016-0617] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-0723] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2016-0728] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-0758] = "fixed-version: Fixed from version 4.6"
+
+# Skipping CVE-2016-0774, no affected_versions
+
+CVE_STATUS[CVE-2016-0821] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2016-0823] = "fixed-version: Fixed from version 4.0rc5"
+
+CVE_STATUS[CVE-2016-10044] = "fixed-version: Fixed from version 4.8rc7"
+
+CVE_STATUS[CVE-2016-10088] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10147] = "fixed-version: Fixed from version 4.9"
+
+CVE_STATUS[CVE-2016-10150] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-10153] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10154] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10200] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-10208] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10229] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-10318] = "fixed-version: Fixed from version 4.8rc6"
+
+CVE_STATUS[CVE-2016-10723] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2016-10741] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10764] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-10905] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-10906] = "fixed-version: Fixed from version 4.5rc6"
+
+CVE_STATUS[CVE-2016-10907] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-1237] = "fixed-version: Fixed from version 4.7rc5"
+
+CVE_STATUS[CVE-2016-1575] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-1576] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-1583] = "fixed-version: Fixed from version 4.7rc3"
+
+CVE_STATUS[CVE-2016-2053] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2016-2069] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2070] = "fixed-version: Fixed from version 4.4"
+
+CVE_STATUS[CVE-2016-2085] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2117] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-2143] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-2184] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2185] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2186] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-2187] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-2188] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2016-2383] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2384] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2543] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2544] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2545] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2546] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2547] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2548] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2549] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2016-2550] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2016-2782] = "fixed-version: Fixed from version 4.5rc2"
+
+CVE_STATUS[CVE-2016-2847] = "fixed-version: Fixed from version 4.5rc1"
+
+# Skipping CVE-2016-2853, no affected_versions
+
+# Skipping CVE-2016-2854, no affected_versions
+
+CVE_STATUS[CVE-2016-3044] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-3070] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2016-3134] = "fixed-version: Fixed from version 4.6rc2"
+
+CVE_STATUS[CVE-2016-3135] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3136] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3137] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3138] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3139] = "fixed-version: Fixed from version 3.17rc1"
+
+CVE_STATUS[CVE-2016-3140] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3156] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3157] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3672] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-3689] = "fixed-version: Fixed from version 4.6rc1"
+
+# Skipping CVE-2016-3695, no affected_versions
+
+# Skipping CVE-2016-3699, no affected_versions
+
+# Skipping CVE-2016-3707, no affected_versions
+
+CVE_STATUS[CVE-2016-3713] = "fixed-version: Fixed from version 4.7rc1"
+
+# CVE-2016-3775 has no known resolution
+
+# CVE-2016-3802 has no known resolution
+
+# CVE-2016-3803 has no known resolution
+
+CVE_STATUS[CVE-2016-3841] = "fixed-version: Fixed from version 4.4rc4"
+
+CVE_STATUS[CVE-2016-3857] = "fixed-version: Fixed from version 4.8rc2"
+
+CVE_STATUS[CVE-2016-3951] = "fixed-version: Fixed from version 4.5"
+
+CVE_STATUS[CVE-2016-3955] = "fixed-version: Fixed from version 4.6rc3"
+
+CVE_STATUS[CVE-2016-3961] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-4440] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4470] = "fixed-version: Fixed from version 4.7rc4"
+
+CVE_STATUS[CVE-2016-4482] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4485] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4486] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4557] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4558] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-4565] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4568] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-4569] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4578] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4580] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4581] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-4794] = "fixed-version: Fixed from version 4.7rc4"
+
+CVE_STATUS[CVE-2016-4805] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-4913] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-4951] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4997] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-4998] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-5195] = "fixed-version: Fixed from version 4.9rc2"
+
+CVE_STATUS[CVE-2016-5243] = "fixed-version: Fixed from version 4.7rc3"
+
+CVE_STATUS[CVE-2016-5244] = "fixed-version: Fixed from version 4.7rc3"
+
+# Skipping CVE-2016-5340, no affected_versions
+
+# Skipping CVE-2016-5342, no affected_versions
+
+# Skipping CVE-2016-5343, no affected_versions
+
+# Skipping CVE-2016-5344, no affected_versions
+
+CVE_STATUS[CVE-2016-5400] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-5412] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-5696] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-5728] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-5828] = "fixed-version: Fixed from version 4.7rc6"
+
+CVE_STATUS[CVE-2016-5829] = "fixed-version: Fixed from version 4.7rc5"
+
+# CVE-2016-5870 has no known resolution
+
+CVE_STATUS[CVE-2016-6130] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2016-6136] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-6156] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-6162] = "fixed-version: Fixed from version 4.7"
+
+CVE_STATUS[CVE-2016-6187] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-6197] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-6198] = "fixed-version: Fixed from version 4.6"
+
+CVE_STATUS[CVE-2016-6213] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-6327] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-6480] = "fixed-version: Fixed from version 4.8rc3"
+
+CVE_STATUS[CVE-2016-6516] = "fixed-version: Fixed from version 4.8rc1"
+
+# Skipping CVE-2016-6753, no affected_versions
+
+CVE_STATUS[CVE-2016-6786] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2016-6787] = "fixed-version: Fixed from version 4.0rc1"
+
+CVE_STATUS[CVE-2016-6828] = "fixed-version: Fixed from version 4.8rc5"
+
+CVE_STATUS[CVE-2016-7039] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-7042] = "fixed-version: Fixed from version 4.9rc3"
+
+CVE_STATUS[CVE-2016-7097] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-7117] = "fixed-version: Fixed from version 4.6rc1"
+
+# Skipping CVE-2016-7118, no affected_versions
+
+CVE_STATUS[CVE-2016-7425] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2016-7910] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2016-7911] = "fixed-version: Fixed from version 4.7rc7"
+
+CVE_STATUS[CVE-2016-7912] = "fixed-version: Fixed from version 4.6rc5"
+
+CVE_STATUS[CVE-2016-7913] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-7914] = "fixed-version: Fixed from version 4.6rc4"
+
+CVE_STATUS[CVE-2016-7915] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-7916] = "fixed-version: Fixed from version 4.6rc7"
+
+CVE_STATUS[CVE-2016-7917] = "fixed-version: Fixed from version 4.5rc6"
+
+CVE_STATUS[CVE-2016-8399] = "fixed-version: Fixed from version 4.9"
+
+# Skipping CVE-2016-8401, no affected_versions
+
+# Skipping CVE-2016-8402, no affected_versions
+
+# Skipping CVE-2016-8403, no affected_versions
+
+# Skipping CVE-2016-8404, no affected_versions
+
+CVE_STATUS[CVE-2016-8405] = "fixed-version: Fixed from version 4.10rc6"
+
+# Skipping CVE-2016-8406, no affected_versions
+
+# Skipping CVE-2016-8407, no affected_versions
+
+CVE_STATUS[CVE-2016-8630] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-8632] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-8633] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-8636] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2016-8645] = "fixed-version: Fixed from version 4.9rc6"
+
+CVE_STATUS[CVE-2016-8646] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2016-8650] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-8655] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-8658] = "fixed-version: Fixed from version 4.8rc7"
+
+# CVE-2016-8660 has no known resolution
+
+CVE_STATUS[CVE-2016-8666] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9083] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9084] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9120] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9178] = "fixed-version: Fixed from version 4.8rc7"
+
+CVE_STATUS[CVE-2016-9191] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2016-9313] = "fixed-version: Fixed from version 4.9rc3"
+
+CVE_STATUS[CVE-2016-9555] = "fixed-version: Fixed from version 4.9rc4"
+
+CVE_STATUS[CVE-2016-9576] = "fixed-version: Fixed from version 4.9"
+
+CVE_STATUS[CVE-2016-9588] = "fixed-version: Fixed from version 4.10rc1"
+
+CVE_STATUS[CVE-2016-9604] = "fixed-version: Fixed from version 4.11rc8"
+
+# Skipping CVE-2016-9644, no affected_versions
+
+CVE_STATUS[CVE-2016-9685] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2016-9754] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9755] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-9756] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-9777] = "fixed-version: Fixed from version 4.9rc7"
+
+CVE_STATUS[CVE-2016-9793] = "fixed-version: Fixed from version 4.9rc8"
+
+CVE_STATUS[CVE-2016-9794] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9806] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2016-9919] = "fixed-version: Fixed from version 4.9rc8"
+
+# Skipping CVE-2017-0403, no affected_versions
+
+# Skipping CVE-2017-0404, no affected_versions
+
+# Skipping CVE-2017-0426, no affected_versions
+
+# Skipping CVE-2017-0427, no affected_versions
+
+# CVE-2017-0507 has no known resolution
+
+# CVE-2017-0508 has no known resolution
+
+# Skipping CVE-2017-0510, no affected_versions
+
+# Skipping CVE-2017-0528, no affected_versions
+
+# Skipping CVE-2017-0537, no affected_versions
+
+# CVE-2017-0564 has no known resolution
+
+CVE_STATUS[CVE-2017-0605] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-0627] = "fixed-version: Fixed from version 4.14rc1"
+
+# CVE-2017-0630 has no known resolution
+
+# CVE-2017-0749 has no known resolution
+
+CVE_STATUS[CVE-2017-0750] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2017-0786] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-0861] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-1000] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000111] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000112] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-1000251] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-1000252] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-1000253] = "fixed-version: Fixed from version 4.1rc1"
+
+CVE_STATUS[CVE-2017-1000255] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-1000363] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-1000364] = "fixed-version: Fixed from version 4.12rc6"
+
+CVE_STATUS[CVE-2017-1000365] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-1000370] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-1000371] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-1000379] = "fixed-version: Fixed from version 4.12rc6"
+
+CVE_STATUS[CVE-2017-1000380] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-1000405] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-1000407] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-1000410] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-10661] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-10662] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-10663] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-10810] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-10911] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-11089] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-11176] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-11472] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-11473] = "fixed-version: Fixed from version 4.13rc2"
+
+CVE_STATUS[CVE-2017-11600] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-12134] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-12146] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-12153] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2017-12154] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-12168] = "fixed-version: Fixed from version 4.9rc6"
+
+CVE_STATUS[CVE-2017-12188] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-12190] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-12192] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-12193] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-12762] = "fixed-version: Fixed from version 4.13rc4"
+
+CVE_STATUS[CVE-2017-13080] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-13166] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-13167] = "fixed-version: Fixed from version 4.5rc4"
+
+CVE_STATUS[CVE-2017-13168] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2017-13215] = "fixed-version: Fixed from version 4.5rc1"
+
+CVE_STATUS[CVE-2017-13216] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-13220] = "fixed-version: Fixed from version 3.19rc3"
+
+# CVE-2017-13221 has no known resolution
+
+# CVE-2017-13222 has no known resolution
+
+CVE_STATUS[CVE-2017-13305] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-13686] = "fixed-version: Fixed from version 4.13rc7"
+
+# CVE-2017-13693 has no known resolution
+
+# CVE-2017-13694 has no known resolution
+
+CVE_STATUS[CVE-2017-13695] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2017-13715] = "fixed-version: Fixed from version 4.3rc1"
+
+CVE_STATUS[CVE-2017-14051] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14106] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-14140] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-14156] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14340] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-14489] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-14497] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-14954] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-14991] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2017-15102] = "fixed-version: Fixed from version 4.9rc1"
+
+CVE_STATUS[CVE-2017-15115] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-15116] = "fixed-version: Fixed from version 4.2rc1"
+
+CVE_STATUS[CVE-2017-15121] = "fixed-version: Fixed from version 3.11rc1"
+
+CVE_STATUS[CVE-2017-15126] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-15127] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2017-15128] = "fixed-version: Fixed from version 4.14rc8"
+
+CVE_STATUS[CVE-2017-15129] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-15265] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-15274] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-15299] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-15306] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-15537] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-15649] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-15868] = "fixed-version: Fixed from version 3.19rc3"
+
+CVE_STATUS[CVE-2017-15951] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16525] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16526] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16527] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16528] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2017-16529] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16530] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16531] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16532] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16533] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-16534] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2017-16535] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16536] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16537] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16538] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-16643] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-16644] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-16645] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2017-16646] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16647] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16648] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16649] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16650] = "fixed-version: Fixed from version 4.14"
+
+CVE_STATUS[CVE-2017-16911] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16912] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16913] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16914] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-16939] = "fixed-version: Fixed from version 4.14rc7"
+
+CVE_STATUS[CVE-2017-16994] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-16995] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-16996] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17052] = "fixed-version: Fixed from version 4.13rc7"
+
+CVE_STATUS[CVE-2017-17053] = "fixed-version: Fixed from version 4.13rc7"
+
+CVE_STATUS[CVE-2017-17448] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17449] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17450] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17558] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17712] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17741] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17805] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17806] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-17807] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-17852] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17853] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17854] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17855] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17856] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17857] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17862] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-17863] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17864] = "fixed-version: Fixed from version 4.15rc5"
+
+CVE_STATUS[CVE-2017-17975] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2017-18017] = "fixed-version: Fixed from version 4.11rc7"
+
+CVE_STATUS[CVE-2017-18075] = "fixed-version: Fixed from version 4.15rc7"
+
+CVE_STATUS[CVE-2017-18079] = "fixed-version: Fixed from version 4.13rc1"
+
+# CVE-2017-18169 has no known resolution
+
+CVE_STATUS[CVE-2017-18174] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2017-18193] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18200] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-18202] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-18203] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18204] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18208] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2017-18216] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18218] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18221] = "fixed-version: Fixed from version 4.12rc4"
+
+CVE_STATUS[CVE-2017-18222] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-18224] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2017-18232] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-18241] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18249] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-18255] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18257] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18261] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2017-18270] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-18344] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2017-18360] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-18379] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2017-18509] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18549] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18550] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-18551] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2017-18552] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-18595] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2017-2583] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-2584] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-2596] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-2618] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-2634] = "fixed-version: Fixed from version 2.6.25rc1"
+
+CVE_STATUS[CVE-2017-2636] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-2647] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2017-2671] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-5123] = "fixed-version: Fixed from version 4.14rc5"
+
+CVE_STATUS[CVE-2017-5546] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5547] = "fixed-version: Fixed from version 4.10rc5"
+
+CVE_STATUS[CVE-2017-5548] = "fixed-version: Fixed from version 4.10rc5"
+
+CVE_STATUS[CVE-2017-5549] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5550] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5551] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-5576] = "fixed-version: Fixed from version 4.10rc6"
+
+CVE_STATUS[CVE-2017-5577] = "fixed-version: Fixed from version 4.10rc6"
+
+CVE_STATUS[CVE-2017-5669] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-5715] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-5753] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2017-5754] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2017-5897] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-5967] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-5970] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-5972] = "fixed-version: Fixed from version 4.4rc1"
+
+CVE_STATUS[CVE-2017-5986] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-6001] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-6074] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6214] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-6345] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6346] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6347] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-6348] = "fixed-version: Fixed from version 4.10"
+
+CVE_STATUS[CVE-2017-6353] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-6874] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-6951] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2017-7184] = "fixed-version: Fixed from version 4.11rc5"
+
+CVE_STATUS[CVE-2017-7187] = "fixed-version: Fixed from version 4.11rc5"
+
+CVE_STATUS[CVE-2017-7261] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7273] = "fixed-version: Fixed from version 4.10rc4"
+
+CVE_STATUS[CVE-2017-7277] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-7294] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7308] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7346] = "fixed-version: Fixed from version 4.12rc5"
+
+# CVE-2017-7369 has no known resolution
+
+CVE_STATUS[CVE-2017-7374] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-7472] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-7477] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7482] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-7487] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-7495] = "fixed-version: Fixed from version 4.7rc1"
+
+CVE_STATUS[CVE-2017-7518] = "fixed-version: Fixed from version 4.12rc7"
+
+CVE_STATUS[CVE-2017-7533] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-7541] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-7542] = "fixed-version: Fixed from version 4.13rc2"
+
+CVE_STATUS[CVE-2017-7558] = "fixed-version: Fixed from version 4.13"
+
+CVE_STATUS[CVE-2017-7616] = "fixed-version: Fixed from version 4.11rc6"
+
+CVE_STATUS[CVE-2017-7618] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-7645] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7889] = "fixed-version: Fixed from version 4.11rc7"
+
+CVE_STATUS[CVE-2017-7895] = "fixed-version: Fixed from version 4.11"
+
+CVE_STATUS[CVE-2017-7979] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2017-8061] = "fixed-version: Fixed from version 4.11rc4"
+
+CVE_STATUS[CVE-2017-8062] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-8063] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8064] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8065] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8066] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8067] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2017-8068] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8069] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8070] = "fixed-version: Fixed from version 4.10rc8"
+
+CVE_STATUS[CVE-2017-8071] = "fixed-version: Fixed from version 4.10rc7"
+
+CVE_STATUS[CVE-2017-8072] = "fixed-version: Fixed from version 4.10rc7"
+
+CVE_STATUS[CVE-2017-8106] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2017-8240] = "fixed-version: Fixed from version 3.19rc6"
+
+# CVE-2017-8242 has no known resolution
+
+# CVE-2017-8244 has no known resolution
+
+# CVE-2017-8245 has no known resolution
+
+# CVE-2017-8246 has no known resolution
+
+CVE_STATUS[CVE-2017-8797] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-8824] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2017-8831] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-8890] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-8924] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-8925] = "fixed-version: Fixed from version 4.11rc2"
+
+CVE_STATUS[CVE-2017-9059] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-9074] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9075] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9076] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9077] = "fixed-version: Fixed from version 4.12rc2"
+
+CVE_STATUS[CVE-2017-9150] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2017-9211] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-9242] = "fixed-version: Fixed from version 4.12rc3"
+
+CVE_STATUS[CVE-2017-9605] = "fixed-version: Fixed from version 4.12rc5"
+
+CVE_STATUS[CVE-2017-9725] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2017-9984] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-9985] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2017-9986] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2018-1000004] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-1000026] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-1000028] = "fixed-version: Fixed from version 4.15"
+
+CVE_STATUS[CVE-2018-1000199] = "fixed-version: Fixed from version 4.16"
+
+CVE_STATUS[CVE-2018-1000200] = "fixed-version: Fixed from version 4.17rc5"
+
+CVE_STATUS[CVE-2018-1000204] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-10021] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-10074] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-10087] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-10124] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-10322] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-10323] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-1065] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-1066] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-10675] = "fixed-version: Fixed from version 4.13rc6"
+
+CVE_STATUS[CVE-2018-1068] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-10840] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-10853] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-1087] = "fixed-version: Fixed from version 4.16rc7"
+
+# CVE-2018-10872 has no known resolution
+
+CVE_STATUS[CVE-2018-10876] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10877] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10878] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10879] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10880] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10881] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10882] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10883] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-10901] = "fixed-version: Fixed from version 2.6.36rc1"
+
+CVE_STATUS[CVE-2018-10902] = "fixed-version: Fixed from version 4.18rc6"
+
+CVE_STATUS[CVE-2018-1091] = "fixed-version: Fixed from version 4.14rc2"
+
+CVE_STATUS[CVE-2018-1092] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-1093] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-10938] = "fixed-version: Fixed from version 4.13rc5"
+
+CVE_STATUS[CVE-2018-1094] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-10940] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-1095] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-1108] = "fixed-version: Fixed from version 4.17rc2"
+
+CVE_STATUS[CVE-2018-1118] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-1120] = "fixed-version: Fixed from version 4.17rc6"
+
+# CVE-2018-1121 has no known resolution
+
+CVE_STATUS[CVE-2018-11232] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-1128] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-1129] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-1130] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-11412] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-11506] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-11508] = "fixed-version: Fixed from version 4.17rc5"
+
+# CVE-2018-11987 has no known resolution
+
+CVE_STATUS[CVE-2018-12126] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12127] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12130] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2018-12207] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2018-12232] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-12233] = "fixed-version: Fixed from version 4.18rc2"
+
+CVE_STATUS[CVE-2018-12633] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-12714] = "fixed-version: Fixed from version 4.18rc2"
+
+CVE_STATUS[CVE-2018-12896] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-12904] = "fixed-version: Fixed from version 4.18rc1"
+
+# CVE-2018-12928 has no known resolution
+
+# CVE-2018-12929 has no known resolution
+
+# CVE-2018-12930 has no known resolution
+
+# CVE-2018-12931 has no known resolution
+
+CVE_STATUS[CVE-2018-13053] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13093] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-13094] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-13095] = "fixed-version: Fixed from version 4.18rc3"
+
+CVE_STATUS[CVE-2018-13096] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13097] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13098] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13099] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13100] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-13405] = "fixed-version: Fixed from version 4.18rc4"
+
+CVE_STATUS[CVE-2018-13406] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-14609] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14610] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14611] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14612] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14613] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14614] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14615] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14616] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14617] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-14619] = "fixed-version: Fixed from version 4.15rc4"
+
+CVE_STATUS[CVE-2018-14625] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-14633] = "fixed-version: Fixed from version 4.19rc6"
+
+CVE_STATUS[CVE-2018-14634] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2018-14641] = "fixed-version: Fixed from version 4.19rc4"
+
+CVE_STATUS[CVE-2018-14646] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-14656] = "fixed-version: Fixed from version 4.19rc2"
+
+CVE_STATUS[CVE-2018-14678] = "fixed-version: Fixed from version 4.18rc8"
+
+CVE_STATUS[CVE-2018-14734] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-15471] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-15572] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-15594] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-16276] = "fixed-version: Fixed from version 4.18rc5"
+
+CVE_STATUS[CVE-2018-16597] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2018-16658] = "fixed-version: Fixed from version 4.19rc2"
+
+CVE_STATUS[CVE-2018-16862] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-16871] = "fixed-version: Fixed from version 4.20rc3"
+
+CVE_STATUS[CVE-2018-16880] = "fixed-version: Fixed from version 5.0rc5"
+
+CVE_STATUS[CVE-2018-16882] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2018-16884] = "fixed-version: Fixed from version 5.0rc1"
+
+# CVE-2018-16885 has no known resolution
+
+CVE_STATUS[CVE-2018-17182] = "fixed-version: Fixed from version 4.19rc4"
+
+CVE_STATUS[CVE-2018-17972] = "fixed-version: Fixed from version 4.19rc7"
+
+# CVE-2018-17977 has no known resolution
+
+CVE_STATUS[CVE-2018-18021] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-18281] = "fixed-version: Fixed from version 4.19"
+
+CVE_STATUS[CVE-2018-18386] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2018-18397] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-18445] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2018-18559] = "fixed-version: Fixed from version 4.15rc2"
+
+# CVE-2018-18653 has no known resolution
+
+CVE_STATUS[CVE-2018-18690] = "fixed-version: Fixed from version 4.17rc4"
+
+CVE_STATUS[CVE-2018-18710] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-18955] = "fixed-version: Fixed from version 4.20rc2"
+
+CVE_STATUS[CVE-2018-19406] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-19407] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2018-19824] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-19854] = "fixed-version: Fixed from version 4.20rc3"
+
+CVE_STATUS[CVE-2018-19985] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2018-20169] = "fixed-version: Fixed from version 4.20rc6"
+
+CVE_STATUS[CVE-2018-20449] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-20509] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2018-20510] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-20511] = "fixed-version: Fixed from version 4.19rc5"
+
+CVE_STATUS[CVE-2018-20669] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2018-20784] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2018-20836] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-20854] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2018-20855] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-20856] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-20961] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-20976] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-21008] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2018-25015] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-25020] = "fixed-version: Fixed from version 4.17rc7"
+
+# CVE-2018-3574 has no known resolution
+
+CVE_STATUS[CVE-2018-3620] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-3639] = "fixed-version: Fixed from version 4.17rc7"
+
+CVE_STATUS[CVE-2018-3646] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-3665] = "fixed-version: Fixed from version 3.7rc1"
+
+CVE_STATUS[CVE-2018-3693] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-5332] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5333] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5344] = "fixed-version: Fixed from version 4.15rc8"
+
+CVE_STATUS[CVE-2018-5390] = "fixed-version: Fixed from version 4.18rc7"
+
+CVE_STATUS[CVE-2018-5391] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-5703] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-5750] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-5803] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-5814] = "fixed-version: Fixed from version 4.17rc6"
+
+CVE_STATUS[CVE-2018-5848] = "fixed-version: Fixed from version 4.16rc1"
+
+# Skipping CVE-2018-5856, no affected_versions
+
+CVE_STATUS[CVE-2018-5873] = "fixed-version: Fixed from version 4.11rc8"
+
+CVE_STATUS[CVE-2018-5953] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-5995] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-6412] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-6554] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2018-6555] = "fixed-version: Fixed from version 4.17rc1"
+
+# CVE-2018-6559 has no known resolution
+
+CVE_STATUS[CVE-2018-6927] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2018-7191] = "fixed-version: Fixed from version 4.14rc6"
+
+CVE_STATUS[CVE-2018-7273] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-7480] = "fixed-version: Fixed from version 4.11rc1"
+
+CVE_STATUS[CVE-2018-7492] = "fixed-version: Fixed from version 4.15rc3"
+
+CVE_STATUS[CVE-2018-7566] = "fixed-version: Fixed from version 4.16rc2"
+
+CVE_STATUS[CVE-2018-7740] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-7754] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2018-7755] = "fixed-version: Fixed from version 4.19rc5"
+
+CVE_STATUS[CVE-2018-7757] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-7995] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2018-8043] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-8087] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2018-8781] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-8822] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-8897] = "fixed-version: Fixed from version 4.16rc7"
+
+CVE_STATUS[CVE-2018-9363] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2018-9385] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-9415] = "fixed-version: Fixed from version 4.17rc3"
+
+CVE_STATUS[CVE-2018-9422] = "fixed-version: Fixed from version 4.6rc1"
+
+CVE_STATUS[CVE-2018-9465] = "fixed-version: Fixed from version 4.15rc6"
+
+CVE_STATUS[CVE-2018-9516] = "fixed-version: Fixed from version 4.18rc5"
+
+CVE_STATUS[CVE-2018-9517] = "fixed-version: Fixed from version 4.14rc1"
+
+CVE_STATUS[CVE-2018-9518] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2018-9568] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2019-0136] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-0145] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0146] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0147] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0148] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-0149] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-0154] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-0155] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-10124] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-10125] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-10126] = "fixed-version: Fixed from version 5.2rc6"
+
+# CVE-2019-10140 has no known resolution
+
+CVE_STATUS[CVE-2019-10142] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-10207] = "fixed-version: Fixed from version 5.3rc3"
+
+CVE_STATUS[CVE-2019-10220] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-10638] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-10639] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11085] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-11091] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-11135] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-11190] = "fixed-version: Fixed from version 4.8rc5"
+
+CVE_STATUS[CVE-2019-11191] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-1125] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-11477] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11478] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11479] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-11486] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11487] = "fixed-version: Fixed from version 5.1rc5"
+
+CVE_STATUS[CVE-2019-11599] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-11683] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-11810] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-11811] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-11815] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-11833] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-11884] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-12378] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12379] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12380] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12381] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-12382] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12454] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12455] = "fixed-version: Fixed from version 5.3rc1"
+
+# CVE-2019-12456 has no known resolution
+
+CVE_STATUS[CVE-2019-12614] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-12615] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-12817] = "fixed-version: Fixed from version 5.2rc7"
+
+CVE_STATUS[CVE-2019-12818] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-12819] = "fixed-version: Fixed from version 5.0rc8"
+
+CVE_STATUS[CVE-2019-12881] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2019-12984] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-13233] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-13272] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-13631] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-13648] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-14283] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-14284] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-14615] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2019-14763] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2019-14814] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14815] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14816] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14821] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-14835] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-14895] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-14896] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2019-14897] = "fixed-version: Fixed from version 5.5"
+
+# CVE-2019-14898 has no known resolution
+
+CVE_STATUS[CVE-2019-14901] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-15030] = "fixed-version: Fixed from version 5.3rc8"
+
+CVE_STATUS[CVE-2019-15031] = "fixed-version: Fixed from version 5.3rc8"
+
+CVE_STATUS[CVE-2019-15090] = "fixed-version: Fixed from version 5.2rc2"
+
+CVE_STATUS[CVE-2019-15098] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-15099] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-15117] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-15118] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-15211] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15212] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15213] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15214] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15215] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15216] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-15217] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15218] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15219] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2019-15220] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15221] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-15222] = "fixed-version: Fixed from version 5.3rc3"
+
+CVE_STATUS[CVE-2019-15223] = "fixed-version: Fixed from version 5.2rc3"
+
+# CVE-2019-15239 has no known resolution
+
+# CVE-2019-15290 has no known resolution
+
+CVE_STATUS[CVE-2019-15291] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-15292] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15504] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-15505] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-15538] = "fixed-version: Fixed from version 5.3rc6"
+
+CVE_STATUS[CVE-2019-15666] = "fixed-version: Fixed from version 5.1"
+
+# CVE-2019-15791 has no known resolution
+
+# CVE-2019-15792 has no known resolution
+
+# CVE-2019-15793 has no known resolution
+
+CVE_STATUS[CVE-2019-15794] = "fixed-version: Fixed from version 5.12"
+
+CVE_STATUS[CVE-2019-15807] = "fixed-version: Fixed from version 5.2rc3"
+
+# CVE-2019-15902 has no known resolution
+
+CVE_STATUS[CVE-2019-15916] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15917] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-15918] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15919] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15920] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-15921] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-15922] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15923] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15924] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-15925] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15926] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-15927] = "fixed-version: Fixed from version 5.0rc2"
+
+# CVE-2019-16089 has no known resolution
+
+CVE_STATUS[CVE-2019-16229] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16230] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16231] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-16232] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-16233] = "fixed-version: Fixed from version 5.4rc5"
+
+CVE_STATUS[CVE-2019-16234] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-16413] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-16714] = "fixed-version: Fixed from version 5.3rc7"
+
+CVE_STATUS[CVE-2019-16746] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-16921] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2019-16994] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-16995] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-17052] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17053] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17054] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17055] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17056] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-17075] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-17133] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-17351] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-17666] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18198] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-18282] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18660] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18675] = "fixed-version: Fixed from version 4.17rc5"
+
+# CVE-2019-18680 has no known resolution
+
+CVE_STATUS[CVE-2019-18683] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18786] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18805] = "fixed-version: Fixed from version 5.1rc7"
+
+CVE_STATUS[CVE-2019-18806] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18807] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18808] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18809] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-18810] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-18811] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-18812] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-18813] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-18814] = "fixed-version: Fixed from version 5.7rc7"
+
+CVE_STATUS[CVE-2019-18885] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-19036] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19037] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-19039] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2019-19043] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19044] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19045] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19046] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19047] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19048] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19049] = "fixed-version: Fixed from version 5.4rc5"
+
+CVE_STATUS[CVE-2019-19050] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19051] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19052] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19053] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19054] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19055] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19056] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19057] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19058] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19059] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19060] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19061] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19062] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19063] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19064] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19065] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19066] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19067] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19068] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19069] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19070] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19071] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19072] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19073] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19074] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19075] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19076] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19077] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19078] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19079] = "fixed-version: Fixed from version 5.3"
+
+CVE_STATUS[CVE-2019-19080] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19081] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19082] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19083] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19227] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-19241] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19252] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19318] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19319] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19332] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19338] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19377] = "fixed-version: Fixed from version 5.7rc1"
+
+# CVE-2019-19378 has no known resolution
+
+CVE_STATUS[CVE-2019-19447] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19448] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2019-19449] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2019-19462] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2019-19523] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19524] = "fixed-version: Fixed from version 5.4rc8"
+
+CVE_STATUS[CVE-2019-19525] = "fixed-version: Fixed from version 5.4rc2"
+
+CVE_STATUS[CVE-2019-19526] = "fixed-version: Fixed from version 5.4rc4"
+
+CVE_STATUS[CVE-2019-19527] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19528] = "fixed-version: Fixed from version 5.4rc3"
+
+CVE_STATUS[CVE-2019-19529] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19530] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-19531] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19532] = "fixed-version: Fixed from version 5.4rc6"
+
+CVE_STATUS[CVE-2019-19533] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19534] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19535] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19536] = "fixed-version: Fixed from version 5.3rc4"
+
+CVE_STATUS[CVE-2019-19537] = "fixed-version: Fixed from version 5.3rc5"
+
+CVE_STATUS[CVE-2019-19543] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19602] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19767] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2019-19768] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2019-19769] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2019-19770] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2019-19807] = "fixed-version: Fixed from version 5.4rc7"
+
+CVE_STATUS[CVE-2019-19813] = "fixed-version: Fixed from version 5.2rc1"
+
+# CVE-2019-19814 has no known resolution
+
+CVE_STATUS[CVE-2019-19815] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2019-19816] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-19922] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-19927] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-19947] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-19965] = "fixed-version: Fixed from version 5.5rc2"
+
+CVE_STATUS[CVE-2019-19966] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-1999] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20054] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20095] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-20096] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-2024] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2019-2025] = "fixed-version: Fixed from version 4.20rc5"
+
+CVE_STATUS[CVE-2019-20422] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-2054] = "fixed-version: Fixed from version 4.8rc1"
+
+CVE_STATUS[CVE-2019-20636] = "fixed-version: Fixed from version 5.5rc6"
+
+# CVE-2019-20794 has no known resolution
+
+CVE_STATUS[CVE-2019-20806] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-20810] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2019-20811] = "fixed-version: Fixed from version 5.1rc3"
+
+CVE_STATUS[CVE-2019-20812] = "fixed-version: Fixed from version 5.5rc3"
+
+CVE_STATUS[CVE-2019-20908] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2019-20934] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-2101] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-2181] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-2182] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2019-2213] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-2214] = "fixed-version: Fixed from version 5.3rc2"
+
+CVE_STATUS[CVE-2019-2215] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2019-25044] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-25045] = "fixed-version: Fixed from version 5.1"
+
+CVE_STATUS[CVE-2019-3016] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2019-3459] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-3460] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-3701] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-3819] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-3837] = "fixed-version: Fixed from version 3.18rc1"
+
+CVE_STATUS[CVE-2019-3846] = "fixed-version: Fixed from version 5.2rc6"
+
+CVE_STATUS[CVE-2019-3874] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-3882] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-3887] = "fixed-version: Fixed from version 5.1rc4"
+
+CVE_STATUS[CVE-2019-3892] = "fixed-version: Fixed from version 5.1rc6"
+
+CVE_STATUS[CVE-2019-3896] = "fixed-version: Fixed from version 2.6.35rc1"
+
+CVE_STATUS[CVE-2019-3900] = "fixed-version: Fixed from version 5.2rc4"
+
+CVE_STATUS[CVE-2019-3901] = "fixed-version: Fixed from version 4.6rc6"
+
+CVE_STATUS[CVE-2019-5108] = "fixed-version: Fixed from version 5.3"
+
+# Skipping CVE-2019-5489, no affected_versions
+
+CVE_STATUS[CVE-2019-6133] = "fixed-version: Fixed from version 5.0rc2"
+
+CVE_STATUS[CVE-2019-6974] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7221] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7222] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-7308] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2019-8912] = "fixed-version: Fixed from version 5.0rc8"
+
+CVE_STATUS[CVE-2019-8956] = "fixed-version: Fixed from version 5.0rc6"
+
+CVE_STATUS[CVE-2019-8980] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9003] = "fixed-version: Fixed from version 5.0rc4"
+
+CVE_STATUS[CVE-2019-9162] = "fixed-version: Fixed from version 5.0rc7"
+
+CVE_STATUS[CVE-2019-9213] = "fixed-version: Fixed from version 5.0"
+
+CVE_STATUS[CVE-2019-9245] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2019-9444] = "fixed-version: Fixed from version 4.15rc2"
+
+CVE_STATUS[CVE-2019-9445] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9453] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2019-9454] = "fixed-version: Fixed from version 4.15rc9"
+
+CVE_STATUS[CVE-2019-9455] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2019-9456] = "fixed-version: Fixed from version 4.16rc6"
+
+CVE_STATUS[CVE-2019-9457] = "fixed-version: Fixed from version 4.13rc1"
+
+CVE_STATUS[CVE-2019-9458] = "fixed-version: Fixed from version 4.19rc7"
+
+CVE_STATUS[CVE-2019-9466] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9500] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9503] = "fixed-version: Fixed from version 5.1rc1"
+
+CVE_STATUS[CVE-2019-9506] = "fixed-version: Fixed from version 5.2"
+
+CVE_STATUS[CVE-2019-9857] = "fixed-version: Fixed from version 5.1rc2"
+
+CVE_STATUS[CVE-2020-0009] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-0030] = "fixed-version: Fixed from version 4.16rc3"
+
+CVE_STATUS[CVE-2020-0041] = "fixed-version: Fixed from version 5.5rc2"
+
+CVE_STATUS[CVE-2020-0066] = "fixed-version: Fixed from version 4.3rc7"
+
+CVE_STATUS[CVE-2020-0067] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-0110] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-0255] = "fixed-version: Fixed from version 5.7rc4"
+
+CVE_STATUS[CVE-2020-0305] = "fixed-version: Fixed from version 5.5rc6"
+
+# CVE-2020-0347 has no known resolution
+
+CVE_STATUS[CVE-2020-0404] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-0423] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-0427] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-0429] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2020-0430] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2020-0431] = "fixed-version: Fixed from version 5.5rc6"
+
+CVE_STATUS[CVE-2020-0432] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-0433] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2020-0435] = "fixed-version: Fixed from version 4.19rc1"
+
+CVE_STATUS[CVE-2020-0444] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-0465] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-0466] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-0543] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10135] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10690] = "fixed-version: Fixed from version 5.5rc5"
+
+# CVE-2020-10708 has no known resolution
+
+CVE_STATUS[CVE-2020-10711] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-10720] = "fixed-version: Fixed from version 5.2rc3"
+
+CVE_STATUS[CVE-2020-10732] = "fixed-version: Fixed from version 5.7"
+
+CVE_STATUS[CVE-2020-10742] = "fixed-version: Fixed from version 3.16rc1"
+
+CVE_STATUS[CVE-2020-10751] = "fixed-version: Fixed from version 5.7rc4"
+
+CVE_STATUS[CVE-2020-10757] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10766] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10767] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10768] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-10769] = "fixed-version: Fixed from version 5.0rc3"
+
+CVE_STATUS[CVE-2020-10773] = "fixed-version: Fixed from version 5.4rc6"
+
+# CVE-2020-10774 has no known resolution
+
+CVE_STATUS[CVE-2020-10781] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2020-10942] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-11494] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11565] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11608] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11609] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11668] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-11669] = "fixed-version: Fixed from version 5.2rc1"
+
+# CVE-2020-11725 has no known resolution
+
+CVE_STATUS[CVE-2020-11884] = "fixed-version: Fixed from version 5.7rc4"
+
+# CVE-2020-11935 has no known resolution
+
+CVE_STATUS[CVE-2020-12114] = "fixed-version: Fixed from version 5.3rc1"
+
+CVE_STATUS[CVE-2020-12351] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-12352] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-12362] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12363] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12364] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-12464] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-12465] = "fixed-version: Fixed from version 5.6rc6"
+
+CVE_STATUS[CVE-2020-12652] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2020-12653] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-12654] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2020-12655] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12656] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-12657] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12659] = "fixed-version: Fixed from version 5.7rc2"
+
+CVE_STATUS[CVE-2020-12768] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-12769] = "fixed-version: Fixed from version 5.5rc6"
+
+CVE_STATUS[CVE-2020-12770] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-12771] = "fixed-version: Fixed from version 5.8rc2"
+
+CVE_STATUS[CVE-2020-12826] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-12888] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-12912] = "fixed-version: Fixed from version 5.10rc4"
+
+CVE_STATUS[CVE-2020-13143] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-13974] = "fixed-version: Fixed from version 5.8rc1"
+
+# CVE-2020-14304 has no known resolution
+
+CVE_STATUS[CVE-2020-14305] = "fixed-version: Fixed from version 4.12rc1"
+
+CVE_STATUS[CVE-2020-14314] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-14331] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-14351] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-14353] = "fixed-version: Fixed from version 4.14rc3"
+
+CVE_STATUS[CVE-2020-14356] = "fixed-version: Fixed from version 5.8rc5"
+
+CVE_STATUS[CVE-2020-14381] = "fixed-version: Fixed from version 5.6rc6"
+
+CVE_STATUS[CVE-2020-14385] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-14386] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-14390] = "fixed-version: Fixed from version 5.9rc6"
+
+CVE_STATUS[CVE-2020-14416] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2020-15393] = "fixed-version: Fixed from version 5.8rc3"
+
+CVE_STATUS[CVE-2020-15436] = "fixed-version: Fixed from version 5.8rc2"
+
+CVE_STATUS[CVE-2020-15437] = "fixed-version: Fixed from version 5.8rc7"
+
+CVE_STATUS[CVE-2020-15780] = "fixed-version: Fixed from version 5.8rc3"
+
+# CVE-2020-15802 has no known resolution
+
+CVE_STATUS[CVE-2020-15852] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2020-16119] = "fixed-version: Fixed from version 5.15rc2"
+
+CVE_STATUS[CVE-2020-16120] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-16166] = "fixed-version: Fixed from version 5.8"
+
+CVE_STATUS[CVE-2020-1749] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2020-24394] = "fixed-version: Fixed from version 5.8rc4"
+
+CVE_STATUS[CVE-2020-24490] = "fixed-version: Fixed from version 5.8"
+
+# CVE-2020-24502 has no known resolution
+
+# CVE-2020-24503 has no known resolution
+
+CVE_STATUS[CVE-2020-24504] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-24586] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-24587] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-24588] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-25211] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25212] = "fixed-version: Fixed from version 5.9rc1"
+
+# CVE-2020-25220 has no known resolution
+
+CVE_STATUS[CVE-2020-25221] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25284] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-25285] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25639] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-25641] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2020-25643] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25645] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2020-25656] = "fixed-version: Fixed from version 5.10rc2"
+
+# CVE-2020-25661 has no known resolution
+
+# CVE-2020-25662 has no known resolution
+
+CVE_STATUS[CVE-2020-25668] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-25669] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-25670] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25671] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25672] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25673] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2020-25704] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-25705] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-26088] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-26139] = "fixed-version: Fixed from version 5.13rc4"
+
+# CVE-2020-26140 has no known resolution
+
+CVE_STATUS[CVE-2020-26141] = "fixed-version: Fixed from version 5.13rc4"
+
+# CVE-2020-26142 has no known resolution
+
+# CVE-2020-26143 has no known resolution
+
+CVE_STATUS[CVE-2020-26145] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-26147] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2020-26541] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2020-26555] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2020-26556 has no known resolution
+
+# CVE-2020-26557 has no known resolution
+
+CVE_STATUS[CVE-2020-26558] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2020-26559 has no known resolution
+
+# CVE-2020-26560 has no known resolution
+
+CVE_STATUS[CVE-2020-27066] = "fixed-version: Fixed from version 5.6"
+
+CVE_STATUS[CVE-2020-27067] = "fixed-version: Fixed from version 4.14rc4"
+
+CVE_STATUS[CVE-2020-27068] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-27152] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27170] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2020-27171] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2020-27194] = "fixed-version: Fixed from version 5.9"
+
+CVE_STATUS[CVE-2020-2732] = "fixed-version: Fixed from version 5.6rc4"
+
+# CVE-2020-27418 has no known resolution
+
+CVE_STATUS[CVE-2020-27673] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27675] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27777] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27784] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27786] = "fixed-version: Fixed from version 5.7rc6"
+
+CVE_STATUS[CVE-2020-27815] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-27820] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2020-27825] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-27830] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-27835] = "fixed-version: Fixed from version 5.10rc6"
+
+CVE_STATUS[CVE-2020-28097] = "fixed-version: Fixed from version 5.9rc6"
+
+CVE_STATUS[CVE-2020-28374] = "fixed-version: Fixed from version 5.11rc4"
+
+CVE_STATUS[CVE-2020-28588] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-28915] = "fixed-version: Fixed from version 5.9"
+
+CVE_STATUS[CVE-2020-28941] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-28974] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-29368] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-29369] = "fixed-version: Fixed from version 5.8rc7"
+
+CVE_STATUS[CVE-2020-29370] = "fixed-version: Fixed from version 5.6rc7"
+
+CVE_STATUS[CVE-2020-29371] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2020-29372] = "fixed-version: Fixed from version 5.7rc3"
+
+CVE_STATUS[CVE-2020-29373] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-29374] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-29534] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-29568] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-29569] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-29660] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-29661] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-35499] = "fixed-version: Fixed from version 5.11rc1"
+
+# CVE-2020-35501 has no known resolution
+
+CVE_STATUS[CVE-2020-35508] = "fixed-version: Fixed from version 5.10rc3"
+
+CVE_STATUS[CVE-2020-35513] = "fixed-version: Fixed from version 4.17rc1"
+
+CVE_STATUS[CVE-2020-35519] = "fixed-version: Fixed from version 5.10rc7"
+
+CVE_STATUS[CVE-2020-36158] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-36310] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-36311] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-36312] = "fixed-version: Fixed from version 5.9rc5"
+
+CVE_STATUS[CVE-2020-36313] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-36322] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2020-36385] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2020-36386] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-36387] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-36516] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2020-36557] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-36558] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-36691] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2020-36694] = "fixed-version: Fixed from version 5.10"
+
+CVE_STATUS[CVE-2020-36766] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2020-3702] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2020-4788] = "fixed-version: Fixed from version 5.10rc5"
+
+CVE_STATUS[CVE-2020-7053] = "fixed-version: Fixed from version 5.2rc1"
+
+CVE_STATUS[CVE-2020-8428] = "fixed-version: Fixed from version 5.5"
+
+CVE_STATUS[CVE-2020-8647] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2020-8648] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2020-8649] = "fixed-version: Fixed from version 5.6rc5"
+
+CVE_STATUS[CVE-2020-8694] = "fixed-version: Fixed from version 5.10rc4"
+
+# CVE-2020-8832 has no known resolution
+
+CVE_STATUS[CVE-2020-8834] = "fixed-version: Fixed from version 4.18rc1"
+
+CVE_STATUS[CVE-2020-8835] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2020-8992] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2020-9383] = "fixed-version: Fixed from version 5.6rc4"
+
+CVE_STATUS[CVE-2020-9391] = "fixed-version: Fixed from version 5.6rc3"
+
+CVE_STATUS[CVE-2021-0129] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-0342] = "fixed-version: Fixed from version 5.8rc1"
+
+# CVE-2021-0399 has no known resolution
+
+CVE_STATUS[CVE-2021-0447] = "fixed-version: Fixed from version 4.15rc1"
+
+CVE_STATUS[CVE-2021-0448] = "fixed-version: Fixed from version 5.9rc7"
+
+CVE_STATUS[CVE-2021-0512] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-0605] = "fixed-version: Fixed from version 5.8"
+
+# CVE-2021-0606 has no known resolution
+
+# CVE-2021-0695 has no known resolution
+
+CVE_STATUS[CVE-2021-0707] = "fixed-version: Fixed from version 5.11rc3"
+
+CVE_STATUS[CVE-2021-0920] = "fixed-version: Fixed from version 5.14rc4"
+
+# CVE-2021-0924 has no known resolution
+
+CVE_STATUS[CVE-2021-0929] = "fixed-version: Fixed from version 5.6rc1"
+
+CVE_STATUS[CVE-2021-0935] = "fixed-version: Fixed from version 4.16rc7"
+
+# CVE-2021-0936 has no known resolution
+
+CVE_STATUS[CVE-2021-0937] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-0938] = "fixed-version: Fixed from version 5.10rc4"
+
+CVE_STATUS[CVE-2021-0941] = "fixed-version: Fixed from version 5.12rc1"
+
+# CVE-2021-0961 has no known resolution
+
+CVE_STATUS[CVE-2021-1048] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2021-20177] = "fixed-version: Fixed from version 5.5rc1"
+
+CVE_STATUS[CVE-2021-20194] = "fixed-version: Fixed from version 5.10rc1"
+
+# CVE-2021-20219 has no known resolution
+
+CVE_STATUS[CVE-2021-20226] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2021-20239] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2021-20261] = "fixed-version: Fixed from version 4.5rc5"
+
+CVE_STATUS[CVE-2021-20265] = "fixed-version: Fixed from version 4.5rc3"
+
+CVE_STATUS[CVE-2021-20268] = "fixed-version: Fixed from version 5.11rc5"
+
+CVE_STATUS[CVE-2021-20292] = "fixed-version: Fixed from version 5.9rc1"
+
+CVE_STATUS[CVE-2021-20317] = "fixed-version: Fixed from version 5.4rc1"
+
+CVE_STATUS[CVE-2021-20320] = "fixed-version: Fixed from version 5.15rc3"
+
+CVE_STATUS[CVE-2021-20321] = "fixed-version: Fixed from version 5.15rc5"
+
+CVE_STATUS[CVE-2021-20322] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-21781] = "fixed-version: Fixed from version 5.11rc7"
+
+CVE_STATUS[CVE-2021-22543] = "fixed-version: Fixed from version 5.13"
+
+CVE_STATUS[CVE-2021-22555] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-22600] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-23133] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-23134] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-26401] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2021-26708] = "fixed-version: Fixed from version 5.11rc7"
+
+CVE_STATUS[CVE-2021-26930] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-26931] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-26932] = "fixed-version: Fixed from version 5.12rc1"
+
+# CVE-2021-26934 has no known resolution
+
+CVE_STATUS[CVE-2021-27363] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-27364] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-27365] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28038] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28039] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28375] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-28660] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-28688] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-28691] = "fixed-version: Fixed from version 5.13rc6"
+
+CVE_STATUS[CVE-2021-28711] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28712] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28713] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28714] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28715] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-28950] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28951] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-28952] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28964] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28971] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-28972] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-29154] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2021-29155] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-29264] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-29265] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-29266] = "fixed-version: Fixed from version 5.12rc4"
+
+CVE_STATUS[CVE-2021-29646] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29647] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29648] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29649] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29650] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-29657] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-30002] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-30178] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2021-31440] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-3178] = "fixed-version: Fixed from version 5.11rc5"
+
+CVE_STATUS[CVE-2021-31829] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-31916] = "fixed-version: Fixed from version 5.12rc5"
+
+CVE_STATUS[CVE-2021-32078] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-32399] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-32606] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-33033] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-33034] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-33061] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2021-33098] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-33135] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2021-33200] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3347] = "fixed-version: Fixed from version 5.11rc6"
+
+CVE_STATUS[CVE-2021-3348] = "fixed-version: Fixed from version 5.11rc6"
+
+CVE_STATUS[CVE-2021-33624] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-33655] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2021-33656] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-33909] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3411] = "fixed-version: Fixed from version 5.10"
+
+CVE_STATUS[CVE-2021-3428] = "fixed-version: Fixed from version 5.9rc2"
+
+CVE_STATUS[CVE-2021-3444] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-34556] = "fixed-version: Fixed from version 5.14rc4"
+
+CVE_STATUS[CVE-2021-34693] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-3483] = "fixed-version: Fixed from version 5.12rc6"
+
+CVE_STATUS[CVE-2021-34866] = "fixed-version: Fixed from version 5.14"
+
+CVE_STATUS[CVE-2021-3489] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3490] = "fixed-version: Fixed from version 5.13rc4"
+
+CVE_STATUS[CVE-2021-3491] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2021-3492 has no known resolution
+
+CVE_STATUS[CVE-2021-3493] = "fixed-version: Fixed from version 5.11rc1"
+
+CVE_STATUS[CVE-2021-34981] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3501] = "fixed-version: Fixed from version 5.12rc8"
+
+CVE_STATUS[CVE-2021-35039] = "fixed-version: Fixed from version 5.13"
+
+CVE_STATUS[CVE-2021-3506] = "fixed-version: Fixed from version 5.13rc1"
+
+# CVE-2021-3542 has no known resolution
+
+CVE_STATUS[CVE-2021-3543] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-35477] = "fixed-version: Fixed from version 5.14rc4"
+
+CVE_STATUS[CVE-2021-3564] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3573] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3587] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-3600] = "fixed-version: Fixed from version 5.11"
+
+CVE_STATUS[CVE-2021-3609] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3612] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-3635] = "fixed-version: Fixed from version 5.5rc7"
+
+CVE_STATUS[CVE-2021-3640] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-3653] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-3655] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-3656] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-3659] = "fixed-version: Fixed from version 5.12rc7"
+
+CVE_STATUS[CVE-2021-3669] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3679] = "fixed-version: Fixed from version 5.14rc3"
+
+# CVE-2021-3714 has no known resolution
+
+CVE_STATUS[CVE-2021-3715] = "fixed-version: Fixed from version 5.6"
+
+CVE_STATUS[CVE-2021-37159] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3732] = "fixed-version: Fixed from version 5.14rc6"
+
+CVE_STATUS[CVE-2021-3736] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3739] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3743] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-3744] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-3752] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-3753] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-37576] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-3759] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-3760] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3764] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-3772] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-38160] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38166] = "fixed-version: Fixed from version 5.14rc6"
+
+CVE_STATUS[CVE-2021-38198] = "fixed-version: Fixed from version 5.13rc6"
+
+CVE_STATUS[CVE-2021-38199] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38200] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38201] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38202] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38203] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2021-38204] = "fixed-version: Fixed from version 5.14rc3"
+
+CVE_STATUS[CVE-2021-38205] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-38206] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38207] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2021-38208] = "fixed-version: Fixed from version 5.13rc5"
+
+CVE_STATUS[CVE-2021-38209] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-38300] = "fixed-version: Fixed from version 5.15rc4"
+
+# CVE-2021-3847 has no known resolution
+
+# CVE-2021-3864 has no known resolution
+
+# CVE-2021-3892 has no known resolution
+
+CVE_STATUS[CVE-2021-3894] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3896] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-3923] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-39633] = "fixed-version: Fixed from version 5.14"
+
+CVE_STATUS[CVE-2021-39634] = "fixed-version: Fixed from version 5.9rc8"
+
+CVE_STATUS[CVE-2021-39636] = "fixed-version: Fixed from version 4.16rc1"
+
+CVE_STATUS[CVE-2021-39648] = "fixed-version: Fixed from version 5.11rc3"
+
+CVE_STATUS[CVE-2021-39656] = "fixed-version: Fixed from version 5.12rc3"
+
+CVE_STATUS[CVE-2021-39657] = "fixed-version: Fixed from version 5.11rc4"
+
+CVE_STATUS[CVE-2021-39685] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2021-39686] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-39698] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2021-39711] = "fixed-version: Fixed from version 4.18rc6"
+
+CVE_STATUS[CVE-2021-39713] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2021-39714] = "fixed-version: Fixed from version 4.12rc1"
+
+# CVE-2021-39800 has no known resolution
+
+# CVE-2021-39801 has no known resolution
+
+# CVE-2021-39802 has no known resolution
+
+CVE_STATUS[CVE-2021-4001] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4002] = "fixed-version: Fixed from version 5.16rc3"
+
+CVE_STATUS[CVE-2021-4023] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-4028] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-4032] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4037] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2021-40490] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-4083] = "fixed-version: Fixed from version 5.16rc4"
+
+CVE_STATUS[CVE-2021-4090] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4093] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4095] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-41073] = "fixed-version: Fixed from version 5.15rc2"
+
+CVE_STATUS[CVE-2021-4135] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-4148] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-4149] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-4150] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2021-4154] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2021-4155] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-4157] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-4159] = "fixed-version: Fixed from version 5.7rc1"
+
+CVE_STATUS[CVE-2021-41864] = "fixed-version: Fixed from version 5.15rc5"
+
+CVE_STATUS[CVE-2021-4197] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2021-42008] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2021-4202] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-4203] = "fixed-version: Fixed from version 5.15rc4"
+
+CVE_STATUS[CVE-2021-4204] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-4218] = "fixed-version: Fixed from version 5.8rc1"
+
+CVE_STATUS[CVE-2021-42252] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2021-42327] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-42739] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-43056] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-43057] = "fixed-version: Fixed from version 5.15rc3"
+
+CVE_STATUS[CVE-2021-43267] = "fixed-version: Fixed from version 5.15"
+
+CVE_STATUS[CVE-2021-43389] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2021-43975] = "fixed-version: Fixed from version 5.16rc2"
+
+CVE_STATUS[CVE-2021-43976] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-44733] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-44879] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-45095] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45100] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2021-45402] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45469] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2021-45480] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2021-45485] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2021-45486] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2021-45868] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2021-46283] = "fixed-version: Fixed from version 5.13rc7"
+
+CVE_STATUS[CVE-2022-0001] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0002] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0168] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-0171] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-0185] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0264] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2022-0286] = "fixed-version: Fixed from version 5.14rc2"
+
+CVE_STATUS[CVE-2022-0322] = "fixed-version: Fixed from version 5.15rc6"
+
+CVE_STATUS[CVE-2022-0330] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-0382] = "fixed-version: Fixed from version 5.16"
+
+# CVE-2022-0400 has no known resolution
+
+CVE_STATUS[CVE-2022-0433] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0435] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0480] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-0487] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0492] = "fixed-version: Fixed from version 5.17rc3"
+
+CVE_STATUS[CVE-2022-0494] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-0500] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-0516] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-0617] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-0644] = "fixed-version: Fixed from version 5.15rc7"
+
+CVE_STATUS[CVE-2022-0646] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-0742] = "fixed-version: Fixed from version 5.17rc7"
+
+CVE_STATUS[CVE-2022-0812] = "fixed-version: Fixed from version 5.8rc6"
+
+CVE_STATUS[CVE-2022-0847] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-0850] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2022-0854] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0995] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-0998] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-1011] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-1012] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1015] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1016] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1043] = "fixed-version: Fixed from version 5.14rc7"
+
+CVE_STATUS[CVE-2022-1048] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1055] = "fixed-version: Fixed from version 5.17rc3"
+
+# CVE-2022-1116 has no known resolution
+
+CVE_STATUS[CVE-2022-1158] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1184] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1195] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2022-1198] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-1199] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-1204] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1205] = "fixed-version: Fixed from version 5.18rc1"
+
+# CVE-2022-1247 has no known resolution
+
+CVE_STATUS[CVE-2022-1263] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2022-1280] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-1353] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-1419] = "fixed-version: Fixed from version 5.6rc2"
+
+CVE_STATUS[CVE-2022-1462] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-1508] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-1516] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1651] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1652] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1671] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-1678] = "fixed-version: Fixed from version 4.20rc1"
+
+CVE_STATUS[CVE-2022-1679] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-1729] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2022-1734] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1786] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-1789] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2022-1836] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-1852] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1882] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-1943] = "fixed-version: Fixed from version 5.18rc7"
+
+CVE_STATUS[CVE-2022-1966] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1972] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1973] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1974] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1975] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2022-1976] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-1998] = "fixed-version: Fixed from version 5.17rc3"
+
+CVE_STATUS[CVE-2022-20008] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-20132] = "fixed-version: Fixed from version 5.16rc5"
+
+CVE_STATUS[CVE-2022-20141] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-20148] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2022-20153] = "fixed-version: Fixed from version 5.13rc1"
+
+CVE_STATUS[CVE-2022-20154] = "fixed-version: Fixed from version 5.16rc8"
+
+CVE_STATUS[CVE-2022-20158] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20166] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2022-20368] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20369] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-20409] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20421] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-20422] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-20423] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-20424] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20565] = "fixed-version: Fixed from version 5.9rc4"
+
+CVE_STATUS[CVE-2022-20566] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2022-20567] = "fixed-version: Fixed from version 4.16rc5"
+
+CVE_STATUS[CVE-2022-20568] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-20572] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-2078] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-21123] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21125] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21166] = "fixed-version: Fixed from version 5.19rc3"
+
+CVE_STATUS[CVE-2022-21385] = "fixed-version: Fixed from version 4.20"
+
+CVE_STATUS[CVE-2022-21499] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-21505] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-2153] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2196] = "fixed-version: Fixed from version 6.2rc1"
+
+# CVE-2022-2209 has no known resolution
+
+CVE_STATUS[CVE-2022-22942] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-23036] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23037] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23038] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23039] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23040] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23041] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-23042] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-2308] = "fixed-version: Fixed from version 6.0"
+
+CVE_STATUS[CVE-2022-2318] = "fixed-version: Fixed from version 5.19rc5"
+
+CVE_STATUS[CVE-2022-23222] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-2327] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-2380] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-23816] = "fixed-version: Fixed from version 5.19rc7"
+
+# CVE-2022-23825 has no known resolution
+
+CVE_STATUS[CVE-2022-23960] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-24122] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-24448] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-24958] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-24959] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-2503] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-25258] = "fixed-version: Fixed from version 5.17rc4"
+
+# CVE-2022-25265 has no known resolution
+
+CVE_STATUS[CVE-2022-25375] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-25636] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-2585] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2586] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2588] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2590] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-2602] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-26365] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-26373] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-2639] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-26490] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-2663] = "fixed-version: Fixed from version 6.0rc5"
+
+# CVE-2022-26878 has no known resolution
+
+CVE_STATUS[CVE-2022-26966] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-27223] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-27666] = "fixed-version: Fixed from version 5.17rc8"
+
+CVE_STATUS[CVE-2022-27672] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2022-2785] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-27950] = "fixed-version: Fixed from version 5.17rc5"
+
+CVE_STATUS[CVE-2022-28356] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28388] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28389] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28390] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2873] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-28796] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-28893] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-2905] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-29156] = "fixed-version: Fixed from version 5.17rc6"
+
+CVE_STATUS[CVE-2022-2938] = "fixed-version: Fixed from version 5.17rc2"
+
+CVE_STATUS[CVE-2022-29581] = "fixed-version: Fixed from version 5.18rc4"
+
+CVE_STATUS[CVE-2022-29582] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-2959] = "fixed-version: Fixed from version 5.19rc1"
+
+# CVE-2022-2961 has no known resolution
+
+CVE_STATUS[CVE-2022-2964] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2022-2977] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-2978] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-29900] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-29901] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-2991] = "fixed-version: Fixed from version 5.15rc1"
+
+CVE_STATUS[CVE-2022-29968] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3028] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-30594] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3061] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3077] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3078] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3103] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-3104] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3105] = "fixed-version: Fixed from version 5.16"
+
+CVE_STATUS[CVE-2022-3106] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2022-3107] = "fixed-version: Fixed from version 5.17"
+
+CVE_STATUS[CVE-2022-3108] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-3110] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3111] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3112] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3113] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-3114] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3115] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3169] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3170] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-3176] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2022-3202] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-32250] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-32296] = "fixed-version: Fixed from version 5.18rc6"
+
+# CVE-2022-3238 has no known resolution
+
+CVE_STATUS[CVE-2022-3239] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2022-32981] = "fixed-version: Fixed from version 5.19rc2"
+
+CVE_STATUS[CVE-2022-3303] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-3344] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2022-33740] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33741] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33742] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33743] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33744] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-33981] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2022-3424] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3435] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-34494] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-34495] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-34918] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-3521] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3522] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3523] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3524] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3526] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2022-3531] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3532] = "fixed-version: Fixed from version 6.2rc1"
+
+# CVE-2022-3533 has no known resolution
+
+CVE_STATUS[CVE-2022-3534] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3535] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3541] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3542] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3543] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-3544 has no known resolution
+
+CVE_STATUS[CVE-2022-3545] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3564] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-3565] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3566] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3567] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3577] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3586] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-3594] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3595] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-3606 has no known resolution
+
+CVE_STATUS[CVE-2022-36123] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-3619] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-3621] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3623] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3624] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3625] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3628] = "fixed-version: Fixed from version 6.1rc5"
+
+CVE_STATUS[CVE-2022-36280] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-3629] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3630] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3633] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3635] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-3636] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-3640] = "fixed-version: Fixed from version 6.1rc4"
+
+# CVE-2022-36402 has no known resolution
+
+# CVE-2022-3642 has no known resolution
+
+CVE_STATUS[CVE-2022-3643] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-3646] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-3649] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-36879] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-36946] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2022-3707] = "fixed-version: Fixed from version 6.2rc3"
+
+# CVE-2022-38096 has no known resolution
+
+CVE_STATUS[CVE-2022-38457] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-3903] = "fixed-version: Fixed from version 6.1rc2"
+
+CVE_STATUS[CVE-2022-3910] = "fixed-version: Fixed from version 6.0rc6"
+
+CVE_STATUS[CVE-2022-39188] = "fixed-version: Fixed from version 5.19rc8"
+
+CVE_STATUS[CVE-2022-39189] = "fixed-version: Fixed from version 5.19rc2"
+
+CVE_STATUS[CVE-2022-39190] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2022-3977] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-39842] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2022-40133] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-40307] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2022-40476] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2022-40768] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-4095] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-40982] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2022-41218] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-41222] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2022-4127] = "fixed-version: Fixed from version 5.19rc6"
+
+CVE_STATUS[CVE-2022-4128] = "fixed-version: Fixed from version 5.19rc7"
+
+CVE_STATUS[CVE-2022-4129] = "fixed-version: Fixed from version 6.1rc6"
+
+CVE_STATUS[CVE-2022-4139] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-41674] = "fixed-version: Fixed from version 6.1rc1"
+
+# CVE-2022-41848 has no known resolution
+
+CVE_STATUS[CVE-2022-41849] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-41850] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-41858] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2022-42328] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-42329] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-42432] = "fixed-version: Fixed from version 6.0rc7"
+
+CVE_STATUS[CVE-2022-4269] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2022-42703] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-42719] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42720] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42721] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42722] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-42895] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-42896] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2022-43750] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-4378] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-4379] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-4382] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2022-43945] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2022-44032] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2022-44033] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2022-44034 has no known resolution
+
+# CVE-2022-4543 has no known resolution
+
+CVE_STATUS[CVE-2022-45869] = "fixed-version: Fixed from version 6.1rc7"
+
+# CVE-2022-45884 has no known resolution
+
+# CVE-2022-45885 has no known resolution
+
+CVE_STATUS[CVE-2022-45886] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45887] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45888] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-45919] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2022-45934] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2022-4662] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2022-4696] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2022-4744] = "fixed-version: Fixed from version 5.16rc7"
+
+CVE_STATUS[CVE-2022-47518] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47519] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47520] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47521] = "fixed-version: Fixed from version 6.1rc8"
+
+CVE_STATUS[CVE-2022-47929] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2022-47938] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47939] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47940] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2022-47941] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47942] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47943] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2022-47946] = "fixed-version: Fixed from version 5.12rc2"
+
+CVE_STATUS[CVE-2022-4842] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48423] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48424] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2022-48425] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2022-48502] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-0030] = "fixed-version: Fixed from version 5.0rc1"
+
+CVE_STATUS[CVE-2023-0045] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-0047] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2023-0122] = "fixed-version: Fixed from version 6.0rc4"
+
+CVE_STATUS[CVE-2023-0160] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-0179] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-0210] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0240] = "fixed-version: Fixed from version 5.10rc1"
+
+CVE_STATUS[CVE-2023-0266] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0386] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-0394] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-0458] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-0459] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-0461] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-0468] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-0469] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-0590] = "fixed-version: Fixed from version 6.1rc2"
+
+CVE_STATUS[CVE-2023-0597] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-0615] = "fixed-version: Fixed from version 6.1rc3"
+
+CVE_STATUS[CVE-2023-1032] = "fixed-version: Fixed from version 6.3rc2"
+
+CVE_STATUS[CVE-2023-1073] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-1074] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-1075] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-1076] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1077] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1078] = "fixed-version: Fixed from version 6.2rc8"
+
+CVE_STATUS[CVE-2023-1079] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1095] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-1118] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1192] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-1193 has no known resolution
+
+CVE_STATUS[CVE-2023-1194] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-1195] = "fixed-version: Fixed from version 6.1rc3"
+
+CVE_STATUS[CVE-2023-1206] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-1249] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-1252] = "fixed-version: Fixed from version 5.16rc1"
+
+CVE_STATUS[CVE-2023-1281] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-1295] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2023-1380] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-1382] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-1390] = "fixed-version: Fixed from version 5.11rc4"
+
+CVE_STATUS[CVE-2023-1513] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-1582] = "fixed-version: Fixed from version 5.17rc4"
+
+CVE_STATUS[CVE-2023-1583] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1611] = "fixed-version: Fixed from version 6.3rc5"
+
+CVE_STATUS[CVE-2023-1637] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2023-1652] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-1670] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1829] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-1838] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-1855] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-1859] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-1872] = "fixed-version: Fixed from version 5.18rc2"
+
+CVE_STATUS[CVE-2023-1989] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-1990] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-1998] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2002] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-2006] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-2007] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-2008] = "fixed-version: Fixed from version 5.19rc4"
+
+CVE_STATUS[CVE-2023-2019] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-20569] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-20588] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-20593] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-20928] = "fixed-version: Fixed from version 6.0rc1"
+
+# CVE-2023-20937 has no known resolution
+
+CVE_STATUS[CVE-2023-20938] = "fixed-version: Fixed from version 5.18rc5"
+
+# CVE-2023-20941 has no known resolution
+
+CVE_STATUS[CVE-2023-21102] = "fixed-version: Fixed from version 6.2rc4"
+
+CVE_STATUS[CVE-2023-21106] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-2124] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-21255] = "fixed-version: Fixed from version 6.4rc4"
+
+CVE_STATUS[CVE-2023-21264] = "fixed-version: Fixed from version 6.4rc5"
+
+# CVE-2023-21400 has no known resolution
+
+CVE_STATUS[CVE-2023-2156] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2162] = "fixed-version: Fixed from version 6.2rc6"
+
+CVE_STATUS[CVE-2023-2163] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2166] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2023-2176] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2177] = "fixed-version: Fixed from version 5.19"
+
+CVE_STATUS[CVE-2023-2194] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-2235] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-2236] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-2248] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-2269] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-22995] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-22996] = "fixed-version: Fixed from version 5.18rc1"
+
+CVE_STATUS[CVE-2023-22997] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-22998] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-22999] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23000] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23001] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23002] = "fixed-version: Fixed from version 5.17rc1"
+
+CVE_STATUS[CVE-2023-23003] = "fixed-version: Fixed from version 5.16rc6"
+
+CVE_STATUS[CVE-2023-23004] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-23005] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-23006] = "fixed-version: Fixed from version 5.16rc8"
+
+# CVE-2023-23039 has no known resolution
+
+CVE_STATUS[CVE-2023-23454] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-23455] = "fixed-version: Fixed from version 6.2rc3"
+
+CVE_STATUS[CVE-2023-23559] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-23586] = "fixed-version: Fixed from version 5.12rc1"
+
+CVE_STATUS[CVE-2023-2430] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-2483] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-25012] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
+
+# CVE-2023-25775 needs backporting (fixed from 6.6rc1)
+
+CVE_STATUS[CVE-2023-2598] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-26242 has no known resolution
+
+# CVE-2023-2640 has no known resolution
+
+CVE_STATUS[CVE-2023-26544] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-26545] = "fixed-version: Fixed from version 6.2"
+
+CVE_STATUS[CVE-2023-26605] = "fixed-version: Fixed from version 6.1rc7"
+
+CVE_STATUS[CVE-2023-26606] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-26607] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2023-28327] = "fixed-version: Fixed from version 6.1"
+
+CVE_STATUS[CVE-2023-28328] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-28410] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-28464] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-28466] = "fixed-version: Fixed from version 6.3rc2"
+
+CVE_STATUS[CVE-2023-2860] = "fixed-version: Fixed from version 6.0rc5"
+
+CVE_STATUS[CVE-2023-28772] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2023-28866] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-2898] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-2985] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-3006] = "fixed-version: Fixed from version 6.1rc1"
+
+# Skipping CVE-2023-3022, no affected_versions
+
+CVE_STATUS[CVE-2023-30456] = "fixed-version: Fixed from version 6.3rc3"
+
+CVE_STATUS[CVE-2023-30772] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-3090] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-3106] = "fixed-version: Fixed from version 4.8rc7"
+
+# Skipping CVE-2023-3108, no affected_versions
+
+# CVE-2023-31081 has no known resolution
+
+# CVE-2023-31082 has no known resolution
+
+# CVE-2023-31083 needs backporting (fixed from 6.6rc1)
+
+CVE_STATUS[CVE-2023-31084] = "fixed-version: Fixed from version 6.4rc3"
+
+# CVE-2023-31085 has no known resolution
+
+CVE_STATUS[CVE-2023-3111] = "fixed-version: Fixed from version 6.0rc2"
+
+CVE_STATUS[CVE-2023-3117] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-31248] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3141] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-31436] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-3159] = "fixed-version: Fixed from version 5.18rc6"
+
+CVE_STATUS[CVE-2023-3161] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-3212] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-3220] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-32233] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32247] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32248] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32250] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32252] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32254] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32257] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32258] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-32269] = "fixed-version: Fixed from version 6.2rc7"
+
+# CVE-2023-32629 has no known resolution
+
+CVE_STATUS[CVE-2023-3268] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3269] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-3312] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3317] = "fixed-version: Fixed from version 6.3rc6"
+
+CVE_STATUS[CVE-2023-33203] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-33250] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-33288] = "fixed-version: Fixed from version 6.3rc4"
+
+CVE_STATUS[CVE-2023-3338] = "fixed-version: Fixed from version 6.1rc1"
+
+CVE_STATUS[CVE-2023-3355] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-3357] = "fixed-version: Fixed from version 6.2rc1"
+
+CVE_STATUS[CVE-2023-3358] = "fixed-version: Fixed from version 6.2rc5"
+
+CVE_STATUS[CVE-2023-3359] = "fixed-version: Fixed from version 6.2rc7"
+
+CVE_STATUS[CVE-2023-3389] = "fixed-version: Fixed from version 6.0rc1"
+
+CVE_STATUS[CVE-2023-3390] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-33951] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-33952] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-3397 has no known resolution
+
+CVE_STATUS[CVE-2023-34255] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-34256] = "fixed-version: Fixed from version 6.4rc2"
+
+CVE_STATUS[CVE-2023-34319] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-3439] = "fixed-version: Fixed from version 5.18rc5"
+
+CVE_STATUS[CVE-2023-35001] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3567] = "fixed-version: Fixed from version 6.2rc7"
+
+# CVE-2023-35693 has no known resolution
+
+CVE_STATUS[CVE-2023-35788] = "fixed-version: Fixed from version 6.4rc5"
+
+CVE_STATUS[CVE-2023-35823] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35824] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35826] = "fixed-version: Fixed from version 6.4rc1"
+
+# CVE-2023-35827 has no known resolution
+
+CVE_STATUS[CVE-2023-35828] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-35829] = "fixed-version: Fixed from version 6.4rc1"
+
+CVE_STATUS[CVE-2023-3609] = "fixed-version: Fixed from version 6.4rc7"
+
+CVE_STATUS[CVE-2023-3610] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3611] = "fixed-version: Fixed from version 6.5rc2"
+
+# CVE-2023-3640 has no known resolution
+
+# CVE-2023-37453 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-37454 has no known resolution
+
+CVE_STATUS[CVE-2023-3772] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-3773] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-3776] = "fixed-version: Fixed from version 6.5rc2"
+
+CVE_STATUS[CVE-2023-3777] = "fixed-version: Fixed from version 6.5rc3"
+
+CVE_STATUS[CVE-2023-3812] = "fixed-version: Fixed from version 6.1rc4"
+
+CVE_STATUS[CVE-2023-38409] = "fixed-version: Fixed from version 6.3rc7"
+
+CVE_STATUS[CVE-2023-38426] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38427] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38428] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38429] = "fixed-version: Fixed from version 6.4rc3"
+
+CVE_STATUS[CVE-2023-38430] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38431] = "fixed-version: Fixed from version 6.4rc6"
+
+CVE_STATUS[CVE-2023-38432] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3863] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-3865] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3866] = "fixed-version: Fixed from version 6.4"
+
+CVE_STATUS[CVE-2023-3867] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4004] = "fixed-version: Fixed from version 6.5rc3"
+
+# CVE-2023-4010 has no known resolution
+
+CVE_STATUS[CVE-2023-4015] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-40283] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4128] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4132] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4133] = "fixed-version: Fixed from version 6.3"
+
+CVE_STATUS[CVE-2023-4134] = "fixed-version: Fixed from version 6.5rc1"
+
+CVE_STATUS[CVE-2023-4147] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-4155] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-4194] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4206] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4207] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4208] = "fixed-version: Fixed from version 6.5rc5"
+
+CVE_STATUS[CVE-2023-4244] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-4273] = "fixed-version: Fixed from version 6.5rc5"
+
+# CVE-2023-42752 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-42753 needs backporting (fixed from 6.6rc1)
+
+CVE_STATUS[CVE-2023-42755] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
+
+CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-4389] = "fixed-version: Fixed from version 5.18rc3"
+
+CVE_STATUS[CVE-2023-4394] = "fixed-version: Fixed from version 6.0rc3"
+
+CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
+
+CVE_STATUS[CVE-2023-4563] = "fixed-version: Fixed from version 6.5rc6"
+
+CVE_STATUS[CVE-2023-4569] = "fixed-version: Fixed from version 6.5rc7"
+
+CVE_STATUS[CVE-2023-4611] = "fixed-version: Fixed from version 6.5rc4"
+
+CVE_STATUS[CVE-2023-4622] = "fixed-version: Fixed from version 6.5rc1"
+
+# CVE-2023-4623 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-4881 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-4921 needs backporting (fixed from 6.6rc1)
+
+# CVE-2023-5158 has no known resolution
+
+# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
+
diff --git a/poky/meta/recipes-kernel/linux/linux-dummy.bb b/poky/meta/recipes-kernel/linux/linux-dummy.bb
index 7c46f80..2396f46 100644
--- a/poky/meta/recipes-kernel/linux/linux-dummy.bb
+++ b/poky/meta/recipes-kernel/linux/linux-dummy.bb
@@ -28,7 +28,6 @@
 
 COMPATIBLE_HOST = ".*-linux"
 
-PR = "r1"
 
 SRC_URI = "file://COPYING.GPL"
 S = "${WORKDIR}"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-dev.bb b/poky/meta/recipes-kernel/linux/linux-yocto-dev.bb
index 95e3592..b594427 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-dev.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-dev.bb
@@ -14,7 +14,7 @@
 # provide this .inc to set specific revisions
 include recipes-kernel/linux/linux-yocto-dev-revisions.inc
 
-KBRANCH = "v6.5/standard/base"
+KBRANCH = "v6.6/standard/base"
 KMETA = "kernel-meta"
 
 SRC_URI = "git://git.yoctoproject.org/linux-yocto-dev.git;branch=${KBRANCH};name=machine;protocol=https \
@@ -28,7 +28,7 @@
 SRCREV_machine ?= '${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-yocto-dev", "${AUTOREV}", "29594404d7fe73cd80eaa4ee8c43dcc53970c60e", d)}'
 SRCREV_meta ?= '${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-yocto-dev", "${AUTOREV}", "29594404d7fe73cd80eaa4ee8c43dcc53970c60e", d)}'
 
-LINUX_VERSION ?= "6.5"
+LINUX_VERSION ?= "6.6"
 LINUX_VERSION_EXTENSION ?= "-yoctodev-${LINUX_KERNEL_TYPE}"
 PV = "${LINUX_VERSION}+git"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
index 5a42da2..fd04c4c 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
@@ -14,13 +14,13 @@
         raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
 }
 
-SRCREV_machine ?= "ad7c05a03b8d70ee30ecce783a861cb96ea258cf"
-SRCREV_meta ?= "f845a7f37d7114230d6609e2bd630070f2f6cd9b"
+SRCREV_machine ?= "4b3040c1dc13aaac356ad4ef45a8926118c732d0"
+SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
 
 SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
            git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.1;destsuffix=${KMETA};protocol=https"
 
-LINUX_VERSION ?= "6.1.51"
+LINUX_VERSION ?= "6.1.55"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb
index aacbea4..deb2eea 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb
@@ -14,13 +14,13 @@
         raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
 }
 
-SRCREV_machine ?= "06b99074bdc85095a2b3411dcade4a64a8e8f7c0"
-SRCREV_meta ?= "f12230a4c8a427af642be8196828a23f4562bc86"
+SRCREV_machine ?= "61c6d869af5ffb90ac64095eafdf8ba513eb21a6"
+SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
 
 SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
            git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
 
-LINUX_VERSION ?= "6.4.14"
+LINUX_VERSION ?= "6.4.16"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb
new file mode 100644
index 0000000..9b09bae
--- /dev/null
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb
@@ -0,0 +1,48 @@
+KBRANCH ?= "v6.5/standard/preempt-rt/base"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion_6.5.inc
+
+# Skip processing of this recipe if it is not explicitly specified as the
+# PREFERRED_PROVIDER for virtual/kernel. This avoids errors when trying
+# to build multiple virtual/kernel providers, e.g. as dependency of
+# core-image-rt-sdk, core-image-rt.
+python () {
+    if d.getVar("KERNEL_PACKAGE_NAME") == "kernel" and d.getVar("PREFERRED_PROVIDER_virtual/kernel") != "linux-yocto-rt":
+        raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
+}
+
+SRCREV_machine ?= "6efddc0f385fb758e7eef43d9de133b1677eb72c"
+SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
+           git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.5;destsuffix=${KMETA};protocol=https"
+
+LINUX_VERSION ?= "6.5.5"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
+DEPENDS += "openssl-native util-linux-native"
+
+PV = "${LINUX_VERSION}+git"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "1"
+
+LINUX_KERNEL_TYPE = "preempt-rt"
+
+COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm|qemuarmv5|qemuarm64|qemuppc|qemumips)$"
+
+KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
+
+# Functionality flags
+KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
+KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
+KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
index 3fd9a0e..818c650 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
@@ -8,7 +8,7 @@
 # CVE exclusions
 include recipes-kernel/linux/cve-exclusion_6.1.inc
 
-LINUX_VERSION ?= "6.1.51"
+LINUX_VERSION ?= "6.1.55"
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
 
 DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@
 KMETA = "kernel-meta"
 KCONF_BSP_AUDIT_LEVEL = "2"
 
-SRCREV_machine ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_meta ?= "f845a7f37d7114230d6609e2bd630070f2f6cd9b"
+SRCREV_machine ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
 
 PV = "${LINUX_VERSION}+git"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb
index c3a7a16..c81f230 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb
@@ -8,7 +8,7 @@
 # CVE exclusions
 include recipes-kernel/linux/cve-exclusion_6.4.inc
 
-LINUX_VERSION ?= "6.4.14"
+LINUX_VERSION ?= "6.4.16"
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
 
 DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@
 KMETA = "kernel-meta"
 KCONF_BSP_AUDIT_LEVEL = "2"
 
-SRCREV_machine ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_meta ?= "f12230a4c8a427af642be8196828a23f4562bc86"
+SRCREV_machine ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
 
 PV = "${LINUX_VERSION}+git"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb
new file mode 100644
index 0000000..5325fba
--- /dev/null
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb
@@ -0,0 +1,33 @@
+KBRANCH ?= "v6.5/standard/tiny/base"
+
+LINUX_KERNEL_TYPE = "tiny"
+KCONFIG_MODE = "--allnoconfig"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion_6.5.inc
+
+LINUX_VERSION ?= "6.5.5"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
+DEPENDS += "openssl-native util-linux-native"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "2"
+
+SRCREV_machine ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+
+PV = "${LINUX_VERSION}+git"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
+           git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.5;destsuffix=${KMETA};protocol=https"
+
+COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm64|qemuarm|qemuarmv5)$"
+
+# Functionality flags
+KERNEL_FEATURES = ""
+
+KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
index 3798ae3..a942d0c 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
@@ -18,25 +18,25 @@
 KBRANCH:qemuloongarch64  ?= "v6.1/standard/base"
 KBRANCH:qemumips64 ?= "v6.1/standard/mti-malta64"
 
-SRCREV_machine:qemuarm ?= "8c81de99a4b9f69345873b06077f9d4e1321298e"
-SRCREV_machine:qemuarm64 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemuloongarch64 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemumips ?= "733cb5842aeac106f5606df4da7c64a180f0c500"
-SRCREV_machine:qemuppc ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemuriscv64 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemuriscv32 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemux86 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemux86-64 ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_machine:qemumips64 ?= "1c11fe963667e9380725bef0650aeaea8544ea8b"
-SRCREV_machine ?= "526b5bf2f74f881356bce8b44840dc86785fb7bf"
-SRCREV_meta ?= "f845a7f37d7114230d6609e2bd630070f2f6cd9b"
+SRCREV_machine:qemuarm ?= "cf771f6d6bc0344e048bdbf7d23d3aacbe3556d0"
+SRCREV_machine:qemuarm64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemuloongarch64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemumips ?= "4be1dcc270e6ddeea513af01d91ea3b48ec82470"
+SRCREV_machine:qemuppc ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemuriscv64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemuriscv32 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemux86 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemux86-64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_machine:qemumips64 ?= "aa0e978c979b84d620ad21132cfdbbf857be3878"
+SRCREV_machine ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
+SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
 
 # set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
 # get the <version>/base branch, which is pure upstream -stable, and the same
 # meta SRCREV as the linux-yocto-standard builds. Select your version using the
 # normal PREFERRED_VERSION settings.
 BBCLASSEXTEND = "devupstream:target"
-SRCREV_machine:class-devupstream ?= "c2cbfe5f51227dfe6ef7be013f0d56a32c040faa"
+SRCREV_machine:class-devupstream ?= "d23900f974e0fb995b36ef47283a5aa74ca25f51"
 PN:class-devupstream = "linux-yocto-upstream"
 KBRANCH:class-devupstream = "v6.1/base"
 
@@ -45,7 +45,7 @@
 SRC_URI += "file://0001-perf-cpumap-Make-counter-as-unsigned-ints.patch"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "6.1.51"
+LINUX_VERSION ?= "6.1.55"
 
 PV = "${LINUX_VERSION}+git"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb
index e959b2a..5afd7b1 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb
@@ -18,25 +18,25 @@
 KBRANCH:qemuloongarch64  ?= "v6.4/standard/base"
 KBRANCH:qemumips64 ?= "v6.4/standard/mti-malta64"
 
-SRCREV_machine:qemuarm ?= "0194f88dc4ac51536f9bb2bf751d256bc5fe5d69"
-SRCREV_machine:qemuarm64 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemuloongarch64 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemumips ?= "179200623f949dde2afeca75943700a2cd0684ab"
-SRCREV_machine:qemuppc ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemuriscv64 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemuriscv32 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemux86 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemux86-64 ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_machine:qemumips64 ?= "4ce1ab0a4fce437802b0f7305289b036ffb4ccae"
-SRCREV_machine ?= "800df81fa2a8bacd6487a19115b3f89f34620249"
-SRCREV_meta ?= "f12230a4c8a427af642be8196828a23f4562bc86"
+SRCREV_machine:qemuarm ?= "871a4762a8f85550898b8992b29d5e1dbf60a459"
+SRCREV_machine:qemuarm64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemuloongarch64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemumips ?= "18bb71cbb388dd093c46d1777f607cfbf0d4c03b"
+SRCREV_machine:qemuppc ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemuriscv64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemuriscv32 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemux86 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemux86-64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_machine:qemumips64 ?= "5b9def2ea1065e44847b920c3a4185d0e5c22d58"
+SRCREV_machine ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
 
 # set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
 # get the <version>/base branch, which is pure upstream -stable, and the same
 # meta SRCREV as the linux-yocto-standard builds. Select your version using the
 # normal PREFERRED_VERSION settings.
 BBCLASSEXTEND = "devupstream:target"
-SRCREV_machine:class-devupstream ?= "babc8be398c3a0701e52582f93bfba946e9e5f8e"
+SRCREV_machine:class-devupstream ?= "ae4e4fc35b4258626644c162a702e2bce2b79190"
 PN:class-devupstream = "linux-yocto-upstream"
 KBRANCH:class-devupstream = "v6.4/base"
 
@@ -44,7 +44,7 @@
            git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "6.4.14"
+LINUX_VERSION ?= "6.4.16"
 
 PV = "${LINUX_VERSION}+git"
 
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb
new file mode 100644
index 0000000..b9ed4be
--- /dev/null
+++ b/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb
@@ -0,0 +1,72 @@
+KBRANCH ?= "v6.5/standard/base"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion.inc
+include recipes-kernel/linux/cve-exclusion_6.5.inc
+
+# board specific branches
+KBRANCH:qemuarm  ?= "v6.5/standard/arm-versatile-926ejs"
+KBRANCH:qemuarm64 ?= "v6.5/standard/qemuarm64"
+KBRANCH:qemumips ?= "v6.5/standard/mti-malta32"
+KBRANCH:qemuppc  ?= "v6.5/standard/qemuppc"
+KBRANCH:qemuriscv64  ?= "v6.5/standard/base"
+KBRANCH:qemuriscv32  ?= "v6.5/standard/base"
+KBRANCH:qemux86  ?= "v6.5/standard/base"
+KBRANCH:qemux86-64 ?= "v6.5/standard/base"
+KBRANCH:qemuloongarch64  ?= "v6.5/standard/base"
+KBRANCH:qemumips64 ?= "v6.5/standard/mti-malta64"
+
+SRCREV_machine:qemuarm ?= "619d7b434792c35b501914d481eb3178d87b9f60"
+SRCREV_machine:qemuarm64 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemuloongarch64 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemumips ?= "622b9a83a51276528ddd38ec9c239b7ef7eac1ee"
+SRCREV_machine:qemuppc ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemuriscv64 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemuriscv32 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemux86 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemux86-64 ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_machine:qemumips64 ?= "72909f2a89c5bcd4e8ab9aaab280eb961b4e1282"
+SRCREV_machine ?= "5b2595c3e0dce2912b32ef69aaaacd52cd0e720c"
+SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+
+# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
+# get the <version>/base branch, which is pure upstream -stable, and the same
+# meta SRCREV as the linux-yocto-standard builds. Select your version using the
+# normal PREFERRED_VERSION settings.
+BBCLASSEXTEND = "devupstream:target"
+SRCREV_machine:class-devupstream ?= "2309983b0ac063045af3b01b0251dfd118d45449"
+PN:class-devupstream = "linux-yocto-upstream"
+KBRANCH:class-devupstream = "v6.5/base"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH};protocol=https \
+           git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.5;destsuffix=${KMETA};protocol=https"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+LINUX_VERSION ?= "6.5.5"
+
+PV = "${LINUX_VERSION}+git"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "1"
+
+KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
+
+COMPATIBLE_MACHINE = "^(qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemuppc64|qemumips|qemumips64|qemux86-64|qemuriscv64|qemuriscv32|qemuloongarch64)$"
+
+# Functionality flags
+KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc cfg/net/mdio.scc"
+KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}"
+KERNEL_FEATURES:append:powerpc =" arch/powerpc/powerpc-debug.scc"
+KERNEL_FEATURES:append:powerpc64 =" arch/powerpc/powerpc-debug.scc"
+KERNEL_FEATURES:append:powerpc64le =" arch/powerpc/powerpc-debug.scc"
+
+INSANE_SKIP:kernel-vmlinux:qemuppc64 = "textrel"
+
diff --git a/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.10.bb b/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.10.bb
deleted file mode 100644
index 20e6375..0000000
--- a/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.10.bb
+++ /dev/null
@@ -1,195 +0,0 @@
-SECTION = "devel"
-SUMMARY = "Linux Trace Toolkit Control"
-DESCRIPTION = "The Linux trace toolkit is a suite of tools designed \
-to extract program execution details from the Linux operating system \
-and interpret them."
-HOMEPAGE = "https://github.com/lttng/lttng-tools"
-
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=40ef17463fbd6f377db3c47b1cbaded8 \
-                    file://LICENSES/GPL-2.0;md5=e68f69a54b44ba526ad7cb963e18fbce \
-                    file://LICENSES/LGPL-2.1;md5=9920968d0f2ff585ce61fae30344dd95"
-
-include lttng-platforms.inc
-
-DEPENDS = "liburcu popt libxml2 util-linux bison-native"
-RDEPENDS:${PN} = "libgcc"
-RRECOMMENDS:${PN} += "${LTTNGMODULES}"
-RDEPENDS:${PN}-ptest += "make perl bash gawk babeltrace procps perl-module-overloading coreutils util-linux kmod ${LTTNGMODULES} sed python3-core grep binutils"
-RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils"
-RDEPENDS:${PN}-ptest:append:libc-musl = " musl-utils"
-# babelstats.pl wants getopt-long
-RDEPENDS:${PN}-ptest += "perl-module-getopt-long"
-
-PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
-                 am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
-                 PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
-"
-PACKAGECONFIG ??= "${LTTNGUST} kmod"
-PACKAGECONFIG[python] = "--enable-python-bindings ${PYTHON_OPTION},,python3 swig-native"
-PACKAGECONFIG[lttng-ust] = "--with-lttng-ust, --without-lttng-ust, lttng-ust"
-PACKAGECONFIG[kmod] = "--with-kmod, --without-kmod, kmod"
-PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
-
-SRC_URI = "https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \
-           file://0001-tests-do-not-strip-a-helper-library.patch \
-           file://run-ptest \
-           file://lttng-sessiond.service \
-           file://disable-tests.patch \
-           file://0001-compat-Define-off64_t-as-off_t-on-linux.patch \
-           "
-
-SRC_URI[sha256sum] = "e5d1095ec1322565f38f149346f71967496c281eacc51ec5c77994b850e7d335"
-
-inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
-
-CACHED_CONFIGUREVARS = "PGREP=/usr/bin/pgrep"
-
-SYSTEMD_SERVICE:${PN} = "lttng-sessiond.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-USERADD_PACKAGES = "${PN}"
-GROUPADD_PARAM:${PN} = "tracing"
-
-FILES:${PN} += "${libdir}/lttng/libexec/* ${datadir}/xml/lttng \
-                ${PYTHON_SITEPACKAGES_DIR}/*"
-FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
-FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
-
-# Since files are installed into ${libdir}/lttng/libexec we match 
-# the libexec insane test so skip it.
-# Python module needs to keep _lttng.so
-INSANE_SKIP:${PN} = "libexec dev-so"
-INSANE_SKIP:${PN}-dbg = "libexec"
-
-PRIVATE_LIBS:${PN}-ptest = "libfoo.so"
-
-do_install:append () {
-    # install systemd unit file
-    install -d ${D}${systemd_system_unitdir}
-    install -m 0644 ${WORKDIR}/lttng-sessiond.service ${D}${systemd_system_unitdir}
-}
-
-do_install_ptest () {
-    for f in Makefile tests/Makefile tests/utils/utils.sh tests/regression/tools/save-load/*.lttng \
-            tests/regression/tools/save-load/configuration/load-42*.lttng tests/regression/tools/health/test_health.sh \
-            tests/regression/tools/metadata/utils.sh tests/regression/tools/rotation/rotate_utils.sh \
-            tests/regression/tools/notification/util_event_generator.sh \
-            tests/regression/tools/base-path/*.lttng; do
-        install -D "${B}/$f" "${D}${PTEST_PATH}/$f"
-    done
-
-    for f in tests/utils/tap-driver.sh config/test-driver src/common/config/session.xsd src/common/mi-lttng-4.1.xsd; do
-        install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
-    done
-
-    # Patch in the correct path for the custom libraries a helper executable needs
-    sed -i -e 's!FIXMEPTESTPATH!${PTEST_PATH}!g' "${D}${PTEST_PATH}/run-ptest"
-
-    # Prevent 'make check' from recursing into non-test subdirectories.
-    sed -i -e 's!^SUBDIRS = .*!SUBDIRS = tests!' "${D}${PTEST_PATH}/Makefile"
-
-    # We don't need these
-    sed -i -e '/dist_noinst_SCRIPTS = /,/^$/d' "${D}${PTEST_PATH}/tests/Makefile"
-
-    # We shouldn't need to build anything in tests/utils
-    sed -i -e 's!am__append_1 = . utils!am__append_1 = . !' \
-        "${D}${PTEST_PATH}/tests/Makefile"
-
-    # Copy the tests directory tree and the executables and
-    # Makefiles found within.
-    for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
-        install -d "${D}${PTEST_PATH}/tests/$d"
-        find "${B}/tests/$d" -maxdepth 1 -executable -type f \
-            -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
-        # Take all .py scripts for tests using the python bindings.
-        find "${B}/tests/$d" -maxdepth 1 -type f -name "*.py" \
-            -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
-        test -r "${B}/tests/$d/Makefile" && \
-            install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
-    done
-
-    for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
-        for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
-            cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
-            case $f in
-                *.so|userspace-probe-elf-*)
-                    install -d ${D}${PTEST_PATH}/tests/$d/
-                    ln -s  ../$f ${D}${PTEST_PATH}/tests/$d/$f
-                    # Remove any rpath/runpath to pass QA check.
-                    chrpath --delete ${D}${PTEST_PATH}/tests/$d/$f
-                    ;;
-            esac
-        done
-    done
-
-    chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary
-    chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary
-    chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libbar.so
-    chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libfoo.so
-
-    #
-    # Use the versioned libs of liblttng-ust-dl.
-    #
-    ustdl="${D}${PTEST_PATH}/tests/regression/ust/ust-dl/test_ust-dl.py"
-    if [ -e $ustdl ]; then
-        sed -i -e 's!:liblttng-ust-dl.so!:liblttng-ust-dl.so.0!' $ustdl
-    fi
-
-    install ${B}/tests/unit/ini_config/sample.ini ${D}${PTEST_PATH}/tests/unit/ini_config/
-
-    # We shouldn't need to build anything in tests/regression/tools
-    sed -i -e 's!^SUBDIRS = tools !SUBDIRS = !' \
-        "${D}${PTEST_PATH}/tests/regression/Makefile"
-
-    # Prevent attempts to update Makefiles during test runs, and
-    # silence "Making check in $SUBDIR" messages.
-    find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
-        sed -i -e '/Makefile:/,/^$/d' -e '/%: %.in/,/^$/d' \
-        -e '/echo "Making $$target in $$subdir"; \\/d' \
-        -e 's/^srcdir = \(.*\)/srcdir = ./' \
-        -e 's/^builddir = \(.*\)/builddir = ./' \
-        -e 's/^all-am:.*/all-am:/' \
-        {} +
-
-    find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
-        touch -r "${B}/Makefile" {} +
-
-    #
-    # Need to stop generated binaries from rebuilding by removing their source dependencies
-    #
-    sed -e 's#\(^test.*OBJECTS.=\)#disable\1#g' \
-        -e 's#\(^test.*DEPENDENCIES.=\)#disable\1#g' \
-        -e 's#\(^test.*SOURCES.=\)#disable\1#g' \
-        -e 's#\(^test.*LDADD.=\)#disable\1#g' \
-        -i ${D}${PTEST_PATH}/tests/unit/Makefile
-
-    # Fix hardcoded build path
-    sed -e 's#TESTAPP_PATH=.*/tests/regression/#TESTAPP_PATH="${PTEST_PATH}/tests/regression/#' \
-        -i ${D}${PTEST_PATH}/tests/regression/ust/python-logging/test_python_logging
-
-    # Substitute links to installed binaries.
-    for prog in lttng lttng-relayd lttng-sessiond lttng-consumerd lttng-crash; do
-        exedir="${D}${PTEST_PATH}/src/bin/${prog}"
-        install -d "$exedir"
-        case "$prog" in
-            lttng-consumerd)
-                ln -s "${libdir}/lttng/libexec/$prog" "$exedir"
-                ;;
-            *)
-                ln -s "${bindir}/$prog" "$exedir"
-                ;;
-        esac
-    done
-}
-
-INHIBIT_PACKAGE_STRIP_FILES = "\
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/.libs/userspace-probe-elf-cxx-binary \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/gen-syscall-events \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/.libs/gen-syscall-events \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/gen-syscall-events-callstack \
-    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/.libs/gen-syscall-events-callstack \
-    "
diff --git a/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.11.bb b/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.11.bb
new file mode 100644
index 0000000..44415fb
--- /dev/null
+++ b/poky/meta/recipes-kernel/lttng/lttng-tools_2.13.11.bb
@@ -0,0 +1,195 @@
+SECTION = "devel"
+SUMMARY = "Linux Trace Toolkit Control"
+DESCRIPTION = "The Linux trace toolkit is a suite of tools designed \
+to extract program execution details from the Linux operating system \
+and interpret them."
+HOMEPAGE = "https://github.com/lttng/lttng-tools"
+
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=40ef17463fbd6f377db3c47b1cbaded8 \
+                    file://LICENSES/GPL-2.0;md5=e68f69a54b44ba526ad7cb963e18fbce \
+                    file://LICENSES/LGPL-2.1;md5=9920968d0f2ff585ce61fae30344dd95"
+
+include lttng-platforms.inc
+
+DEPENDS = "liburcu popt libxml2 util-linux bison-native"
+RDEPENDS:${PN} = "libgcc"
+RRECOMMENDS:${PN} += "${LTTNGMODULES}"
+RDEPENDS:${PN}-ptest += "make perl bash gawk babeltrace procps perl-module-overloading coreutils util-linux kmod ${LTTNGMODULES} sed python3-core grep binutils"
+RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils"
+RDEPENDS:${PN}-ptest:append:libc-musl = " musl-utils"
+# babelstats.pl wants getopt-long
+RDEPENDS:${PN}-ptest += "perl-module-getopt-long"
+
+PYTHON_OPTION = "am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \
+                 am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \
+                 PYTHON_INCLUDE='-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}' \
+"
+PACKAGECONFIG ??= "${LTTNGUST} kmod"
+PACKAGECONFIG[python] = "--enable-python-bindings ${PYTHON_OPTION},,python3 swig-native"
+PACKAGECONFIG[lttng-ust] = "--with-lttng-ust, --without-lttng-ust, lttng-ust"
+PACKAGECONFIG[kmod] = "--with-kmod, --without-kmod, kmod"
+PACKAGECONFIG[manpages] = "--enable-man-pages, --disable-man-pages, asciidoc-native xmlto-native libxslt-native"
+
+SRC_URI = "https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \
+           file://0001-tests-do-not-strip-a-helper-library.patch \
+           file://run-ptest \
+           file://lttng-sessiond.service \
+           file://disable-tests.patch \
+           file://0001-compat-Define-off64_t-as-off_t-on-linux.patch \
+           "
+
+SRC_URI[sha256sum] = "ac5baeef9fa690936b1ca01ecd1742da762c2c08511ff1b4e923938d94d0f979"
+
+inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
+
+CACHED_CONFIGUREVARS = "PGREP=/usr/bin/pgrep"
+
+SYSTEMD_SERVICE:${PN} = "lttng-sessiond.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "tracing"
+
+FILES:${PN} += "${libdir}/lttng/libexec/* ${datadir}/xml/lttng \
+                ${PYTHON_SITEPACKAGES_DIR}/*"
+FILES:${PN}-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a"
+FILES:${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
+
+# Since files are installed into ${libdir}/lttng/libexec we match 
+# the libexec insane test so skip it.
+# Python module needs to keep _lttng.so
+INSANE_SKIP:${PN} = "libexec dev-so"
+INSANE_SKIP:${PN}-dbg = "libexec"
+
+PRIVATE_LIBS:${PN}-ptest = "libfoo.so"
+
+do_install:append () {
+    # install systemd unit file
+    install -d ${D}${systemd_system_unitdir}
+    install -m 0644 ${WORKDIR}/lttng-sessiond.service ${D}${systemd_system_unitdir}
+}
+
+do_install_ptest () {
+    for f in Makefile tests/Makefile tests/utils/utils.sh tests/regression/tools/save-load/*.lttng \
+            tests/regression/tools/save-load/configuration/load-42*.lttng tests/regression/tools/health/test_health.sh \
+            tests/regression/tools/metadata/utils.sh tests/regression/tools/rotation/rotate_utils.sh \
+            tests/regression/tools/notification/util_event_generator.sh \
+            tests/regression/tools/base-path/*.lttng; do
+        install -D "${B}/$f" "${D}${PTEST_PATH}/$f"
+    done
+
+    for f in tests/utils/tap-driver.sh config/test-driver src/common/config/session.xsd src/common/mi-lttng-4.1.xsd; do
+        install -D "${S}/$f" "${D}${PTEST_PATH}/$f"
+    done
+
+    # Patch in the correct path for the custom libraries a helper executable needs
+    sed -i -e 's!FIXMEPTESTPATH!${PTEST_PATH}!g' "${D}${PTEST_PATH}/run-ptest"
+
+    # Prevent 'make check' from recursing into non-test subdirectories.
+    sed -i -e 's!^SUBDIRS = .*!SUBDIRS = tests!' "${D}${PTEST_PATH}/Makefile"
+
+    # We don't need these
+    sed -i -e '/dist_noinst_SCRIPTS = /,/^$/d' "${D}${PTEST_PATH}/tests/Makefile"
+
+    # We shouldn't need to build anything in tests/utils
+    sed -i -e 's!am__append_1 = . utils!am__append_1 = . !' \
+        "${D}${PTEST_PATH}/tests/Makefile"
+
+    # Copy the tests directory tree and the executables and
+    # Makefiles found within.
+    for d in $(find "${B}/tests" -type d -not -name .libs -printf '%P ') ; do
+        install -d "${D}${PTEST_PATH}/tests/$d"
+        find "${B}/tests/$d" -maxdepth 1 -executable -type f \
+            -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+        # Take all .py scripts for tests using the python bindings.
+        find "${B}/tests/$d" -maxdepth 1 -type f -name "*.py" \
+            -exec install -t "${D}${PTEST_PATH}/tests/$d" {} +
+        test -r "${B}/tests/$d/Makefile" && \
+            install -t "${D}${PTEST_PATH}/tests/$d" "${B}/tests/$d/Makefile"
+    done
+
+    for d in $(find "${B}/tests" -type d -name .libs -printf '%P ') ; do
+        for f in $(find "${B}/tests/$d" -maxdepth 1 -executable -type f -printf '%P ') ; do
+            cp ${B}/tests/$d/$f ${D}${PTEST_PATH}/tests/`dirname $d`/$f
+            case $f in
+                *.so|userspace-probe-elf-*)
+                    install -d ${D}${PTEST_PATH}/tests/$d/
+                    ln -s  ../$f ${D}${PTEST_PATH}/tests/$d/$f
+                    # Remove any rpath/runpath to pass QA check.
+                    chrpath --delete ${D}${PTEST_PATH}/tests/$d/$f
+                    ;;
+            esac
+        done
+    done
+
+    chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary
+    chrpath --delete ${D}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary
+    chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libbar.so
+    chrpath --delete ${D}${PTEST_PATH}/tests/regression/ust/ust-dl/libfoo.so
+
+    #
+    # Use the versioned libs of liblttng-ust-dl.
+    #
+    ustdl="${D}${PTEST_PATH}/tests/regression/ust/ust-dl/test_ust-dl.py"
+    if [ -e $ustdl ]; then
+        sed -i -e 's!:liblttng-ust-dl.so!:liblttng-ust-dl.so.0!' $ustdl
+    fi
+
+    install ${B}/tests/unit/ini_config/sample.ini ${D}${PTEST_PATH}/tests/unit/ini_config/
+
+    # We shouldn't need to build anything in tests/regression/tools
+    sed -i -e 's!^SUBDIRS = tools !SUBDIRS = !' \
+        "${D}${PTEST_PATH}/tests/regression/Makefile"
+
+    # Prevent attempts to update Makefiles during test runs, and
+    # silence "Making check in $SUBDIR" messages.
+    find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+        sed -i -e '/Makefile:/,/^$/d' -e '/%: %.in/,/^$/d' \
+        -e '/echo "Making $$target in $$subdir"; \\/d' \
+        -e 's/^srcdir = \(.*\)/srcdir = ./' \
+        -e 's/^builddir = \(.*\)/builddir = ./' \
+        -e 's/^all-am:.*/all-am:/' \
+        {} +
+
+    find "${D}${PTEST_PATH}" -name Makefile -type f -exec \
+        touch -r "${B}/Makefile" {} +
+
+    #
+    # Need to stop generated binaries from rebuilding by removing their source dependencies
+    #
+    sed -e 's#\(^test.*OBJECTS.=\)#disable\1#g' \
+        -e 's#\(^test.*DEPENDENCIES.=\)#disable\1#g' \
+        -e 's#\(^test.*SOURCES.=\)#disable\1#g' \
+        -e 's#\(^test.*LDADD.=\)#disable\1#g' \
+        -i ${D}${PTEST_PATH}/tests/unit/Makefile
+
+    # Fix hardcoded build path
+    sed -e 's#TESTAPP_PATH=.*/tests/regression/#TESTAPP_PATH="${PTEST_PATH}/tests/regression/#' \
+        -i ${D}${PTEST_PATH}/tests/regression/ust/python-logging/test_python_logging
+
+    # Substitute links to installed binaries.
+    for prog in lttng lttng-relayd lttng-sessiond lttng-consumerd lttng-crash; do
+        exedir="${D}${PTEST_PATH}/src/bin/${prog}"
+        install -d "$exedir"
+        case "$prog" in
+            lttng-consumerd)
+                ln -s "${libdir}/lttng/libexec/$prog" "$exedir"
+                ;;
+            *)
+                ln -s "${bindir}/$prog" "$exedir"
+                ;;
+        esac
+    done
+}
+
+INHIBIT_PACKAGE_STRIP_FILES = "\
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/userspace-probe-elf-binary \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-binary/.libs/userspace-probe-elf-binary \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/userspace-probe-elf-cxx-binary \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/userspace-probe-elf-cxx-binary/.libs/userspace-probe-elf-cxx-binary \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/gen-syscall-events \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events/.libs/gen-syscall-events \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/gen-syscall-events-callstack \
+    ${PKGD}${PTEST_PATH}/tests/utils/testapp/gen-syscall-events-callstack/.libs/gen-syscall-events-callstack \
+    "
diff --git a/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb b/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
index 8f4fdd7..b630a40 100644
--- a/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
+++ b/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
@@ -4,7 +4,6 @@
 LIC_FILES_CHKSUM = "file://modutils.sh;beginline=3;endline=3;md5=b2dccaa94b3629a08bfb4f983cad6f89"
 SRC_URI = "file://modutils.sh"
 
-PR = "r7"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-kernel/perf/perf.bb b/poky/meta/recipes-kernel/perf/perf.bb
index e22a1be..675acfa 100644
--- a/poky/meta/recipes-kernel/perf/perf.bb
+++ b/poky/meta/recipes-kernel/perf/perf.bb
@@ -9,7 +9,6 @@
 
 LICENSE = "GPL-2.0-only"
 
-PR = "r9"
 
 PACKAGECONFIG ??= "python tui libunwind libtraceevent"
 PACKAGECONFIG[dwarf] = ",NO_DWARF=1"
diff --git a/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.05.03.bb b/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.05.03.bb
deleted file mode 100644
index cd3f52f..0000000
--- a/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.05.03.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "Wireless Central Regulatory Domain Database"
-HOMEPAGE = "https://wireless.wiki.kernel.org/en/developers/regulatory/crda"
-SECTION = "net"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
-
-SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "f254d08ab3765aeae2b856222e11a95d44aef519a6663877c71ef68fae4c8c12"
-
-inherit bin_package allarch
-
-do_install() {
-    install -d -m0755 ${D}${nonarch_libdir}/crda
-    install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
-    install -m 0644 regulatory.bin ${D}${nonarch_libdir}/crda/regulatory.bin
-    install -m 0644 sforshee.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/sforshee.key.pub.pem
-
-    install -m 0644 -D regulatory.db ${D}${nonarch_base_libdir}/firmware/regulatory.db
-    install -m 0644 regulatory.db.p7s ${D}${nonarch_base_libdir}/firmware/regulatory.db.p7s
-}
-
-# Install static regulatory DB in /lib/firmware for kernel to load.
-# This requires Linux kernel >= v4.15.
-# For kernel <= v4.14, inherit the kernel_wireless_regdb.bbclass
-# (in meta-networking) in kernel's recipe.
-PACKAGES = "${PN}-static ${PN}"
-RCONFLICTS:${PN} = "${PN}-static"
-
-FILES:${PN}-static = " \
-    ${nonarch_base_libdir}/firmware/regulatory.db \
-    ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
-"
-
-# Native users might want to use the source of regulatory DB.
-# This is for example used by Linux kernel <= v4.14 and
-# kernel_wireless_regdb.bbclass in meta-networking.
-do_install:append:class-native() {
-    install -m 0644 -D db.txt ${D}${libdir}/crda/db.txt
-}
-
-RSUGGESTS:${PN} = "crda"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.09.01.bb b/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.09.01.bb
new file mode 100644
index 0000000..c09600e
--- /dev/null
+++ b/poky/meta/recipes-kernel/wireless-regdb/wireless-regdb_2023.09.01.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Wireless Central Regulatory Domain Database"
+HOMEPAGE = "https://wireless.wiki.kernel.org/en/developers/regulatory/crda"
+SECTION = "net"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
+
+SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "26d4c2a727cc59239b84735aad856b7c7d0b04e30aa5c235c4f7f47f5f053491"
+
+inherit bin_package allarch
+
+do_install() {
+    install -d -m0755 ${D}${nonarch_libdir}/crda
+    install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
+    install -m 0644 regulatory.bin ${D}${nonarch_libdir}/crda/regulatory.bin
+    install -m 0644 sforshee.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/sforshee.key.pub.pem
+
+    install -m 0644 -D regulatory.db ${D}${nonarch_base_libdir}/firmware/regulatory.db
+    install -m 0644 regulatory.db.p7s ${D}${nonarch_base_libdir}/firmware/regulatory.db.p7s
+}
+
+# Install static regulatory DB in /lib/firmware for kernel to load.
+# This requires Linux kernel >= v4.15.
+# For kernel <= v4.14, inherit the kernel_wireless_regdb.bbclass
+# (in meta-networking) in kernel's recipe.
+PACKAGES = "${PN}-static ${PN}"
+RCONFLICTS:${PN} = "${PN}-static"
+
+FILES:${PN}-static = " \
+    ${nonarch_base_libdir}/firmware/regulatory.db \
+    ${nonarch_base_libdir}/firmware/regulatory.db.p7s \
+"
+
+# Native users might want to use the source of regulatory DB.
+# This is for example used by Linux kernel <= v4.14 and
+# kernel_wireless_regdb.bbclass in meta-networking.
+do_install:append:class-native() {
+    install -m 0644 -D db.txt ${D}${libdir}/crda/db.txt
+}
+
+RSUGGESTS:${PN} = "crda"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-global.h-move-__STRING-macro-outside-PIC-ifdef-block.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-global.h-move-__STRING-macro-outside-PIC-ifdef-block.patch
new file mode 100644
index 0000000..9a7ba0d
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-global.h-move-__STRING-macro-outside-PIC-ifdef-block.patch
@@ -0,0 +1,52 @@
+From 10bd599970acc71c92f85eb08943eb8d3d702a9c Mon Sep 17 00:00:00 2001
+From: Michael Opdenacker <michael.opdenacker@bootlin.com>
+Date: Wed, 6 Sep 2023 15:16:44 +0200
+Subject: [PATCH] global.h: move __STRING() macro outside !PIC ifdef block
+
+From: Jaroslav Kysela <perex@perex.cz>
+
+It solves the musl libc compilation issue.
+
+control.c: In function 'snd_ctl_open_conf':
+../../include/global.h:98:36: warning: implicit declaration of function '__STRING' [-Wimplicit-function-declaratio]
+   98 | #define SND_DLSYM_VERSION(version) __STRING(version)
+      |                                    ^~~~~~~~
+
+Fixes: https://github.com/alsa-project/alsa-lib/issues/350
+Upstream-Status: Backport [https://github.com/alsa-project/alsa-lib/commit/10bd599970acc71c92f85eb08943eb8d3d702a9c]
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+---
+ include/global.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/include/global.h b/include/global.h
+index dfe9bc2b..3ecaeee8 100644
+--- a/include/global.h
++++ b/include/global.h
+@@ -51,6 +51,11 @@ const char *snd_asoundlib_version(void);
+ #define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+ #endif
+ 
++#ifndef __STRING
++/** \brief Return 'x' argument as string */
++#define __STRING(x)     #x
++#endif
++
+ #ifdef PIC /* dynamic build */
+ 
+ /** \hideinitializer \brief Helper macro for #SND_DLSYM_BUILD_VERSION. */
+@@ -71,11 +76,6 @@ struct snd_dlsym_link {
+ 
+ extern struct snd_dlsym_link *snd_dlsym_start;
+ 
+-#ifndef __STRING
+-/** \brief Return 'x' argument as string */
+-#define __STRING(x)     #x
+-#endif
+-
+ /** \hideinitializer \brief Helper macro for #SND_DLSYM_BUILD_VERSION. */
+ #define __SND_DLSYM_VERSION(prefix, name, version) _ ## prefix ## name ## version
+ /**
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.10.bb b/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.10.bb
new file mode 100644
index 0000000..83bc687
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.10.bb
@@ -0,0 +1,46 @@
+SUMMARY = "ALSA sound library"
+DESCRIPTION = "(Occasionally a.k.a. libasound) is a userspace library that \
+provides a level of abstraction over the /dev interfaces provided by the kernel modules."
+HOMEPAGE = "http://www.alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.1-only & GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
+                    file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
+                    "
+
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2 \
+           file://0001-global.h-move-__STRING-macro-outside-PIC-ifdef-block.patch \
+           "
+SRC_URI[sha256sum] = "c86a45a846331b1b0aa6e6be100be2a7aef92efd405cf6bac7eef8174baa920e"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += " \
+    ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \
+    --disable-python --disable-old-symbols \
+"
+
+PACKAGES =+ "alsa-server alsa-conf libatopology"
+
+FILES:alsa-server = "${bindir}/*"
+FILES:alsa-conf = "${datadir}/alsa/"
+FILES:libatopology = "${libdir}/libatopology.so.*"
+
+RDEPENDS:${PN}:class-target = "alsa-conf alsa-ucm-conf"
+RDEPENDS:libatopology:class-target = "alsa-topology-conf"
+
+# upgrade path
+RPROVIDES:${PN} = "libasound"
+RREPLACES:${PN} = "libasound"
+RCONFLICTS:${PN} = "libasound"
+
+RPROVIDES:${PN}-dev = "alsa-dev"
+RREPLACES:${PN}-dev = "alsa-dev"
+RCONFLICTS:${PN}-dev = "alsa-dev"
+
+RPROVIDES:alsa-conf = "alsa-conf-base"
+RREPLACES:alsa-conf = "alsa-conf-base"
+RCONFLICTS:alsa-conf = "alsa-conf-base"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.9.bb b/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.9.bb
deleted file mode 100644
index d482e27..0000000
--- a/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.9.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "ALSA sound library"
-DESCRIPTION = "(Occasionally a.k.a. libasound) is a userspace library that \
-provides a level of abstraction over the /dev interfaces provided by the kernel modules."
-HOMEPAGE = "http://www.alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "libs/multimedia"
-LICENSE = "LGPL-2.1-only & GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
-                    file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
-                    "
-
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "dc9c643fdc4ccfd0572cc685858dd41e08afb583f30460b317e4188275f615b2"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF += " \
-    ${@bb.utils.contains('TARGET_FPU', 'soft', '--with-softfloat', '', d)} \
-    --disable-python --disable-old-symbols \
-"
-
-PACKAGES =+ "alsa-server alsa-conf libatopology"
-
-FILES:alsa-server = "${bindir}/*"
-FILES:alsa-conf = "${datadir}/alsa/"
-FILES:libatopology = "${libdir}/libatopology.so.*"
-
-RDEPENDS:${PN}:class-target = "alsa-conf alsa-ucm-conf"
-RDEPENDS:libatopology:class-target = "alsa-topology-conf"
-
-# upgrade path
-RPROVIDES:${PN} = "libasound"
-RREPLACES:${PN} = "libasound"
-RCONFLICTS:${PN} = "libasound"
-
-RPROVIDES:${PN}-dev = "alsa-dev"
-RREPLACES:${PN}-dev = "alsa-dev"
-RCONFLICTS:${PN}-dev = "alsa-dev"
-
-RPROVIDES:alsa-conf = "alsa-conf-base"
-RREPLACES:alsa-conf = "alsa-conf-base"
-RCONFLICTS:alsa-conf = "alsa-conf-base"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.10.bb b/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.10.bb
new file mode 100644
index 0000000..f4fd284
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.10.bb
@@ -0,0 +1,24 @@
+SUMMARY = "ALSA Use Case Manager configuration"
+DESCRIPTION = "This package contains ALSA Use Case Manager configuration \
+of audio input/output names and routing for specific audio hardware. \
+They can be used with the alsaucm tool. "
+HOMEPAGE = "https://alsa-project.org"
+BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
+
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "9c21e3f01ff00baa758df17e867cd36e24ebb41a6bec49737e99105e16f2ae97"
+# Something went wrong at upstream tarballing
+
+inherit allarch
+
+do_install() {
+        install -d "${D}${datadir}/alsa"
+        cp -r "${S}/ucm" "${D}${datadir}/alsa"
+        cp -r "${S}/ucm2" "${D}${datadir}/alsa"
+}
+
+PACKAGES = "${PN}"
+
+FILES:${PN} = "*"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.9.bb b/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.9.bb
deleted file mode 100644
index 073e3b0..0000000
--- a/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.9.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "ALSA Use Case Manager configuration"
-DESCRIPTION = "This package contains ALSA Use Case Manager configuration \
-of audio input/output names and routing for specific audio hardware. \
-They can be used with the alsaucm tool. "
-HOMEPAGE = "https://alsa-project.org"
-BUGTRACKER = "https://alsa-project.org/wiki/Bug_Tracking"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
-
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "374f6833bfd77d0a4675e4aa2bfb79defe850e5a46a5d4542a45962f4b9e272a"
-# Something went wrong at upstream tarballing
-
-inherit allarch
-
-do_install() {
-        install -d "${D}${datadir}/alsa"
-        cp -r "${S}/ucm" "${D}${datadir}/alsa"
-        cp -r "${S}/ucm2" "${D}${datadir}/alsa"
-}
-
-PACKAGES = "${PN}"
-
-FILES:${PN} = "*"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-add-define-to-compile-with-glibc-2.38.patch b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-add-define-to-compile-with-glibc-2.38.patch
deleted file mode 100644
index 8c23fb2..0000000
--- a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-add-define-to-compile-with-glibc-2.38.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From a610f4c21b083c0f9cf62ad2251dfadc98abb50e Mon Sep 17 00:00:00 2001
-From: Rudi Heitbaum <rudi@heitbaum.com>
-Date: Sat, 22 Jul 2023 15:36:09 +0000
-Subject: [PATCH] alsactl: add define to compile with glibc 2.38
-
-strlcat and strlcpy have been added to glibc 2.38.
-update the defines to use the glibc versions, and not conflict with
-string.h.
-
-ref:
-- https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199
-
-Fixes: https://github.com/alsa-project/alsa-utils/pull/225
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-
-Upstream-Status: Backport [https://github.com/alsa-project/alsa-utils/commit/d6a71bfbde9e1710743d3a446c6ea3b41c45234e]
----
- alsactl/init_sysdeps.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/alsactl/init_sysdeps.c b/alsactl/init_sysdeps.c
-index 3aca1b4..f09b1ae 100644
---- a/alsactl/init_sysdeps.c
-+++ b/alsactl/init_sysdeps.c
-@@ -18,6 +18,7 @@
-  */
- 
- #if defined(__GLIBC__) && !(defined(__UCLIBC__) && defined(__USE_BSD))
-+#if !(__GLIBC_PREREQ(2, 38))
- static size_t strlcpy(char *dst, const char *src, size_t size)
- {
- 	size_t bytes = 0;
-@@ -60,4 +61,5 @@ static size_t strlcat(char *dst, const char *src, size_t size)
- 	*q = '\0';
- 	return bytes;
- }
-+#endif /* !(__GLIBC_PREREQ(2, 38)) */
- #endif /* __GLIBC__ */
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-fix-compilation-when-building-in-a-subdir.patch b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-fix-compilation-when-building-in-a-subdir.patch
deleted file mode 100644
index 3b3fe53..0000000
--- a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-fix-compilation-when-building-in-a-subdir.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 44636a7c5862538def0d2fac074772cc39a22a15 Mon Sep 17 00:00:00 2001
-From: Rudi Heitbaum <rudi@heitbaum.com>
-Date: Tue, 16 May 2023 02:27:59 +1000
-Subject: [PATCH] alsactl: fix compilation when building in a subdir
-
-Fixes: 613372d
-Fixes: cff2d1c
-
-Compile errors when building in a subdir:
-alsactl/alsactl.c:33:10: fatal error: os_compat.h: No such file or directory
-   33 | #include "os_compat.h"
-      |          ^~~~~~~~~~~~~
-alsactl/lock.c:34:10: fatal error: os_compat.h: No such file or directory
-   34 | #include "os_compat.h"
-      |          ^~~~~~~~~~~~~
-
-Signed-off-by: Rudi Heitbaum <rudi@heitbaum.com>
-Upstream-Status: Submitted [https://github.com/alsa-project/alsa-utils/pull/213]
----
- alsactl/Makefile.am | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/alsactl/Makefile.am b/alsactl/Makefile.am
-index 80dba69d..fb32c4f3 100644
---- a/alsactl/Makefile.am
-+++ b/alsactl/Makefile.am
-@@ -9,6 +9,8 @@ EXTRA_DIST=alsactl.1 alsactl_init.xml
- 
- AM_CFLAGS = -D_GNU_SOURCE
- 
-+AM_CPPFLAGS = -I$(top_srcdir)/include
-+
- alsactl_SOURCES=alsactl.c state.c lock.c utils.c init_parse.c init_ucm.c \
- 		daemon.c monitor.c clean.c info.c
- 
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-nhlt-nhlt-dmic-info.c-include-sys-types.h.patch b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-nhlt-nhlt-dmic-info.c-include-sys-types.h.patch
new file mode 100644
index 0000000..0ebf98b
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-nhlt-nhlt-dmic-info.c-include-sys-types.h.patch
@@ -0,0 +1,31 @@
+From 35a3382f3818d29b60f4c888e338189a4d93d0e5 Mon Sep 17 00:00:00 2001
+From: Michael Opdenacker <michael.opdenacker@bootlin.com>
+Date: Tue, 19 Sep 2023 11:47:50 +0200
+Subject: [PATCH] nhlt/nhlt-dmic-info.c: include sys/types.h
+
+To fix an issue compiling with the musl C library:
+nhlt-dmic-info.c: error: unknown type name 'u_int8_t'
+
+https://github.com/alsa-project/alsa-utils/issues/238
+
+Upstream-Status: Backport [https://github.com/alsa-project/alsa-utils/commit/0925ad7f09b2dc77015784f9ac2f5e34dd0dd5c3]
+Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
+---
+ nhlt/nhlt-dmic-info.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/nhlt/nhlt-dmic-info.c b/nhlt/nhlt-dmic-info.c
+index 3f6c64d..331555a 100644
+--- a/nhlt/nhlt-dmic-info.c
++++ b/nhlt/nhlt-dmic-info.c
+@@ -33,6 +33,7 @@
+ #include <fcntl.h>
+ #include <getopt.h>
+ #include <sys/stat.h>
++#include <sys/types.h>
+ #include <arpa/inet.h>
+ 
+ int debug = 0;
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-topology.c-include-locale.h.patch b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-topology.c-include-locale.h.patch
new file mode 100644
index 0000000..e1c7470
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils/0001-topology.c-include-locale.h.patch
@@ -0,0 +1,31 @@
+From d8a8a9affd5726827ef3995652248595b4a8c87e Mon Sep 17 00:00:00 2001
+From: Michael Opdenacker <michael.opdenacker@bootlin.com>
+Date: Tue, 19 Sep 2023 11:27:46 +0200
+Subject: [PATCH] topology.c: include locale.h
+
+To fix an issue compiling with the musl C library:
+topology.c: error: 'LC_ALL' undeclared
+
+https://github.com/alsa-project/alsa-utils/issues/239
+
+Upstream-Status: Backport [https://github.com/alsa-project/alsa-utils/commit/8c229270f6bae83b705a03714c46067a7aa57b02]
+Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
+---
+ topology/topology.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/topology/topology.c b/topology/topology.c
+index 1840ffe..5d03a8b 100644
+--- a/topology/topology.c
++++ b/topology/topology.c
+@@ -32,6 +32,7 @@
+ #include <sys/stat.h>
+ #include <getopt.h>
+ #include <assert.h>
++#include <locale.h>
+ 
+ #include <alsa/asoundlib.h>
+ #include <alsa/topology.h>
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.10.bb b/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.10.bb
new file mode 100644
index 0000000..4e5ed8d
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.10.bb
@@ -0,0 +1,126 @@
+SUMMARY = "ALSA sound utilities"
+DESCRIPTION = "collection of small and often extremely powerful applications \
+designed to allow users to control the various parts of the ALSA system."
+HOMEPAGE = "http://www.alsa-project.org"
+BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
+SECTION = "console/utils"
+# Some parts are GPL-2.0-or-later, some are GPL-2.0-only (e.g. axfer, alsactl)
+# so result is GPL-2.0-only
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+                    file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642"
+DEPENDS = "alsa-lib ncurses libsamplerate0"
+
+PACKAGECONFIG ??= "udev"
+
+# alsabat can be built also without fftw support (with reduced functionality).
+# It would be better to always enable alsabat, but provide an option for
+# enabling/disabling fftw. The configure script doesn't support that, however
+# (at least in any obvious way), so for now we only support alsabat with fftw
+# or no alsabat at all.
+PACKAGECONFIG[bat] = "--enable-bat,--disable-bat,fftwf"
+
+PACKAGECONFIG[udev] = "--with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d,--with-udev-rules-dir=/unwanted/rules.d,udev"
+PACKAGECONFIG[manpages] = "--enable-xmlto, --disable-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
+
+# alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe
+SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2 \
+           file://0001-topology.c-include-locale.h.patch \
+           file://0001-nhlt-nhlt-dmic-info.c-include-sys-types.h.patch \
+           "
+SRC_URI[sha256sum] = "104b62ec7f02a7ce16ca779f4815616df1cc21933503783a9107b5944f83063a"
+
+# On build machines with python-docutils (not python3-docutils !!) installed
+# rst2man (not rst2man.py) is detected and compile fails with
+# | make[1]: *** No rule to make target 'alsaucm.1', needed by 'all-am'.  Stop.
+# Avoid this by disabling expicitly
+EXTRA_OECONF = "--disable-rst2man"
+
+inherit autotools gettext pkgconfig manpages
+
+# This are all packages that we need to make. Also, the now empty alsa-utils
+# ipk depends on them.
+
+ALSA_UTILS_PKGS = "\
+             ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'alsa-utils-alsabat', '', d)} \
+             alsa-utils-alsamixer \
+             alsa-utils-alsatplg \
+             alsa-utils-midi \
+             alsa-utils-aplay \
+             alsa-utils-amixer \
+             alsa-utils-aconnect \
+             alsa-utils-iecset \
+             alsa-utils-speakertest \
+             alsa-utils-aseqnet \
+             alsa-utils-aseqdump \
+             alsa-utils-alsactl \
+             alsa-utils-alsaloop \
+             alsa-utils-alsaucm \
+             alsa-utils-scripts \
+             alsa-utils-nhltdmicinfo \
+            "
+
+PACKAGES += "${ALSA_UTILS_PKGS}"
+RDEPENDS:${PN} += "${ALSA_UTILS_PKGS}"
+
+FILES:${PN} = ""
+ALLOW_EMPTY:alsa-utils = "1"
+FILES:alsa-utils-alsabat     = "${bindir}/alsabat"
+FILES:alsa-utils-alsatplg    = "${bindir}/alsatplg ${libdir}/alsa-topology"
+FILES:alsa-utils-aplay       = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer"
+FILES:alsa-utils-amixer      = "${bindir}/amixer"
+FILES:alsa-utils-alsamixer   = "${bindir}/alsamixer"
+FILES:alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/"
+FILES:alsa-utils-midi        = "${bindir}/aplaymidi ${bindir}/arecordmidi ${bindir}/amidi"
+FILES:alsa-utils-aconnect    = "${bindir}/aconnect"
+FILES:alsa-utils-aseqnet     = "${bindir}/aseqnet"
+FILES:alsa-utils-iecset      = "${bindir}/iecset"
+FILES:alsa-utils-alsactl     = "${sbindir}/alsactl */udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/"
+FILES:alsa-utils-aseqdump    = "${bindir}/aseqdump"
+FILES:alsa-utils-alsaloop    = "${bindir}/alsaloop"
+FILES:alsa-utils-alsaucm     = "${bindir}/alsaucm */udev/rules.d/89-alsa-ucm.rules */*/udev/rules.d/89-alsa-ucm.rules"
+FILES:alsa-utils-scripts     = "${sbindir}/alsaconf \
+               ${sbindir}/alsa-info.sh \
+               ${sbindir}/alsabat-test.sh \
+              "
+FILES:alsa-utils-nhltdmicinfo = "${bindir}/nhlt-dmic-info"
+
+SUMMARY:alsa-utils-alsabat      = "Command-line sound tester for ALSA sound card driver"
+SUMMARY:alsa-utils-alsatplg     = "Converts topology text files into binary format for kernel"
+SUMMARY:alsa-utils-aplay        = "Play (and record) sound files using ALSA"
+SUMMARY:alsa-utils-amixer       = "Command-line control for ALSA mixer and settings"
+SUMMARY:alsa-utils-alsamixer    = "ncurses-based control for ALSA mixer and settings"
+SUMMARY:alsa-utils-speakertest  = "ALSA surround speaker test utility"
+SUMMARY:alsa-utils-midi         = "Miscellaneous MIDI utilities for ALSA"
+SUMMARY:alsa-utils-aconnect     = "ALSA sequencer connection manager"
+SUMMARY:alsa-utils-aseqnet      = "Network client/server for ALSA sequencer"
+SUMMARY:alsa-utils-iecset       = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits"
+SUMMARY:alsa-utils-alsactl      = "Saves/restores ALSA-settings in /etc/asound.state"
+SUMMARY:alsa-utils-aseqdump     = "Shows the events received at an ALSA sequencer port"
+SUMMARY:alsa-utils-alsaloop     = "ALSA PCM loopback utility"
+SUMMARY:alsa-utils-alsaucm      = "ALSA Use Case Manager"
+SUMMARY:alsa-utils-scripts      = "Shell scripts that show help info and create ALSA configuration files"
+SUMMARY:alsa-utils-nhltdmicinfo = "Dumps microphone array information from ACPI NHLT table"
+
+RRECOMMENDS:alsa-utils-alsactl = "alsa-states"
+
+do_install() {
+	autotools_do_install
+
+	install -d ${D}${sbindir}
+	install -m 0755 ${B}/alsaconf/alsaconf ${D}${sbindir}/
+	install -m 0755 ${S}/alsa-info/alsa-info.sh ${D}${sbindir}/
+	if ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'true', 'false', d)}; then
+		install -m 0755 ${S}/bat/alsabat-test.sh ${D}${sbindir}/
+	fi
+
+	# If udev is disabled, we told configure to install the rules
+	# in /unwanted, so we can remove them now. If udev is enabled,
+	# then /unwanted won't exist and this will have no effect.
+	rm -rf ${D}/unwanted
+}
+
+
+PROVIDES = "alsa-utils-alsaconf alsa-utils-scripts"
+
+RDEPENDS:${PN}-scripts += "bash"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.9.bb b/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.9.bb
deleted file mode 100644
index af28f54..0000000
--- a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.9.bb
+++ /dev/null
@@ -1,123 +0,0 @@
-SUMMARY = "ALSA sound utilities"
-DESCRIPTION = "collection of small and often extremely powerful applications \
-designed to allow users to control the various parts of the ALSA system."
-HOMEPAGE = "http://www.alsa-project.org"
-BUGTRACKER = "http://alsa-project.org/main/index.php/Bug_Tracking"
-SECTION = "console/utils"
-# Some parts are GPL-2.0-or-later, some are GPL-2.0-only (e.g. axfer, alsactl)
-# so result is GPL-2.0-only
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
-                    file://alsactl/utils.c;beginline=3;endline=18;md5=96cc06a4cebe5eb7975688ffb0e65642"
-DEPENDS = "alsa-lib ncurses libsamplerate0"
-
-PACKAGECONFIG ??= "udev"
-
-# alsabat can be built also without fftw support (with reduced functionality).
-# It would be better to always enable alsabat, but provide an option for
-# enabling/disabling fftw. The configure script doesn't support that, however
-# (at least in any obvious way), so for now we only support alsabat with fftw
-# or no alsabat at all.
-PACKAGECONFIG[bat] = "--enable-bat,--disable-bat,fftwf"
-
-PACKAGECONFIG[udev] = "--with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d,--with-udev-rules-dir=/unwanted/rules.d,udev"
-PACKAGECONFIG[manpages] = "--enable-xmlto, --disable-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native"
-
-# alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe
-SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2 \
-           file://0001-alsactl-fix-compilation-when-building-in-a-subdir.patch \
-           file://0001-alsactl-add-define-to-compile-with-glibc-2.38.patch \
-          "
-SRC_URI[sha256sum] = "e7623d4525595f92e11ce25ee9a97f2040a14c6e4dcd027aa96e06cbce7817bd"
-
-# On build machines with python-docutils (not python3-docutils !!) installed
-# rst2man (not rst2man.py) is detected and compile fails with
-# | make[1]: *** No rule to make target 'alsaucm.1', needed by 'all-am'.  Stop.
-# Avoid this by disabling expicitly
-EXTRA_OECONF = "--disable-rst2man"
-
-inherit autotools gettext pkgconfig manpages
-
-# This are all packages that we need to make. Also, the now empty alsa-utils
-# ipk depends on them.
-
-ALSA_UTILS_PKGS = "\
-             ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'alsa-utils-alsabat', '', d)} \
-             alsa-utils-alsamixer \
-             alsa-utils-alsatplg \
-             alsa-utils-midi \
-             alsa-utils-aplay \
-             alsa-utils-amixer \
-             alsa-utils-aconnect \
-             alsa-utils-iecset \
-             alsa-utils-speakertest \
-             alsa-utils-aseqnet \
-             alsa-utils-aseqdump \
-             alsa-utils-alsactl \
-             alsa-utils-alsaloop \
-             alsa-utils-alsaucm \
-             alsa-utils-scripts \
-            "
-
-PACKAGES += "${ALSA_UTILS_PKGS}"
-RDEPENDS:${PN} += "${ALSA_UTILS_PKGS}"
-
-FILES:${PN} = ""
-ALLOW_EMPTY:alsa-utils = "1"
-FILES:alsa-utils-alsabat     = "${bindir}/alsabat"
-FILES:alsa-utils-alsatplg    = "${bindir}/alsatplg ${libdir}/alsa-topology"
-FILES:alsa-utils-aplay       = "${bindir}/aplay ${bindir}/arecord ${bindir}/axfer"
-FILES:alsa-utils-amixer      = "${bindir}/amixer"
-FILES:alsa-utils-alsamixer   = "${bindir}/alsamixer"
-FILES:alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/"
-FILES:alsa-utils-midi        = "${bindir}/aplaymidi ${bindir}/arecordmidi ${bindir}/amidi"
-FILES:alsa-utils-aconnect    = "${bindir}/aconnect"
-FILES:alsa-utils-aseqnet     = "${bindir}/aseqnet"
-FILES:alsa-utils-iecset      = "${bindir}/iecset"
-FILES:alsa-utils-alsactl     = "${sbindir}/alsactl */udev/rules.d/90-alsa-restore.rules */*/udev/rules.d/90-alsa-restore.rules ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/"
-FILES:alsa-utils-aseqdump    = "${bindir}/aseqdump"
-FILES:alsa-utils-alsaloop    = "${bindir}/alsaloop"
-FILES:alsa-utils-alsaucm     = "${bindir}/alsaucm */udev/rules.d/89-alsa-ucm.rules */*/udev/rules.d/89-alsa-ucm.rules"
-FILES:alsa-utils-scripts     = "${sbindir}/alsaconf \
-               ${sbindir}/alsa-info.sh \
-               ${sbindir}/alsabat-test.sh \
-              "
-
-SUMMARY:alsa-utils-alsabat      = "Command-line sound tester for ALSA sound card driver"
-SUMMARY:alsa-utils-alsatplg     = "Converts topology text files into binary format for kernel"
-SUMMARY:alsa-utils-aplay        = "Play (and record) sound files using ALSA"
-SUMMARY:alsa-utils-amixer       = "Command-line control for ALSA mixer and settings"
-SUMMARY:alsa-utils-alsamixer    = "ncurses-based control for ALSA mixer and settings"
-SUMMARY:alsa-utils-speakertest  = "ALSA surround speaker test utility"
-SUMMARY:alsa-utils-midi         = "Miscellaneous MIDI utilities for ALSA"
-SUMMARY:alsa-utils-aconnect     = "ALSA sequencer connection manager"
-SUMMARY:alsa-utils-aseqnet      = "Network client/server for ALSA sequencer"
-SUMMARY:alsa-utils-iecset       = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits"
-SUMMARY:alsa-utils-alsactl      = "Saves/restores ALSA-settings in /etc/asound.state"
-SUMMARY:alsa-utils-aseqdump     = "Shows the events received at an ALSA sequencer port"
-SUMMARY:alsa-utils-alsaloop     = "ALSA PCM loopback utility"
-SUMMARY:alsa-utils-alsaucm      = "ALSA Use Case Manager"
-SUMMARY:alsa-utils-scripts      = "Shell scripts that show help info and create ALSA configuration files"
-
-RRECOMMENDS:alsa-utils-alsactl = "alsa-states"
-
-do_install() {
-	autotools_do_install
-
-	install -d ${D}${sbindir}
-	install -m 0755 ${B}/alsaconf/alsaconf ${D}${sbindir}/
-	install -m 0755 ${S}/alsa-info/alsa-info.sh ${D}${sbindir}/
-	if ${@bb.utils.contains('PACKAGECONFIG', 'bat', 'true', 'false', d)}; then
-		install -m 0755 ${S}/bat/alsabat-test.sh ${D}${sbindir}/
-	fi
-
-	# If udev is disabled, we told configure to install the rules
-	# in /unwanted, so we can remove them now. If udev is enabled,
-	# then /unwanted won't exist and this will have no effect.
-	rm -rf ${D}/unwanted
-}
-
-
-PROVIDES = "alsa-utils-alsaconf alsa-utils-scripts"
-
-RDEPENDS:${PN}-scripts += "bash"
diff --git a/poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb b/poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
index f6bca4e..7a3b4a4 100644
--- a/poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
+++ b/poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb
@@ -7,7 +7,6 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
 			file://include/a52.h;beginline=1;endline=12;md5=81152ceb3562bf20a60d1b6018175dd1"
 SECTION = "libs"
-PR = "r4"
 
 inherit autotools
 
diff --git a/poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb b/poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
index 178e1a9..11674af 100644
--- a/poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
+++ b/poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb
@@ -7,7 +7,6 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=cf91718f59eb6a83d06dc7bcaf411132"
 DEPENDS = "libogg"
 
-PR = "r1"
 
 SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-${PV}.tar.bz2 \
            file://no-docs.patch"
diff --git a/poky/meta/recipes-multimedia/libtiff/tiff_4.5.1.bb b/poky/meta/recipes-multimedia/libtiff/tiff_4.5.1.bb
deleted file mode 100644
index 6171a53..0000000
--- a/poky/meta/recipes-multimedia/libtiff/tiff_4.5.1.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "Provides support for the Tag Image File Format (TIFF)"
-DESCRIPTION = "Library provides support for the Tag Image File Format \
-(TIFF), a widely used format for storing image data.  This library \
-provide means to easily access and create TIFF image files."
-HOMEPAGE = "http://www.libtiff.org/"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=a3e32d664d6db1386b4689c8121531c3"
-
-CVE_PRODUCT = "libtiff"
-
-SRC_URI = "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz"
-
-SRC_URI[sha256sum] = "d7f38b6788e4a8f5da7940c5ac9424f494d8a79eba53d555f4a507167dca5e2b"
-
-# exclude betas
-UPSTREAM_CHECK_REGEX = "tiff-(?P<pver>\d+(\.\d+)+).tar"
-
-CVE_STATUS[CVE-2015-7313] = "fixed-version: Tested with check from https://security-tracker.debian.org/tracker/CVE-2015-7313 and already 4.3.0 doesn't have the issue"
-
-inherit autotools multilib_header
-
-CACHED_CONFIGUREVARS = "ax_cv_check_gl_libgl=no"
-
-PACKAGECONFIG ?= "cxx jpeg zlib lzma \
-                  strip-chopping extrasample-as-alpha check-ycbcr-subsampling"
-
-PACKAGECONFIG[cxx] = "--enable-cxx,--disable-cxx,,"
-PACKAGECONFIG[jbig] = "--enable-jbig,--disable-jbig,jbig,"
-PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg,"
-PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib,"
-PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz,"
-PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp,"
-PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd,"
-PACKAGECONFIG[libdeflate] = "--enable-libdeflate,--disable-libdeflate,libdeflate,"
-
-# Convert single-strip uncompressed images to multiple strips of specified
-# size (default: 8192) to reduce memory usage
-PACKAGECONFIG[strip-chopping] = "--enable-strip-chopping,--disable-strip-chopping,,"
-
-# Treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA
-PACKAGECONFIG[extrasample-as-alpha] = "--enable-extrasample-as-alpha,--disable-extrasample-as-alpha,,"
-
-# Control picking up YCbCr subsample info. Disable to support files lacking
-# the tag
-PACKAGECONFIG[check-ycbcr-subsampling] = "--enable-check-ycbcr-subsampling,--disable-check-ycbcr-subsampling,,"
-
-# Support a mechanism allowing reading large strips (usually one strip files)
-# in chunks when using TIFFReadScanline. Experimental 4.0+ feature
-PACKAGECONFIG[chunky-strip-read] = "--enable-chunky-strip-read,--disable-chunky-strip-read,,"
-
-PACKAGES =+ "tiffxx tiff-utils"
-FILES:tiffxx = "${libdir}/libtiffxx.so.*"
-FILES:tiff-utils = "${bindir}/*"
-
-do_install:append() {
-    oe_multilib_header tiffconf.h
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb b/poky/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb
new file mode 100644
index 0000000..49984f1
--- /dev/null
+++ b/poky/meta/recipes-multimedia/libtiff/tiff_4.6.0.bb
@@ -0,0 +1,60 @@
+SUMMARY = "Provides support for the Tag Image File Format (TIFF)"
+DESCRIPTION = "Library provides support for the Tag Image File Format \
+(TIFF), a widely used format for storing image data.  This library \
+provide means to easily access and create TIFF image files."
+HOMEPAGE = "http://www.libtiff.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=a3e32d664d6db1386b4689c8121531c3"
+
+CVE_PRODUCT = "libtiff"
+
+SRC_URI = "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz \
+           "
+
+SRC_URI[sha256sum] = "88b3979e6d5c7e32b50d7ec72fb15af724f6ab2cbf7e10880c360a77e4b5d99a"
+
+# exclude betas
+UPSTREAM_CHECK_REGEX = "tiff-(?P<pver>\d+(\.\d+)+).tar"
+
+CVE_STATUS[CVE-2015-7313] = "fixed-version: Tested with check from https://security-tracker.debian.org/tracker/CVE-2015-7313 and already 4.3.0 doesn't have the issue"
+
+inherit autotools multilib_header
+
+CACHED_CONFIGUREVARS = "ax_cv_check_gl_libgl=no"
+
+PACKAGECONFIG ?= "cxx jpeg zlib lzma \
+                  strip-chopping extrasample-as-alpha check-ycbcr-subsampling"
+
+PACKAGECONFIG[cxx] = "--enable-cxx,--disable-cxx,,"
+PACKAGECONFIG[jbig] = "--enable-jbig,--disable-jbig,jbig,"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg,"
+PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib,"
+PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz,"
+PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp,"
+PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd,"
+PACKAGECONFIG[libdeflate] = "--enable-libdeflate,--disable-libdeflate,libdeflate,"
+
+# Convert single-strip uncompressed images to multiple strips of specified
+# size (default: 8192) to reduce memory usage
+PACKAGECONFIG[strip-chopping] = "--enable-strip-chopping,--disable-strip-chopping,,"
+
+# Treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA
+PACKAGECONFIG[extrasample-as-alpha] = "--enable-extrasample-as-alpha,--disable-extrasample-as-alpha,,"
+
+# Control picking up YCbCr subsample info. Disable to support files lacking
+# the tag
+PACKAGECONFIG[check-ycbcr-subsampling] = "--enable-check-ycbcr-subsampling,--disable-check-ycbcr-subsampling,,"
+
+# Support a mechanism allowing reading large strips (usually one strip files)
+# in chunks when using TIFFReadScanline. Experimental 4.0+ feature
+PACKAGECONFIG[chunky-strip-read] = "--enable-chunky-strip-read,--disable-chunky-strip-read,,"
+
+PACKAGES =+ "tiffxx tiff-utils"
+FILES:tiffxx = "${libdir}/libtiffxx.so.*"
+FILES:tiff-utils = "${bindir}/*"
+
+do_install:append() {
+    oe_multilib_header tiffconf.h
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc b/poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
index 08a608b..2245a73 100644
--- a/poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
+++ b/poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc
@@ -257,7 +257,7 @@
 
 # pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG
 # but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES
-RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}"
+RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit x11', 'consolekit', '', d)}"
 RDEPENDS:pulseaudio-misc += "pulseaudio-module-cli-protocol-unix"
 
 FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer"
diff --git a/poky/meta/recipes-multimedia/webp/libwebp_1.3.1.bb b/poky/meta/recipes-multimedia/webp/libwebp_1.3.1.bb
deleted file mode 100644
index b9e763b..0000000
--- a/poky/meta/recipes-multimedia/webp/libwebp_1.3.1.bb
+++ /dev/null
@@ -1,57 +0,0 @@
-SUMMARY = "WebP is an image format designed for the Web"
-DESCRIPTION = "WebP is a method of lossy and lossless compression that can be \
-               used on a large variety of photographic, translucent and \
-               graphical images found on the web. The degree of lossy \
-               compression is adjustable so a user can choose the trade-off \
-               between file size and image quality. WebP typically achieves \
-               an average of 30% more compression than JPEG and JPEG 2000, \
-               without loss of image quality."
-HOMEPAGE = "https://developers.google.com/speed/webp/"
-SECTION = "libs"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6e8dee932c26f2dab503abf70c96d8bb \
-                    file://PATENTS;md5=c6926d0cb07d296f886ab6e0cc5a85b7"
-
-SRC_URI = "http://downloads.webmproject.org/releases/webp/${BP}.tar.gz"
-SRC_URI[sha256sum] = "b3779627c2dfd31e3d8c4485962c2efe17785ef975e2be5c8c0c9e6cd3c4ef66"
-
-UPSTREAM_CHECK_URI = "http://downloads.webmproject.org/releases/webp/index.html"
-
-EXTRA_OECONF = " \
-    --disable-wic \
-    --enable-libwebpmux \
-    --enable-libwebpdemux \
-    --enable-threading \
-"
-
-# Do not trust configure to determine if neon is available.
-#
-EXTRA_OECONF_ARM = " \
-    ${@bb.utils.contains("TUNE_FEATURES","neon","--enable-neon","--disable-neon",d)} \
-"
-EXTRA_OECONF:append:arm = " ${EXTRA_OECONF_ARM}"
-EXTRA_OECONF:append:armeb = " ${EXTRA_OECONF_ARM}"
-
-inherit autotools lib_package
-
-PACKAGECONFIG ??= ""
-
-# libwebpdecoder is a subset of libwebp, don't build it unless requested
-PACKAGECONFIG[decoder] = "--enable-libwebpdecoder,--disable-libwebpdecoder"
-
-# Apply for examples programs: cwebp and dwebp
-PACKAGECONFIG[gif] = "--enable-gif,--disable-gif,giflib"
-PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
-PACKAGECONFIG[png] = "--enable-png,--disable-png,,libpng"
-PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff"
-
-# Apply only for example program vwebp
-PACKAGECONFIG[gl] = "--enable-gl,--disable-gl,mesa-glut"
-
-PACKAGES =+ "${PN}-gif2webp"
-
-DESCRIPTION:${PN}-gif2webp = "Simple tool to convert animated GIFs to WebP"
-FILES:${PN}-gif2webp = "${bindir}/gif2webp"
-
-BBCLASSEXTEND += "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/webp/libwebp_1.3.2.bb b/poky/meta/recipes-multimedia/webp/libwebp_1.3.2.bb
new file mode 100644
index 0000000..63b0fd9
--- /dev/null
+++ b/poky/meta/recipes-multimedia/webp/libwebp_1.3.2.bb
@@ -0,0 +1,57 @@
+SUMMARY = "WebP is an image format designed for the Web"
+DESCRIPTION = "WebP is a method of lossy and lossless compression that can be \
+               used on a large variety of photographic, translucent and \
+               graphical images found on the web. The degree of lossy \
+               compression is adjustable so a user can choose the trade-off \
+               between file size and image quality. WebP typically achieves \
+               an average of 30% more compression than JPEG and JPEG 2000, \
+               without loss of image quality."
+HOMEPAGE = "https://developers.google.com/speed/webp/"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6e8dee932c26f2dab503abf70c96d8bb \
+                    file://PATENTS;md5=c6926d0cb07d296f886ab6e0cc5a85b7"
+
+SRC_URI = "http://downloads.webmproject.org/releases/webp/${BP}.tar.gz"
+SRC_URI[sha256sum] = "2a499607df669e40258e53d0ade8035ba4ec0175244869d1025d460562aa09b4"
+
+UPSTREAM_CHECK_URI = "http://downloads.webmproject.org/releases/webp/index.html"
+
+EXTRA_OECONF = " \
+    --disable-wic \
+    --enable-libwebpmux \
+    --enable-libwebpdemux \
+    --enable-threading \
+"
+
+# Do not trust configure to determine if neon is available.
+#
+EXTRA_OECONF_ARM = " \
+    ${@bb.utils.contains("TUNE_FEATURES","neon","--enable-neon","--disable-neon",d)} \
+"
+EXTRA_OECONF:append:arm = " ${EXTRA_OECONF_ARM}"
+EXTRA_OECONF:append:armeb = " ${EXTRA_OECONF_ARM}"
+
+inherit autotools lib_package
+
+PACKAGECONFIG ??= ""
+
+# libwebpdecoder is a subset of libwebp, don't build it unless requested
+PACKAGECONFIG[decoder] = "--enable-libwebpdecoder,--disable-libwebpdecoder"
+
+# Apply for examples programs: cwebp and dwebp
+PACKAGECONFIG[gif] = "--enable-gif,--disable-gif,giflib"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,,libpng"
+PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff"
+
+# Apply only for example program vwebp
+PACKAGECONFIG[gl] = "--enable-gl,--disable-gl,mesa-glut"
+
+PACKAGES =+ "${PN}-gif2webp"
+
+DESCRIPTION:${PN}-gif2webp = "Simple tool to convert animated GIFs to WebP"
+FILES:${PN}-gif2webp = "${bindir}/gif2webp"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/poky/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb b/poky/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
index 49bf30e..90734b6 100644
--- a/poky/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
+++ b/poky/meta/recipes-sato/matchbox-sato/matchbox-session-sato_0.1.bb
@@ -7,7 +7,6 @@
 
 SECTION = "x11"
 RDEPENDS:${PN} = "formfactor matchbox-theme-sato matchbox-panel-2 matchbox-desktop matchbox-session gconf"
-PR = "r30"
 
 # This package is architecture specific because the session script is modified
 # based on the machine architecture.
diff --git a/poky/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb b/poky/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
index 6866a4d..3f735e0 100644
--- a/poky/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
+++ b/poky/meta/recipes-sato/packagegroups/packagegroup-core-x11-sato.bb
@@ -5,7 +5,6 @@
 SUMMARY = "Sato desktop"
 DESCRIPTION = "Packagegroups provide a convenient mechanism of bundling a collection of packages."
 HOMEPAGE = "https://www.yoctoproject.org/"
-PR = "r33"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
diff --git a/poky/meta/recipes-sato/puzzles/puzzles_git.bb b/poky/meta/recipes-sato/puzzles/puzzles_git.bb
index 04338a6..d7089ef 100644
--- a/poky/meta/recipes-sato/puzzles/puzzles_git.bb
+++ b/poky/meta/recipes-sato/puzzles/puzzles_git.bb
@@ -10,7 +10,7 @@
 SRC_URI = "git://git.tartarus.org/simon/puzzles.git;branch=main;protocol=https"
 
 UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "b6c842a28cf6597df063fcff35079c3e3982381e"
+SRCREV = "2d9e414ee316b37143954150016e8f4f18358497"
 PE = "2"
 PV = "0.0+git"
 
diff --git a/poky/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb b/poky/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
index 4bb896f..766f574 100644
--- a/poky/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
+++ b/poky/meta/recipes-sato/shutdown-desktop/shutdown-desktop.bb
@@ -4,7 +4,6 @@
 
 SRC_URI = "file://shutdown.desktop"
 
-PR = "r1"
 
 S = "${WORKDIR}"
 
diff --git a/poky/meta/recipes-sato/webkit/webkitgtk_2.40.5.bb b/poky/meta/recipes-sato/webkit/webkitgtk_2.40.5.bb
index a0c97aa..0c54f20 100644
--- a/poky/meta/recipes-sato/webkit/webkitgtk_2.40.5.bb
+++ b/poky/meta/recipes-sato/webkit/webkitgtk_2.40.5.bb
@@ -87,6 +87,10 @@
                  -DUSE_GTK4=ON \
                  "
 
+# Unless DEBUG_BUILD is enabled, pass -g1 to massively reduce the size of the
+# debug symbols (4.3GB to 700M at time of writing)
+DEBUG_FLAGS:append = "${@oe.utils.vartrue('DEBUG_BUILD', '', ' -g1', d)}"
+
 # Javascript JIT is not supported on ARC
 EXTRA_OECMAKE:append:arc = " -DENABLE_JIT=OFF "
 # By default 25-bit "medium" calls are used on ARC
diff --git a/poky/meta/recipes-support/appstream/appstream/0001-meson-do-not-rely-on-an-exe-wrapper.patch b/poky/meta/recipes-support/appstream/appstream/0001-meson-do-not-rely-on-an-exe-wrapper.patch
new file mode 100644
index 0000000..d4f2951
--- /dev/null
+++ b/poky/meta/recipes-support/appstream/appstream/0001-meson-do-not-rely-on-an-exe-wrapper.patch
@@ -0,0 +1,36 @@
+From 79bf322768990b28c29a9d907edcca52ff48e0b8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
+Date: Wed, 26 Jul 2023 23:21:10 +0400
+Subject: meson: do not rely on an exe wrapper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
+
+Upstream-Status: Backport [https://github.com/ximion/appstream/commit/79bf322768990b28c29a9d907edcca52ff48e0b8]
+---
+ data/meson.build | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/data/meson.build b/data/meson.build
+index aea0cb25..ec0e434f 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -7,6 +7,13 @@ install_data('its/metainfo.its',
+ install_data('its/metainfo.loc',
+               install_dir: join_paths(get_option('datadir'), 'gettext', 'its'))
+ 
++# Do not rely on an exe wrapper for rel-info, use the system one in that case
++if meson.is_cross_build()
++    dependency('appstream', version: '>=' + as_version, native: true,
++               not_found_message: 'Native appstream required for cross-building')
++    ascli_exe = find_program('appstreamcli')
++endif
++
+ # NOTE: We do not translate the release notes on purpose here.
+ # If you do want to give translators a chance to translate them,
+ # ascli news-to-metainfo needs to produce a temporary file to translate
+-- 
+2.41.0
+
diff --git a/poky/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch b/poky/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch
new file mode 100644
index 0000000..9cbfaca
--- /dev/null
+++ b/poky/meta/recipes-support/appstream/appstream/0001-remove-hardcoded-path.patch
@@ -0,0 +1,31 @@
+From 6ab00a4279823829a9b82dc9e4d055da4de88c6e Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Mon, 12 Dec 2022 15:42:42 +0100
+Subject: [PATCH] remove hardcoded path
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+
+Dont include hardcoded path. This fixes:
+| cc1: error: include location "/usr/include" is unsafe for cross-compilation [-Werror=poison-system-directories]
+
+Upstream-Status: Inappropriate [oe-specific]
+---
+ meson.build       | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index fd0e3373..2f273ada 100644
+--- a/meson.build
++++ b/meson.build
+@@ -124,7 +124,7 @@ if get_option ('gir')
+     dependency('gobject-introspection-1.0', version: '>=1.56')
+ endif
+ 
+-stemmer_inc_dirs = include_directories(['/usr/include'])
++stemmer_inc_dirs = include_directories([''])
+ if get_option('stemming')
+     stemmer_lib = cc.find_library('stemmer', required: true)
+     if not cc.has_header('libstemmer.h')
+-- 
+2.34.1
+
diff --git a/poky/meta/recipes-support/appstream/appstream_0.16.3.bb b/poky/meta/recipes-support/appstream/appstream_0.16.3.bb
new file mode 100644
index 0000000..bde679e
--- /dev/null
+++ b/poky/meta/recipes-support/appstream/appstream_0.16.3.bb
@@ -0,0 +1,45 @@
+SUMMARY = "AppStream is a collaborative effort for making machine-readable software metadata easily available."
+HOMEPAGE = "https://github.com/ximion/appstream"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=435ed639f84d4585d93824e7da3d85da"
+
+DEPENDS = " \
+    appstream-native \
+    curl-native \
+    curl \
+    docbook-xml-dtd4-native \
+    gperf-native \
+    glib-2.0 \
+    libyaml \
+    libxml2 \
+    libxmlb \
+    libxslt-native \
+    itstool-native \
+    docbook-xsl-stylesheets-native \
+    python3-pygments-native \
+"
+
+inherit meson gobject-introspection gettext gtk-doc pkgconfig vala
+
+GIR_MESON_OPTION = "gir"
+GTKDOC_MESON_OPTION = "apidocs"
+
+SRC_URI = " \
+	https://www.freedesktop.org/software/appstream/releases/AppStream-${PV}.tar.xz \
+	file://0001-remove-hardcoded-path.patch \
+	file://0001-meson-do-not-rely-on-an-exe-wrapper.patch \
+"
+SRC_URI[sha256sum] = "081c917646e94d7221c9e4aae54dacda95a27c607fa93cd8e6344a2b318b98b1"
+
+S = "${WORKDIR}/AppStream-${PV}"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
+PACKAGECONFIG[stemming] = "-Dstemming=true,-Dstemming=false,libstemmer"
+
+FILES:${PN} += "${datadir}"
+
+EXTRA_OEMESON += "${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Dvapi=true', '-Dvapi=false', d)}"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-support/atk/at-spi2-core_2.48.3.bb b/poky/meta/recipes-support/atk/at-spi2-core_2.48.3.bb
deleted file mode 100644
index 17b0e39..0000000
--- a/poky/meta/recipes-support/atk/at-spi2-core_2.48.3.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-SUMMARY = "Assistive Technology Service Provider Interface (dbus core)"
-
-DESCRIPTION = "It provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked."
-
-HOMEPAGE = "https://wiki.linuxfoundation.org/accessibility/d-bus"
-BUGTRACKER = "http://bugzilla.gnome.org/"
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
-
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz"
-
-SRC_URI[sha256sum] = "37316df43ca9989ce539d54cf429a768c28bb38a0b34950beadd0421827edf55"
-
-DEPENDS = " \
-	dbus \
-	glib-2.0 \
-	glib-2.0-native \
-	libxml2 \
-	${@'python3-sphinx-native' if d.getVar('GIDOCGEN_ENABLED') == 'True' else ''} \
-"
-
-# For backwards compatibility
-PROVIDES += "atk at-spi2-atk"
-RPROVIDES:${PN} += "atk at-spi2-atk"
-
-inherit meson gi-docgen gettext systemd pkgconfig upstream-version-is-even gobject-introspection
-
-EXTRA_OEMESON = " -Dsystemd_user_dir=${systemd_user_unitdir} \
-                  -Ddbus_daemon=${bindir}/dbus-daemon"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
-PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxi libxtst"
-
-GIDOCGEN_MESON_OPTION = "docs"
-GIR_MESON_OPTION = 'introspection'
-GIR_MESON_ENABLE_FLAG = 'enabled'
-GIR_MESON_DISABLE_FLAG = 'disabled'
-
-FILES:${PN} += "${libdir}/gnome-settings-daemon-3.0/gtk-modules/at-spi2-atk.desktop \
-                ${libdir}/gtk-2.0/modules/libatk-bridge.so \
-                ${datadir}/dbus-1/services/*.service \
-                ${datadir}/dbus-1/accessibility-services/*.service \
-                ${datadir}/defaults/at-spi2 \
-                ${systemd_user_unitdir}/at-spi-dbus-bus.service \
-                "
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/atk/at-spi2-core_2.50.0.bb b/poky/meta/recipes-support/atk/at-spi2-core_2.50.0.bb
new file mode 100644
index 0000000..57958fb
--- /dev/null
+++ b/poky/meta/recipes-support/atk/at-spi2-core_2.50.0.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Assistive Technology Service Provider Interface (dbus core)"
+
+DESCRIPTION = "It provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked."
+
+HOMEPAGE = "https://wiki.linuxfoundation.org/accessibility/d-bus"
+BUGTRACKER = "http://bugzilla.gnome.org/"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${MAJ_VER}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[sha256sum] = "e9f5a8c8235c9dd963b2171de9120301129c677dde933955e1df618b949c4adc"
+
+DEPENDS = " \
+	dbus \
+	glib-2.0 \
+	glib-2.0-native \
+	libxml2 \
+	${@'python3-sphinx-native' if d.getVar('GIDOCGEN_ENABLED') == 'True' else ''} \
+"
+
+# For backwards compatibility
+PROVIDES += "atk at-spi2-atk"
+RPROVIDES:${PN} += "atk at-spi2-atk"
+
+inherit meson gi-docgen gettext systemd pkgconfig upstream-version-is-even gobject-introspection
+
+EXTRA_OEMESON = " -Dsystemd_user_dir=${systemd_user_unitdir} \
+                  -Ddbus_daemon=${bindir}/dbus-daemon"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxi libxtst"
+
+GIDOCGEN_MESON_OPTION = "docs"
+GIR_MESON_OPTION = 'introspection'
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+FILES:${PN} += "${libdir}/gnome-settings-daemon-3.0/gtk-modules/at-spi2-atk.desktop \
+                ${libdir}/gtk-2.0/modules/libatk-bridge.so \
+                ${datadir}/dbus-1/services/*.service \
+                ${datadir}/dbus-1/accessibility-services/*.service \
+                ${datadir}/defaults/at-spi2 \
+                ${systemd_user_unitdir}/at-spi-dbus-bus.service \
+                "
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/boost/boost-1.82.0.inc b/poky/meta/recipes-support/boost/boost-1.82.0.inc
deleted file mode 100644
index 39d3c9c..0000000
--- a/poky/meta/recipes-support/boost/boost-1.82.0.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-# The Boost web site provides free peer-reviewed portable
-# C++ source libraries. The emphasis is on libraries which
-# work well with the C++ Standard Library. The libraries are
-# intended to be widely useful, and are in regular use by
-# thousands of programmers across a broad spectrum of applications.
-HOMEPAGE = "http://www.boost.org/"
-LICENSE = "BSL-1.0 & MIT & Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
-
-BOOST_VER = "${@"_".join(d.getVar("PV").split("."))}"
-BOOST_MAJ = "${@"_".join(d.getVar("PV").split(".")[0:2])}"
-BOOST_P = "boost_${BOOST_VER}"
-
-SRC_URI = "https://boostorg.jfrog.io/artifactory/main/release/${PV}/source/${BOOST_P}.tar.bz2"
-SRC_URI[sha256sum] = "a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6"
-
-UPSTREAM_CHECK_URI = "http://www.boost.org/users/download/"
-UPSTREAM_CHECK_REGEX = "release/(?P<pver>.*)/source/"
-
-S = "${WORKDIR}/${BOOST_P}"
diff --git a/poky/meta/recipes-support/boost/boost-1.83.0.inc b/poky/meta/recipes-support/boost/boost-1.83.0.inc
new file mode 100644
index 0000000..da275f1
--- /dev/null
+++ b/poky/meta/recipes-support/boost/boost-1.83.0.inc
@@ -0,0 +1,20 @@
+# The Boost web site provides free peer-reviewed portable
+# C++ source libraries. The emphasis is on libraries which
+# work well with the C++ Standard Library. The libraries are
+# intended to be widely useful, and are in regular use by
+# thousands of programmers across a broad spectrum of applications.
+HOMEPAGE = "http://www.boost.org/"
+LICENSE = "BSL-1.0 & MIT & Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+
+BOOST_VER = "${@"_".join(d.getVar("PV").split("."))}"
+BOOST_MAJ = "${@"_".join(d.getVar("PV").split(".")[0:2])}"
+BOOST_P = "boost_${BOOST_VER}"
+
+SRC_URI = "https://boostorg.jfrog.io/artifactory/main/release/${PV}/source/${BOOST_P}.tar.bz2"
+SRC_URI[sha256sum] = "6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e"
+
+UPSTREAM_CHECK_URI = "http://www.boost.org/users/download/"
+UPSTREAM_CHECK_REGEX = "release/(?P<pver>.*)/source/"
+
+S = "${WORKDIR}/${BOOST_P}"
diff --git a/poky/meta/recipes-support/boost/boost-build-native_1.82.0.bb b/poky/meta/recipes-support/boost/boost-build-native_1.82.0.bb
deleted file mode 100644
index dcfb65e..0000000
--- a/poky/meta/recipes-support/boost/boost-build-native_1.82.0.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SUMMARY = "Boost.Build"
-DESCRIPTION = "B2 makes it easy to build C++ projects, everywhere."
-HOMEPAGE = "https://github.com/boostorg/build"
-SECTION = "devel"
-
-LICENSE = "BSL-1.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
-
-SRC_URI = "git://github.com/boostorg/build;protocol=https;branch=master"
-SRCREV = "9f488e003a568dffe0caed05d86ed6f1a8f8c7f3"
-PE = "1"
-
-UPSTREAM_CHECK_GITTAGREGEX = "boost-(?P<pver>(\d+(\.\d+)+))"
-
-inherit native
-
-S = "${WORKDIR}/git"
-
-do_compile() {
-    ./bootstrap.sh
-}
-
-do_install() {
-    HOME=/var/run ./b2 install --prefix=${prefix} staging-prefix=${D}${prefix}
-}
-
-# The build is either release mode (pre-stripped) or debug (-O0).
-INSANE_SKIP:${PN} = "already-stripped"
diff --git a/poky/meta/recipes-support/boost/boost-build-native_1.83.0.bb b/poky/meta/recipes-support/boost/boost-build-native_1.83.0.bb
new file mode 100644
index 0000000..a345bac
--- /dev/null
+++ b/poky/meta/recipes-support/boost/boost-build-native_1.83.0.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Boost.Build"
+DESCRIPTION = "B2 makes it easy to build C++ projects, everywhere."
+HOMEPAGE = "https://github.com/boostorg/build"
+SECTION = "devel"
+
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+
+SRC_URI = "git://github.com/boostorg/build;protocol=https;branch=master"
+SRCREV = "8d86b9a85407d73d6e8c631771f18c2a237d2d71"
+PE = "1"
+
+UPSTREAM_CHECK_GITTAGREGEX = "boost-(?P<pver>(\d+(\.\d+)+))"
+
+inherit native
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+    ./bootstrap.sh
+}
+
+do_install() {
+    HOME=/var/run ./b2 install --prefix=${prefix} staging-prefix=${D}${prefix}
+}
+
+# The build is either release mode (pre-stripped) or debug (-O0).
+INSANE_SKIP:${PN} = "already-stripped"
diff --git a/poky/meta/recipes-support/boost/boost_1.82.0.bb b/poky/meta/recipes-support/boost/boost_1.83.0.bb
similarity index 100%
rename from poky/meta/recipes-support/boost/boost_1.82.0.bb
rename to poky/meta/recipes-support/boost/boost_1.83.0.bb
diff --git a/poky/meta/recipes-support/curl/curl/disable-tests b/poky/meta/recipes-support/curl/curl/disable-tests
index b687b2b..fdac795 100644
--- a/poky/meta/recipes-support/curl/curl/disable-tests
+++ b/poky/meta/recipes-support/curl/curl/disable-tests
@@ -21,6 +21,7 @@
 # This test is scanning the source tree
 1222
 # These CRL tests need --libcurl option to be enabled
+1279
 1400
 1401
 1402
diff --git a/poky/meta/recipes-support/curl/curl/run-ptest b/poky/meta/recipes-support/curl/curl/run-ptest
index 2c74c58..8f9c20f3 100644
--- a/poky/meta/recipes-support/curl/curl/run-ptest
+++ b/poky/meta/recipes-support/curl/curl/run-ptest
@@ -1,6 +1,6 @@
 #!/bin/sh
 cd tests
-{ ./runtests.pl -a -n -s || echo "FAIL: curl" ; } | sed \
+{ ./runtests.pl -a -n -s -j4 !flaky || echo "FAIL: curl" ; } | sed \
      -e 's|\([^ ]* *\) \([^ ]* *\)...OK|PASS: \1 \2|' \
      -e 's|\([^ ]* *\) \([^ ]* *\)...FAILED|FAIL: \1 \2|' \
      -e 's/Warning: test[0-9]\+ not present in tests\/data\/Makefile.inc//'
diff --git a/poky/meta/recipes-support/curl/curl_8.2.1.bb b/poky/meta/recipes-support/curl/curl_8.2.1.bb
deleted file mode 100644
index 068486a..0000000
--- a/poky/meta/recipes-support/curl/curl_8.2.1.bb
+++ /dev/null
@@ -1,131 +0,0 @@
-SUMMARY = "Command line tool and library for client-side URL transfers"
-DESCRIPTION = "It uses URL syntax to transfer data to and from servers. \
-curl is a widely used because of its ability to be flexible and complete \
-complex tasks. For example, you can use curl for things like user authentication, \
-HTTP post, SSL connections, proxy support, FTP uploads, and more!"
-HOMEPAGE = "https://curl.se/"
-BUGTRACKER = "https://github.com/curl/curl/issues"
-SECTION = "console/network"
-LICENSE = "curl"
-LIC_FILES_CHKSUM = "file://COPYING;md5=db8448a1e43eb2125f7740fc397db1f6"
-
-SRC_URI = " \
-    https://curl.se/download/${BP}.tar.xz \
-    file://run-ptest \
-    file://disable-tests \
-"
-SRC_URI[sha256sum] = "dd322f6bd0a20e6cebdfd388f69e98c3d183bed792cf4713c8a7ef498cba4894"
-
-# Curl has used many names over the years...
-CVE_PRODUCT = "haxx:curl haxx:libcurl curl:curl curl:libcurl libcurl:libcurl daniel_stenberg:curl"
-
-inherit autotools pkgconfig binconfig multilib_header ptest
-
-# Entropy source for random PACKAGECONFIG option
-RANDOM ?= "/dev/urandom"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} libidn openssl proxy random threaded-resolver verbose zlib"
-PACKAGECONFIG:class-native = "ipv6 openssl proxy random threaded-resolver verbose zlib"
-PACKAGECONFIG:class-nativesdk = "ipv6 openssl proxy random threaded-resolver verbose zlib"
-
-# 'ares' and 'threaded-resolver' are mutually exclusive
-PACKAGECONFIG[ares] = "--enable-ares,--disable-ares,c-ares,,,threaded-resolver"
-PACKAGECONFIG[brotli] = "--with-brotli,--without-brotli,brotli"
-PACKAGECONFIG[builtinmanual] = "--enable-manual,--disable-manual"
-# Don't use this in production
-PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
-PACKAGECONFIG[dict] = "--enable-dict,--disable-dict,"
-PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
-PACKAGECONFIG[gopher] = "--enable-gopher,--disable-gopher,"
-PACKAGECONFIG[imap] = "--enable-imap,--disable-imap,"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
-PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
-PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap"
-PACKAGECONFIG[ldaps] = "--enable-ldaps,--disable-ldaps,openldap"
-PACKAGECONFIG[libgsasl] = "--with-libgsasl,--without-libgsasl,libgsasl"
-PACKAGECONFIG[libidn] = "--with-libidn2,--without-libidn2,libidn2"
-PACKAGECONFIG[libssh2] = "--with-libssh2,--without-libssh2,libssh2"
-PACKAGECONFIG[mbedtls] = "--with-mbedtls=${STAGING_DIR_TARGET},--without-mbedtls,mbedtls"
-PACKAGECONFIG[mqtt] = "--enable-mqtt,--disable-mqtt,"
-PACKAGECONFIG[nghttp2] = "--with-nghttp2,--without-nghttp2,nghttp2"
-PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
-PACKAGECONFIG[pop3] = "--enable-pop3,--disable-pop3,"
-PACKAGECONFIG[proxy] = "--enable-proxy,--disable-proxy,"
-PACKAGECONFIG[random] = "--with-random=${RANDOM},--without-random"
-PACKAGECONFIG[rtmpdump] = "--with-librtmp,--without-librtmp,rtmpdump"
-PACKAGECONFIG[rtsp] = "--enable-rtsp,--disable-rtsp,"
-PACKAGECONFIG[smb] = "--enable-smb,--disable-smb,"
-PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp,"
-PACKAGECONFIG[nss] = "--with-nss,--without-nss,nss"
-PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet,"
-PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp,"
-PACKAGECONFIG[threaded-resolver] = "--enable-threaded-resolver,--disable-threaded-resolver,,,,ares"
-PACKAGECONFIG[verbose] = "--enable-verbose,--disable-verbose"
-PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib"
-PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
-
-EXTRA_OECONF = " \
-    --disable-libcurl-option \
-    --disable-ntlm-wb \
-    --enable-crypto-auth \
-    --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \
-    --without-libpsl \
-    --enable-optimize \
-    ${@'--without-ssl' if (bb.utils.filter('PACKAGECONFIG', 'gnutls mbedtls nss openssl', d) == '') else ''} \
-"
-
-do_install:append:class-target() {
-	# cleanup buildpaths from curl-config
-	sed -i \
-	    -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
-	    -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
-	    -e 's|${DEBUG_PREFIX_MAP}||g' \
-	    -e 's|${@" ".join(d.getVar("DEBUG_PREFIX_MAP").split())}||g' \
-	    ${D}${bindir}/curl-config
-}
-
-do_compile_ptest() {
-	oe_runmake test
-	oe_runmake -C ${B}/tests/server
-}
-
-do_install_ptest() {
-	cat  ${WORKDIR}/disable-tests >> ${S}/tests/data/DISABLED
-	rm -f ${B}/tests/configurehelp.pm
-	cp -rf ${B}/tests ${D}${PTEST_PATH}
-	cp -rf ${S}/tests ${D}${PTEST_PATH}
-	find ${D}${PTEST_PATH}/ -type f -name Makefile.am -o -name Makefile.in -o -name Makefile -delete
-	install -d ${D}${PTEST_PATH}/src
-	ln -sf ${bindir}/curl   ${D}${PTEST_PATH}/src/curl
-	cp -rf ${D}${bindir}/curl-config ${D}${PTEST_PATH}
-}
-
-RDEPENDS:${PN}-ptest += " \
-	bash \
-	perl-module-b \
-	perl-module-base \
-	perl-module-cwd \
-	perl-module-digest \
-	perl-module-digest-md5 \
-	perl-module-file-basename \
-	perl-module-file-spec \
-	perl-module-file-temp \
-	perl-module-io-socket \
-	perl-module-ipc-open2 \
-	perl-module-list-util \
-	perl-module-memoize \
-	perl-module-storable \
-	perl-module-time-hires \
-"
-
-PACKAGES =+ "lib${BPN}"
-
-FILES:lib${BPN} = "${libdir}/lib*.so.*"
-RRECOMMENDS:lib${BPN} += "ca-certificates"
-
-FILES:${PN} += "${datadir}/zsh"
-
-inherit multilib_script
-MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/curl-config"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/curl/curl_8.3.0.bb b/poky/meta/recipes-support/curl/curl_8.3.0.bb
new file mode 100644
index 0000000..646ac01
--- /dev/null
+++ b/poky/meta/recipes-support/curl/curl_8.3.0.bb
@@ -0,0 +1,139 @@
+SUMMARY = "Command line tool and library for client-side URL transfers"
+DESCRIPTION = "It uses URL syntax to transfer data to and from servers. \
+curl is a widely used because of its ability to be flexible and complete \
+complex tasks. For example, you can use curl for things like user authentication, \
+HTTP post, SSL connections, proxy support, FTP uploads, and more!"
+HOMEPAGE = "https://curl.se/"
+BUGTRACKER = "https://github.com/curl/curl/issues"
+SECTION = "console/network"
+LICENSE = "curl"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db8448a1e43eb2125f7740fc397db1f6"
+
+SRC_URI = " \
+    https://curl.se/download/${BP}.tar.xz \
+    file://run-ptest \
+    file://disable-tests \
+"
+SRC_URI[sha256sum] = "376d627767d6c4f05105ab6d497b0d9aba7111770dd9d995225478209c37ea63"
+
+# Curl has used many names over the years...
+CVE_PRODUCT = "haxx:curl haxx:libcurl curl:curl curl:libcurl libcurl:libcurl daniel_stenberg:curl"
+
+inherit autotools pkgconfig binconfig multilib_header ptest
+
+# Entropy source for random PACKAGECONFIG option
+RANDOM ?= "/dev/urandom"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} aws basic-auth bearer-auth digest-auth negotiate-auth libidn openssl proxy random threaded-resolver verbose zlib"
+PACKAGECONFIG:class-native = "ipv6 openssl proxy random threaded-resolver verbose zlib"
+PACKAGECONFIG:class-nativesdk = "ipv6 openssl proxy random threaded-resolver verbose zlib"
+
+# 'ares' and 'threaded-resolver' are mutually exclusive
+PACKAGECONFIG[ares] = "--enable-ares,--disable-ares,c-ares,,,threaded-resolver"
+PACKAGECONFIG[aws] = "--enable-aws,--disable-aws"
+PACKAGECONFIG[basic-auth] = "--enable-basic-auth,--disable-basic-auth"
+PACKAGECONFIG[bearer-auth] = "--enable-bearer-auth,--disable-bearer-auth"
+PACKAGECONFIG[brotli] = "--with-brotli,--without-brotli,brotli"
+PACKAGECONFIG[builtinmanual] = "--enable-manual,--disable-manual"
+# Don't use this in production
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+PACKAGECONFIG[dict] = "--enable-dict,--disable-dict,"
+PACKAGECONFIG[digest-auth] = "--enable-digest-auth,--disable-digest-auth"
+PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
+PACKAGECONFIG[gopher] = "--enable-gopher,--disable-gopher,"
+PACKAGECONFIG[imap] = "--enable-imap,--disable-imap,"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+PACKAGECONFIG[kerberos-auth] = "--enable-kerberos-auth,--disable-kerberos-auth"
+PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
+PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap"
+PACKAGECONFIG[ldaps] = "--enable-ldaps,--disable-ldaps,openldap"
+PACKAGECONFIG[libgsasl] = "--with-libgsasl,--without-libgsasl,libgsasl"
+PACKAGECONFIG[libidn] = "--with-libidn2,--without-libidn2,libidn2"
+PACKAGECONFIG[libssh2] = "--with-libssh2,--without-libssh2,libssh2"
+PACKAGECONFIG[mbedtls] = "--with-mbedtls=${STAGING_DIR_TARGET},--without-mbedtls,mbedtls"
+PACKAGECONFIG[mqtt] = "--enable-mqtt,--disable-mqtt,"
+PACKAGECONFIG[negotiate-auth] = "--enable-negotiate-auth,--disable-negotiate-auth"
+PACKAGECONFIG[nghttp2] = "--with-nghttp2,--without-nghttp2,nghttp2"
+PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
+PACKAGECONFIG[pop3] = "--enable-pop3,--disable-pop3,"
+PACKAGECONFIG[proxy] = "--enable-proxy,--disable-proxy,"
+PACKAGECONFIG[random] = "--with-random=${RANDOM},--without-random"
+PACKAGECONFIG[rtmpdump] = "--with-librtmp,--without-librtmp,rtmpdump"
+PACKAGECONFIG[rtsp] = "--enable-rtsp,--disable-rtsp,"
+PACKAGECONFIG[smb] = "--enable-smb,--disable-smb,"
+PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp,"
+PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet,"
+PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp,"
+PACKAGECONFIG[threaded-resolver] = "--enable-threaded-resolver,--disable-threaded-resolver,,,,ares"
+PACKAGECONFIG[verbose] = "--enable-verbose,--disable-verbose"
+PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib"
+PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
+
+EXTRA_OECONF = " \
+    --disable-libcurl-option \
+    --disable-ntlm-wb \
+    --with-ca-bundle=${sysconfdir}/ssl/certs/ca-certificates.crt \
+    --without-libpsl \
+    --enable-optimize \
+    ${@'--without-ssl' if (bb.utils.filter('PACKAGECONFIG', 'gnutls mbedtls openssl', d) == '') else ''} \
+"
+
+do_install:append:class-target() {
+	# cleanup buildpaths from curl-config
+	sed -i \
+	    -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
+	    -e 's,--with-libtool-sysroot=${STAGING_DIR_TARGET},,g' \
+	    -e 's|${DEBUG_PREFIX_MAP}||g' \
+	    -e 's|${@" ".join(d.getVar("DEBUG_PREFIX_MAP").split())}||g' \
+	    ${D}${bindir}/curl-config
+}
+
+do_compile_ptest() {
+	oe_runmake -C ${B}/tests
+}
+
+do_install_ptest() {
+	cat  ${WORKDIR}/disable-tests >> ${S}/tests/data/DISABLED
+	rm -f ${B}/tests/configurehelp.pm
+	cp -rf ${B}/tests ${D}${PTEST_PATH}
+        rm -f ${D}${PTEST_PATH}/tests/libtest/.libs/libhostname.la
+        rm -f ${D}${PTEST_PATH}/tests/libtest/libhostname.la
+        mv ${D}${PTEST_PATH}/tests/libtest/.libs/* ${D}${PTEST_PATH}/tests/libtest/
+        mv ${D}${PTEST_PATH}/tests/libtest/libhostname.so ${D}${PTEST_PATH}/tests/libtest/.libs/
+        mv ${D}${PTEST_PATH}/tests/http/clients/.libs/* ${D}${PTEST_PATH}/tests/http/clients/
+	cp -rf ${S}/tests ${D}${PTEST_PATH}
+	find ${D}${PTEST_PATH}/ -type f -name Makefile.am -o -name Makefile.in -o -name Makefile -delete
+	install -d ${D}${PTEST_PATH}/src
+	ln -sf ${bindir}/curl   ${D}${PTEST_PATH}/src/curl
+	cp -rf ${D}${bindir}/curl-config ${D}${PTEST_PATH}
+}
+
+RDEPENDS:${PN}-ptest += " \
+	bash \
+	perl-module-b \
+	perl-module-base \
+	perl-module-cwd \
+	perl-module-digest \
+	perl-module-digest-md5 \
+	perl-module-file-basename \
+	perl-module-file-spec \
+	perl-module-file-temp \
+	perl-module-io-socket \
+	perl-module-ipc-open2 \
+	perl-module-list-util \
+	perl-module-memoize \
+	perl-module-storable \
+	perl-module-time-hires \
+"
+
+PACKAGES =+ "lib${BPN}"
+
+FILES:lib${BPN} = "${libdir}/lib*.so.*"
+RRECOMMENDS:lib${BPN} += "ca-certificates"
+
+FILES:${PN} += "${datadir}/zsh"
+
+inherit multilib_script
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/curl-config"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/db/db_5.3.28.bb b/poky/meta/recipes-support/db/db_5.3.28.bb
index c5427f5..a99d5ce 100644
--- a/poky/meta/recipes-support/db/db_5.3.28.bb
+++ b/poky/meta/recipes-support/db/db_5.3.28.bb
@@ -18,7 +18,6 @@
 CVE_PRODUCT = "oracle_berkeley_db berkeley_db"
 CVE_VERSION = "11.2.${PV}"
 
-PR = "r1"
 PE = "1"
 
 SRC_URI = "https://download.oracle.com/berkeley-db/db-${PV}.tar.gz"
diff --git a/poky/meta/recipes-support/debianutils/debianutils_5.13.bb b/poky/meta/recipes-support/debianutils/debianutils_5.13.bb
new file mode 100644
index 0000000..915277b
--- /dev/null
+++ b/poky/meta/recipes-support/debianutils/debianutils_5.13.bb
@@ -0,0 +1,60 @@
+SUMMARY = "Miscellaneous utilities specific to Debian"
+DESCRIPTION = "Provides a number of small utilities which are used \
+primarily by the installation scripts of Debian packages, although \
+you may use them directly. "
+HOMEPAGE = "https://packages.debian.org/sid/debianutils"
+BUGTRACKER = "https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=debianutils;dist=unstable"
+SECTION = "base"
+LICENSE = "GPL-2.0-only & SMAIL_GPL"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=74765f57ae5dd2b10ffbc39528d98753"
+
+SRC_URI = "git://salsa.debian.org/debian/debianutils.git;protocol=https;branch=master \
+           "
+
+SRCREV = "d49a78eb264c1b2ad3d0d6de8e1fb776bda9c943"
+
+inherit autotools update-alternatives
+
+S = "${WORKDIR}/git"
+
+# Disable po4a (translated manpages) sub-directory, as that requires po4a to build
+do_configure:prepend() {
+    sed -i -e 's:po4a::g' ${S}/Makefile.am
+}
+
+
+do_install:append() {
+    if [ "${base_bindir}" != "${bindir}" ]; then
+        # Debian places some utils into ${base_bindir} as does busybox
+        install -d ${D}${base_bindir}
+        for app in run-parts; do
+            mv ${D}${bindir}/$app ${D}${base_bindir}/$app
+        done
+    fi
+}
+
+# Note that we package the update-alternatives name.
+#
+PACKAGES =+ "${PN}-run-parts"
+FILES:${PN}-run-parts = "${base_bindir}/run-parts.debianutils"
+
+RDEPENDS:${PN} += "${PN}-run-parts"
+RDEPENDS:${PN}:class-native = ""
+
+ALTERNATIVE_PRIORITY = "30"
+ALTERNATIVE:${PN} = "add-shell installkernel remove-shell savelog which"
+
+ALTERNATIVE_PRIORITY_${PN}-run-parts = "60"
+ALTERNATIVE:${PN}-run-parts = "run-parts"
+
+ALTERNATIVE:${PN}-doc = "which.1"
+ALTERNATIVE_LINK_NAME[which.1] = "${mandir}/man1/which.1"
+
+ALTERNATIVE_LINK_NAME[add-shell] = "${sbindir}/add-shell"
+ALTERNATIVE_LINK_NAME[installkernel] = "${sbindir}/installkernel"
+ALTERNATIVE_LINK_NAME[remove-shell] = "${sbindir}/remove-shell"
+ALTERNATIVE_LINK_NAME[run-parts] = "${base_bindir}/run-parts"
+ALTERNATIVE_LINK_NAME[savelog] = "${bindir}/savelog"
+ALTERNATIVE_LINK_NAME[which] = "${bindir}/which"
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-support/debianutils/debianutils_5.8.bb b/poky/meta/recipes-support/debianutils/debianutils_5.8.bb
deleted file mode 100644
index fb17d2d..0000000
--- a/poky/meta/recipes-support/debianutils/debianutils_5.8.bb
+++ /dev/null
@@ -1,60 +0,0 @@
-SUMMARY = "Miscellaneous utilities specific to Debian"
-DESCRIPTION = "Provides a number of small utilities which are used \
-primarily by the installation scripts of Debian packages, although \
-you may use them directly. "
-HOMEPAGE = "https://packages.debian.org/sid/debianutils"
-BUGTRACKER = "https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=debianutils;dist=unstable"
-SECTION = "base"
-LICENSE = "GPL-2.0-only & SMAIL_GPL"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=74765f57ae5dd2b10ffbc39528d98753"
-
-SRC_URI = "git://salsa.debian.org/debian/debianutils.git;protocol=https;branch=master \
-           "
-
-SRCREV = "69116b856177ceb270908103b5776f897d2863c3"
-
-inherit autotools update-alternatives
-
-S = "${WORKDIR}/git"
-
-# Disable po4a (translated manpages) sub-directory, as that requires po4a to build
-do_configure:prepend() {
-    sed -i -e 's:po4a::g' ${S}/Makefile.am
-}
-
-
-do_install:append() {
-    if [ "${base_bindir}" != "${bindir}" ]; then
-        # Debian places some utils into ${base_bindir} as does busybox
-        install -d ${D}${base_bindir}
-        for app in run-parts; do
-            mv ${D}${bindir}/$app ${D}${base_bindir}/$app
-        done
-    fi
-}
-
-# Note that we package the update-alternatives name.
-#
-PACKAGES =+ "${PN}-run-parts"
-FILES:${PN}-run-parts = "${base_bindir}/run-parts.debianutils"
-
-RDEPENDS:${PN} += "${PN}-run-parts"
-RDEPENDS:${PN}:class-native = ""
-
-ALTERNATIVE_PRIORITY = "30"
-ALTERNATIVE:${PN} = "add-shell installkernel remove-shell savelog which"
-
-ALTERNATIVE_PRIORITY_${PN}-run-parts = "60"
-ALTERNATIVE:${PN}-run-parts = "run-parts"
-
-ALTERNATIVE:${PN}-doc = "which.1"
-ALTERNATIVE_LINK_NAME[which.1] = "${mandir}/man1/which.1"
-
-ALTERNATIVE_LINK_NAME[add-shell] = "${sbindir}/add-shell"
-ALTERNATIVE_LINK_NAME[installkernel] = "${sbindir}/installkernel"
-ALTERNATIVE_LINK_NAME[remove-shell] = "${sbindir}/remove-shell"
-ALTERNATIVE_LINK_NAME[run-parts] = "${base_bindir}/run-parts"
-ALTERNATIVE_LINK_NAME[savelog] = "${bindir}/savelog"
-ALTERNATIVE_LINK_NAME[which] = "${bindir}/which"
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-support/diffoscope/diffoscope_244.bb b/poky/meta/recipes-support/diffoscope/diffoscope_244.bb
deleted file mode 100644
index c17bd81..0000000
--- a/poky/meta/recipes-support/diffoscope/diffoscope_244.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-SUMMARY = "in-depth comparison of files, archives, and directories"
-DESCRIPTION = "Tries to get to the bottom of what makes files or directories \
-different. It will recursively unpack archives of many kinds and transform \
-various binary formats into more human-readable form to compare them. \
-It can compare two tarballs, ISO images, or PDF just as easily."
-HOMEPAGE = "https://diffoscope.org/"
-BUGTRACKER = "https://salsa.debian.org/reproducible-builds/diffoscope/-/issues"
-LICENSE = "GPL-3.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-PYPI_PACKAGE = "diffoscope"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "8bee8bbb144cdb7ddfa21886d5ce1822220139241c9a53def09b4adc3340db93"
-
-RDEPENDS:${PN} += "\
-        binutils \
-        python3-curses \
-        python3-difflib \
-        python3-fcntl \
-        python3-json \
-        python3-libarchive-c \
-        python3-magic \
-        python3-multiprocessing \
-        python3-pprint \
-        python3-rpm \
-        squashfs-tools \
-        vim \
-        "
-
-# Dependencies don't build for musl
-COMPATIBLE_HOST:libc-musl = 'null'
-
-do_install:append:class-native() {
-	create_wrapper ${D}${bindir}/diffoscope \
-		MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \
-		RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
-		LD_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE} \
-		RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE}
-}
-
-BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-support/diffoscope/diffoscope_249.bb b/poky/meta/recipes-support/diffoscope/diffoscope_249.bb
new file mode 100644
index 0000000..b679103
--- /dev/null
+++ b/poky/meta/recipes-support/diffoscope/diffoscope_249.bb
@@ -0,0 +1,43 @@
+SUMMARY = "in-depth comparison of files, archives, and directories"
+DESCRIPTION = "Tries to get to the bottom of what makes files or directories \
+different. It will recursively unpack archives of many kinds and transform \
+various binary formats into more human-readable form to compare them. \
+It can compare two tarballs, ISO images, or PDF just as easily."
+HOMEPAGE = "https://diffoscope.org/"
+BUGTRACKER = "https://salsa.debian.org/reproducible-builds/diffoscope/-/issues"
+LICENSE = "GPL-3.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+PYPI_PACKAGE = "diffoscope"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "bc4d8cb3198025013784ef7e3fa61b7a642de39e5b790c45d7c29d153306fbdd"
+
+RDEPENDS:${PN} += "\
+        binutils \
+        python3-curses \
+        python3-difflib \
+        python3-fcntl \
+        python3-json \
+        python3-libarchive-c \
+        python3-magic \
+        python3-multiprocessing \
+        python3-pprint \
+        python3-rpm \
+        squashfs-tools \
+        vim \
+        "
+
+# Dependencies don't build for musl
+COMPATIBLE_HOST:libc-musl = 'null'
+
+do_install:append:class-native() {
+	create_wrapper ${D}${bindir}/diffoscope \
+		MAGIC=${STAGING_DIR_NATIVE}${datadir_native}/misc/magic.mgc \
+		RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+		LD_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE} \
+		RPM_ETCCONFIGDIR=${STAGING_DIR_NATIVE}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/poky/meta/recipes-support/enchant/enchant2_2.5.0.bb b/poky/meta/recipes-support/enchant/enchant2_2.5.0.bb
deleted file mode 100644
index f5ec1ef..0000000
--- a/poky/meta/recipes-support/enchant/enchant2_2.5.0.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Enchant Spell checker API Library"
-DESCRIPTION = "A library (and command-line program) that wraps a number of \
-different spelling libraries and programs with a consistent interface."
-SECTION = "libs"
-HOMEPAGE = "https://abiword.github.io/enchant/"
-BUGTRACKER = "https://github.com/AbiWord/enchant/issues/"
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = "glib-2.0 groff-native"
-
-inherit autotools pkgconfig github-releases
-
-SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz"
-SRC_URI[sha256sum] = "149e224cdd2ca825d874639578b6246e07f37d5b8f3970658a377a1ef46f2e15"
-
-GITHUB_BASE_URI = "https://github.com/AbiWord/enchant/releases"
-
-S = "${WORKDIR}/enchant-${PV}"
-
-EXTRA_OEMAKE = "pkgdatadir=${datadir}/enchant-2"
-
-PACKAGECONFIG ??= "aspell"
-PACKAGECONFIG[aspell]  = "--with-aspell,--without-aspell,aspell,aspell"
-PACKAGECONFIG[hunspell]  = "--with-hunspell,--without-hunspell,hunspell,hunspell"
-
-FILES:${PN} += " \
-    ${datadir}/enchant-2 \
-    ${libdir}/enchant-2 \
-"
-FILES:${PN}-staticdev += "${libdir}/enchant-2/*.a"
diff --git a/poky/meta/recipes-support/enchant/enchant2_2.6.1.bb b/poky/meta/recipes-support/enchant/enchant2_2.6.1.bb
new file mode 100644
index 0000000..a3510a8
--- /dev/null
+++ b/poky/meta/recipes-support/enchant/enchant2_2.6.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Enchant Spell checker API Library"
+DESCRIPTION = "A library (and command-line program) that wraps a number of \
+different spelling libraries and programs with a consistent interface."
+SECTION = "libs"
+HOMEPAGE = "https://abiword.github.io/enchant/"
+BUGTRACKER = "https://github.com/AbiWord/enchant/issues/"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "glib-2.0 groff-native"
+
+inherit autotools pkgconfig github-releases
+
+SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz"
+SRC_URI[sha256sum] = "f24e12469137ae1d03140bb9032a47a5947c36f4d1e2f12b929061005eb15279"
+
+GITHUB_BASE_URI = "https://github.com/AbiWord/enchant/releases"
+
+S = "${WORKDIR}/enchant-${PV}"
+
+EXTRA_OEMAKE = "pkgdatadir=${datadir}/enchant-2"
+
+PACKAGECONFIG ??= "aspell"
+PACKAGECONFIG[aspell]  = "--with-aspell,--without-aspell,aspell,aspell"
+PACKAGECONFIG[hunspell]  = "--with-hunspell,--without-hunspell,hunspell,hunspell"
+
+FILES:${PN} += " \
+    ${datadir}/enchant-2 \
+    ${libdir}/enchant-2 \
+"
+FILES:${PN}-staticdev += "${libdir}/enchant-2/*.a"
diff --git a/poky/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch b/poky/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch
index ea17e87..26b707a 100644
--- a/poky/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch
+++ b/poky/meta/recipes-support/libevent/libevent/0004-test-retriable-tests-are-marked-failed-only-when-all-a.patch
@@ -6,7 +6,7 @@
 
 Fixes: #1193
 
-Upstream-Status: Accepted
+Upstream-Status: Backport [https://github.com/libevent/libevent/commit/3daebf308a01b4b2d3fb867be3d6631f7b5a2dbb]
 
 Signed-off-by: Thomas Perrot <thomas.perrot@bootlin.com>
 ---
diff --git a/poky/meta/recipes-support/libnl/libnl_3.7.0.bb b/poky/meta/recipes-support/libnl/libnl_3.7.0.bb
deleted file mode 100644
index 38d21ff..0000000
--- a/poky/meta/recipes-support/libnl/libnl_3.7.0.bb
+++ /dev/null
@@ -1,64 +0,0 @@
-SUMMARY = "A library for applications dealing with netlink sockets"
-DESCRIPTION = "The libnl suite is a collection of libraries providing \
-APIs to netlink protocol based Linux kernel interfaces. libnl is the core \
-library implementing the fundamentals required to use the netlink protocol \
-such as socket handling, message construction and parsing, and sending \
-and receiving of data."
-HOMEPAGE = "http://www.infradead.org/~tgr/libnl/"
-SECTION = "libs/network"
-
-PE = "1"
-
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = "flex-native bison-native"
-
-SRC_URI = "${GITHUB_BASE_URI}/download/${BPN}${@d.getVar('PV').replace('.','_')}/${BP}.tar.gz \
-           file://run-ptest \
-           "
-
-SRC_URI[sha256sum] = "9fe43ccbeeea72c653bdcf8c93332583135cda46a79507bfd0a483bb57f65939"
-
-GITHUB_BASE_URI = "https://github.com/thom311/${BPN}/releases"
-UPSTREAM_CHECK_REGEX = "releases/tag/libnl(?P<pver>.+)"
-
-inherit autotools pkgconfig ptest github-releases
-
-FILES:${PN} = "${libdir}/libnl-3.so.* \
-               ${libdir}/libnl.so.* \
-               ${sysconfdir}"
-RREPLACES:${PN} = "libnl2"
-RCONFLICTS:${PN} = "libnl2"
-
-FILES:${PN}-dev += "${libdir}/libnl/cli/*/*.la"
-FILES:${PN}-staticdev += "${libdir}/libnl/cli/*/*.a"
-
-PACKAGES += "${PN}-cli ${PN}-genl ${PN}-idiag ${PN}-nf ${PN}-route ${PN}-xfrm"
-FILES:${PN}-cli   = "${libdir}/libnl-cli-3.so.* \
-                     ${libdir}/libnl/cli/*/*.so \
-                     ${bindir}/genl-ctrl-list \
-                     ${bindir}/idiag-socket-details \
-                     ${bindir}/nf-* \
-                     ${bindir}/nl-*"
-FILES:${PN}-genl  = "${libdir}/libnl-genl-3.so.* \
-                     ${libdir}/libnl-genl.so.*"
-FILES:${PN}-idiag = "${libdir}/libnl-idiag-3.so.*"
-FILES:${PN}-nf    = "${libdir}/libnl-nf-3.so.*"
-FILES:${PN}-route = "${libdir}/libnl-route-3.so.*"
-FILES:${PN}-xfrm  = "${libdir}/libnl-xfrm-3.so.*"
-RREPLACES:${PN}-genl = "libnl-genl2"
-RCONFLICTS:${PN}-genl = "libnl-genl2"
-
-DEPENDS += "${@bb.utils.contains('PTEST_ENABLED', '1', 'libcheck', '', d)}"
-RRECOMMENDS:${PN}-ptest += "kernel-module-dummy kernel-module-bonding"
-
-do_compile_ptest() {
-    oe_runmake ./tests/check-all
-}
-
-do_install_ptest() {
-    ./libtool install install ./tests/check-all ${D}${PTEST_PATH}/
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/libnl/libnl_3.8.0.bb b/poky/meta/recipes-support/libnl/libnl_3.8.0.bb
new file mode 100644
index 0000000..28b2e57
--- /dev/null
+++ b/poky/meta/recipes-support/libnl/libnl_3.8.0.bb
@@ -0,0 +1,64 @@
+SUMMARY = "A library for applications dealing with netlink sockets"
+DESCRIPTION = "The libnl suite is a collection of libraries providing \
+APIs to netlink protocol based Linux kernel interfaces. libnl is the core \
+library implementing the fundamentals required to use the netlink protocol \
+such as socket handling, message construction and parsing, and sending \
+and receiving of data."
+HOMEPAGE = "http://www.infradead.org/~tgr/libnl/"
+SECTION = "libs/network"
+
+PE = "1"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "flex-native bison-native"
+
+SRC_URI = "${GITHUB_BASE_URI}/download/${BPN}${@d.getVar('PV').replace('.','_')}/${BP}.tar.gz \
+           file://run-ptest \
+           "
+
+SRC_URI[sha256sum] = "bb726c6d7a08b121978d73ff98425bf313fa26a27a331d465e4f1d7ec5b838c6"
+
+GITHUB_BASE_URI = "https://github.com/thom311/${BPN}/releases"
+UPSTREAM_CHECK_REGEX = "releases/tag/libnl(?P<pver>.+)"
+
+inherit autotools pkgconfig ptest github-releases
+
+FILES:${PN} = "${libdir}/libnl-3.so.* \
+               ${libdir}/libnl.so.* \
+               ${sysconfdir}"
+RREPLACES:${PN} = "libnl2"
+RCONFLICTS:${PN} = "libnl2"
+
+FILES:${PN}-dev += "${libdir}/libnl/cli/*/*.la"
+FILES:${PN}-staticdev += "${libdir}/libnl/cli/*/*.a"
+
+PACKAGES += "${PN}-cli ${PN}-genl ${PN}-idiag ${PN}-nf ${PN}-route ${PN}-xfrm"
+FILES:${PN}-cli   = "${libdir}/libnl-cli-3.so.* \
+                     ${libdir}/libnl/cli/*/*.so \
+                     ${bindir}/genl-ctrl-list \
+                     ${bindir}/idiag-socket-details \
+                     ${bindir}/nf-* \
+                     ${bindir}/nl-*"
+FILES:${PN}-genl  = "${libdir}/libnl-genl-3.so.* \
+                     ${libdir}/libnl-genl.so.*"
+FILES:${PN}-idiag = "${libdir}/libnl-idiag-3.so.*"
+FILES:${PN}-nf    = "${libdir}/libnl-nf-3.so.*"
+FILES:${PN}-route = "${libdir}/libnl-route-3.so.*"
+FILES:${PN}-xfrm  = "${libdir}/libnl-xfrm-3.so.*"
+RREPLACES:${PN}-genl = "libnl-genl2"
+RCONFLICTS:${PN}-genl = "libnl-genl2"
+
+DEPENDS += "${@bb.utils.contains('PTEST_ENABLED', '1', 'libcheck', '', d)}"
+RRECOMMENDS:${PN}-ptest += "kernel-module-dummy kernel-module-bonding"
+
+do_compile_ptest() {
+    oe_runmake ./tests/check-all
+}
+
+do_install_ptest() {
+    ./libtool install install ./tests/check-all ${D}${PTEST_PATH}/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb b/poky/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb
index 5abeced..a605857 100644
--- a/poky/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb
+++ b/poky/meta/recipes-support/libsoup/libsoup-2.4_2.74.3.bb
@@ -40,7 +40,7 @@
 ntlm_auth = '${bindir}/ntlm_auth'
 EOF
 }
-EXTRA_OEMESON += "--cross-file ${WORKDIR}/soup.cross"
+EXTRA_OEMESON:append:class-target = " --cross-file ${WORKDIR}/soup.cross"
 
 EXTRA_OEMESON += "-Dvapi=disabled -Dtls_check=false"
 
diff --git a/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb b/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb
index ad86c89..3996ae6 100644
--- a/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb
+++ b/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb
@@ -37,7 +37,7 @@
 ntlm_auth = '${bindir}/ntlm_auth'
 EOF
 }
-EXTRA_OEMESON += "--cross-file ${WORKDIR}/soup.cross"
+EXTRA_OEMESON:append:class-target = " --cross-file ${WORKDIR}/soup.cross"
 
 EXTRA_OEMESON += "-Dvapi=disabled -Dtls_check=false"
 # Disable the test suites
diff --git a/poky/meta/recipes-support/nghttp2/nghttp2_1.55.1.bb b/poky/meta/recipes-support/nghttp2/nghttp2_1.55.1.bb
deleted file mode 100644
index 1be9a34..0000000
--- a/poky/meta/recipes-support/nghttp2/nghttp2_1.55.1.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "HTTP/2 C Library and tools"
-HOMEPAGE = "https://nghttp2.org/"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=764abdf30b2eadd37ce47dcbce0ea1ec"
-
-SRC_URI = "\
-    ${GITHUB_BASE_URI}/download/v${PV}/nghttp2-${PV}.tar.xz \
-    file://0001-fetch-ocsp-response-use-python3.patch \
-"
-SRC_URI[sha256sum] = "19490b7c8c2ded1cf7c3e3a54ef4304e3a7876ae2d950d60a81d0dc6053be419"
-
-inherit cmake manpages python3native github-releases
-PACKAGECONFIG[manpages] = ""
-
-# examples are never installed, and don't need to be built in the
-# first place
-EXTRA_OECMAKE = "-DENABLE_EXAMPLES=OFF -DENABLE_APP=OFF -DENABLE_HPACK_TOOLS=OFF -DENABLE_PYTHON_BINDINGS=OFF"
-
-PACKAGES =+ "lib${BPN} ${PN}-proxy "
-
-RDEPENDS:${PN} = "${PN}-proxy (>= ${PV})"
-RDEPENDS:${PN}:class-native = ""
-RDEPENDS:${PN}-proxy = "openssl python3-core python3-io python3-shell"
-
-ALLOW_EMPTY:${PN} = "1"
-FILES:${PN} = ""
-FILES:lib${BPN} = "${libdir}/*${SOLIBS}"
-FILES:${PN}-proxy = "${bindir}/nghttpx ${datadir}/${BPN}/fetch-ocsp-response"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/nghttp2/nghttp2_1.56.0.bb b/poky/meta/recipes-support/nghttp2/nghttp2_1.56.0.bb
new file mode 100644
index 0000000..a011bd4
--- /dev/null
+++ b/poky/meta/recipes-support/nghttp2/nghttp2_1.56.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "HTTP/2 C Library and tools"
+HOMEPAGE = "https://nghttp2.org/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=764abdf30b2eadd37ce47dcbce0ea1ec"
+
+SRC_URI = "\
+    ${GITHUB_BASE_URI}/download/v${PV}/nghttp2-${PV}.tar.xz \
+    file://0001-fetch-ocsp-response-use-python3.patch \
+"
+SRC_URI[sha256sum] = "65eee8021e9d3620589a4a4e91ce9983d802b5229f78f3313770e13f4d2720e9"
+
+inherit cmake manpages python3native github-releases
+PACKAGECONFIG[manpages] = ""
+
+# examples are never installed, and don't need to be built in the
+# first place
+EXTRA_OECMAKE = "-DENABLE_EXAMPLES=OFF -DENABLE_APP=OFF -DENABLE_HPACK_TOOLS=OFF -DENABLE_PYTHON_BINDINGS=OFF"
+
+PACKAGES =+ "lib${BPN} ${PN}-proxy "
+
+RDEPENDS:${PN} = "${PN}-proxy (>= ${PV})"
+RDEPENDS:${PN}:class-native = ""
+RDEPENDS:${PN}-proxy = "openssl python3-core python3-io python3-shell"
+
+ALLOW_EMPTY:${PN} = "1"
+FILES:${PN} = ""
+FILES:lib${BPN} = "${libdir}/*${SOLIBS}"
+FILES:${PN}-proxy = "${bindir}/nghttpx ${datadir}/${BPN}/fetch-ocsp-response"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-support/sqlite/sqlite3_3.43.0.bb b/poky/meta/recipes-support/sqlite/sqlite3_3.43.0.bb
deleted file mode 100644
index 84644a0..0000000
--- a/poky/meta/recipes-support/sqlite/sqlite3_3.43.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require sqlite3.inc
-
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
-
-SRC_URI = "http://www.sqlite.org/2023/sqlite-autoconf-${SQLITE_PV}.tar.gz"
-SRC_URI[sha256sum] = "49008dbf3afc04d4edc8ecfc34e4ead196973034293c997adad2f63f01762ae1"
-
-CVE_STATUS[CVE-2023-36191] = "disputed: The error is a bug. It has been fixed upstream. But it is not a vulnerability"
-
diff --git a/poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb b/poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb
new file mode 100644
index 0000000..9314635
--- /dev/null
+++ b/poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb
@@ -0,0 +1,10 @@
+require sqlite3.inc
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
+
+SRC_URI = "http://www.sqlite.org/2023/sqlite-autoconf-${SQLITE_PV}.tar.gz"
+SRC_URI[sha256sum] = "39116c94e76630f22d54cd82c3cea308565f1715f716d1b2527f1c9c969ba4d9"
+
+CVE_STATUS[CVE-2023-36191] = "disputed: The error is a bug. It has been fixed upstream. But it is not a vulnerability"
+
diff --git a/poky/meta/recipes-support/vim/vim.inc b/poky/meta/recipes-support/vim/vim.inc
index 8a399cd..5f55f59 100644
--- a/poky/meta/recipes-support/vim/vim.inc
+++ b/poky/meta/recipes-support/vim/vim.inc
@@ -10,7 +10,7 @@
 RSUGGESTS:${PN} = "diffutils"
 
 LICENSE = "Vim"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6b30ea4fa660c483b619924bc709ef99"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d1a651ab770b45d41c0f8cb5a8ca930e"
 
 SRC_URI = "git://github.com/vim/vim.git;branch=master;protocol=https \
            file://disable_acl_header_check.patch \
@@ -19,8 +19,8 @@
            file://no-path-adjust.patch \
            "
 
-PV .= ".1664"
-SRCREV = "8154e642aa476e1a5d3de66c34e8289845b2b797"
+PV .= ".1894"
+SRCREV = "e5f7cd0a60d0eeab84f7aeb35c13d3af7e50072e"
 
 # Do not consider .z in x.y.z, as that is updated with every commit
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+)\.0"
diff --git a/poky/scripts/lib/devtool/build_sdk.py b/poky/scripts/lib/devtool/build_sdk.py
index 6fe02ff..1cd4831 100644
--- a/poky/scripts/lib/devtool/build_sdk.py
+++ b/poky/scripts/lib/devtool/build_sdk.py
@@ -13,7 +13,7 @@
 import errno
 import sys
 import tempfile
-from devtool import exec_build_env_command, setup_tinfoil, parse_recipe, DevtoolError
+from devtool import DevtoolError
 from devtool import build_image
 
 logger = logging.getLogger('devtool')
diff --git a/poky/scripts/lib/devtool/standard.py b/poky/scripts/lib/devtool/standard.py
index 88a6ecd..d53fb81 100644
--- a/poky/scripts/lib/devtool/standard.py
+++ b/poky/scripts/lib/devtool/standard.py
@@ -587,6 +587,7 @@
         preservestampfile = os.path.join(sstate_manifests, 'preserve-stamps')
         with open(preservestampfile, 'w') as f:
             f.write(d.getVar('STAMP'))
+        tinfoil.modified_files()
         try:
             if is_kernel_yocto:
                 # We need to generate the kernel config
diff --git a/poky/scripts/lib/devtool/upgrade.py b/poky/scripts/lib/devtool/upgrade.py
index e015a85..4873089 100644
--- a/poky/scripts/lib/devtool/upgrade.py
+++ b/poky/scripts/lib/devtool/upgrade.py
@@ -429,6 +429,7 @@
         newvalues["LIC_FILES_CHKSUM"] = newlicchksum
         _add_license_diff_to_recipe(fullpath, license_diff)
 
+    tinfoil.modified_files()
     try:
         rd = tinfoil.parse_recipe_file(fullpath, False)
     except bb.tinfoil.TinfoilCommandFailed as e:
diff --git a/poky/scripts/lib/recipetool/append.py b/poky/scripts/lib/recipetool/append.py
index 88ed8c5..9dbb1cc 100644
--- a/poky/scripts/lib/recipetool/append.py
+++ b/poky/scripts/lib/recipetool/append.py
@@ -300,6 +300,7 @@
                     perms = '0755'
             install = {args.newfile: (args.targetpath, perms)}
         oe.recipeutils.bbappend_recipe(rd, args.destlayer, {args.newfile: sourcepath}, install, wildcardver=args.wildcard_version, machine=args.machine)
+        tinfoil.modified_files()
         return 0
     else:
         if alternative_pns:
@@ -355,7 +356,7 @@
         copyfiles[newfile] = srcfile
 
     oe.recipeutils.bbappend_recipe(rd, args.destlayer, copyfiles, None, wildcardver=args.wildcard_version, machine=args.machine, extralines=extralines)
-
+    tinfoil.modified_files()
 
 def appendsrcfiles(parser, args):
     recipedata = _parse_recipe(args.recipe, tinfoil)
diff --git a/poky/scripts/lib/recipetool/create.py b/poky/scripts/lib/recipetool/create.py
index f9dda3c..143bc63 100644
--- a/poky/scripts/lib/recipetool/create.py
+++ b/poky/scripts/lib/recipetool/create.py
@@ -901,6 +901,7 @@
                 f.write('%s\n' % line)
                 lastline = line
         log_info_cond('Recipe %s has been created; further editing may be required to make it fully functional' % outfile, args.devtool)
+        tinfoil.modified_files()
 
     if tempsrc:
         if args.keep_temp:
diff --git a/poky/scripts/lib/recipetool/setvar.py b/poky/scripts/lib/recipetool/setvar.py
index f8e2ee7..b5ad335 100644
--- a/poky/scripts/lib/recipetool/setvar.py
+++ b/poky/scripts/lib/recipetool/setvar.py
@@ -49,6 +49,7 @@
         for patch in patches:
             for line in patch:
                 sys.stdout.write(line)
+    tinfoil.modified_files()
     return 0
 
 
diff --git a/poky/scripts/lib/wic/plugins/source/bootimg-partition.py b/poky/scripts/lib/wic/plugins/source/bootimg-partition.py
index 8956162..58f6da7 100644
--- a/poky/scripts/lib/wic/plugins/source/bootimg-partition.py
+++ b/poky/scripts/lib/wic/plugins/source/bootimg-partition.py
@@ -112,7 +112,7 @@
                 # Use a custom configuration for extlinux.conf
                 extlinux_conf = custom_cfg
                 logger.debug("Using custom configuration file "
-                             "%s for extlinux.cfg", configfile)
+                             "%s for extlinux.conf", configfile)
             else:
                 raise WicError("configfile is specified but failed to "
                                "get it from %s." % configfile)
diff --git a/poky/scripts/postinst-intercepts/update_mandb b/poky/scripts/postinst-intercepts/update_mandb
index a061bb4..f91bafd 100644
--- a/poky/scripts/postinst-intercepts/update_mandb
+++ b/poky/scripts/postinst-intercepts/update_mandb
@@ -9,6 +9,8 @@
 CONFIG=$(mktemp --tmpdir update-mandb.XXXXX)
 sed "s:\(\s\)/:\1$D/:g" $D${sysconfdir}/man_db.conf > $CONFIG
 
+mkdir -p $D${localstatedir}/cache/man/
+
 PSEUDO_UNLOAD=1 ${binprefix}qemuwrapper -L $D $D${bindir}/mandb --config-file $CONFIG --create
 
 rm -f $CONFIG
diff --git a/poky/scripts/runqemu b/poky/scripts/runqemu
index 3a17033..0668e12 100755
--- a/poky/scripts/runqemu
+++ b/poky/scripts/runqemu
@@ -1467,6 +1467,19 @@
             for entry in self.get('SERIAL_CONSOLES').split(' '):
                 self.kernel_cmdline_script += ' console=%s' %entry.split(';')[1]
 
+        # We always wants ttyS0 and ttyS1 in qemu machines (see SERIAL_CONSOLES).
+        # If no serial or serialtcp options were specified, only ttyS0 is created
+        # and sysvinit shows an error trying to enable ttyS1:
+        #     INIT: Id "S1" respawning too fast: disabled for 5 minutes
+        serial_num = len(re.findall("-serial", self.qemu_opt))
+
+        # Assume if the user passed serial options, they know what they want
+        # and pad to two devices
+        if serial_num == 1:
+            self.qemu_opt += " -serial null"
+        elif serial_num >= 2:
+            return
+
         if self.serialstdio == True or self.nographic == True:
             self.qemu_opt += " -serial mon:stdio"
         else:
@@ -1478,10 +1491,6 @@
 
                 self.qemu_opt += " %s" % self.get("QB_SERIAL_OPT")
 
-        # We always wants ttyS0 and ttyS1 in qemu machines (see SERIAL_CONSOLES).
-        # If no serial or serialtcp options were specified, only ttyS0 is created
-        # and sysvinit shows an error trying to enable ttyS1:
-        #     INIT: Id "S1" respawning too fast: disabled for 5 minutes
         serial_num = len(re.findall("-serial", self.qemu_opt))
         if serial_num < 2:
             self.qemu_opt += " -serial null"