From 94962a5e08596d4e126f24fffa7cb5519dbdfbf7 Mon Sep 17 00:00:00 2001 From: Cameron E Baird Date: Mon, 5 Jun 2023 09:36:11 -0700 Subject: [PATCH 01/14] Align mariner_cmdline_mshv with the working configuration from old loader's linuxloader.conf (#5600) --- SPECS/kernel-mshv/kernel-mshv.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/SPECS/kernel-mshv/kernel-mshv.spec b/SPECS/kernel-mshv/kernel-mshv.spec index b0d34dd782f..61f9f0f25c0 100644 --- a/SPECS/kernel-mshv/kernel-mshv.spec +++ b/SPECS/kernel-mshv/kernel-mshv.spec @@ -11,7 +11,7 @@ Summary: Mariner kernel that has MSHV Host support Name: kernel-mshv Version: 5.15.110.mshv2 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Group: Development/Tools Vendor: Microsoft Corporation @@ -130,7 +130,7 @@ ln -s vmlinux-%{uname_r} %{buildroot}%{_libdir}/debug/lib/modules/%{uname_r}/vml cat > %{buildroot}/boot/linux-%{uname_r}.cfg << "EOF" # GRUB Environment Block -mariner_cmdline_mshv=init=/lib/systemd/systemd ro loglevel=3 no-vmw-sta crashkernel=128M +mariner_cmdline_mshv=rd.auto=1 lockdown=integrity sysctl.kernel.unprivileged_bpf_disabled=1 init=/lib/systemd/systemd ro no-vmw-sta crashkernel=128M net.ifnames=0 plymouth.enable=0 systemd.legacy_systemd_cgroup_controller=yes systemd.unified_cgroup_hierarchy=0 audit=0 console=ttyS0,115200n8 earlyprintk mariner_linux_mshv=vmlinuz-%{uname_r} mariner_initrd_mshv=initrd.img-%{uname_r} EOF @@ -236,6 +236,10 @@ ln -sf linux-%{uname_r}.cfg /boot/mariner-mshv.cfg %{_includedir}/perf/perf_dlfilter.h %changelog +* Tue May 30 2023 Cameron Baird - 5.15.110.mshv2-3 +- Align mariner_cmdline_mshv with the working configuration from + old loader's linuxloader.conf + * Wed May 24 2023 Cameron Baird - 5.15.110.mshv2-2 - Add temporary 0001-Support-new-HV-loader... patch to support lxhvloader. - Can be reverted once the kernel patch is upstreamed. From 9108b527d1d77b4429cc5f512c428a572c83c20b Mon Sep 17 00:00:00 2001 From: rlmenge Date: Mon, 5 Jun 2023 10:19:44 -0700 Subject: [PATCH 02/14] Allow DHCP6 related packets through firewall (#5609) * Allow DHCP6 related packets through firewall --- SPECS/iptables/ip6save | 28 +++++++++++++++++++++++++ SPECS/iptables/iptables.signatures.json | 2 +- SPECS/iptables/iptables.spec | 5 ++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/SPECS/iptables/ip6save b/SPECS/iptables/ip6save index 362029f2af2..59b65b321d6 100644 --- a/SPECS/iptables/ip6save +++ b/SPECS/iptables/ip6save @@ -9,5 +9,33 @@ #keep commented till upgrade issues are sorted #-A INPUT -j LOG --log-prefix "FIREWALL:INPUT " -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT +# Support SLAAC +-A INPUT -p udp --dport 546 -d fe80::/64 -j ACCEPT +# Destination Unreachable +-A INPUT -p icmpv6 --icmpv6-type 1 -j ACCEPT +# Packet Too Big +-A INPUT -p icmpv6 --icmpv6-type 2 -j ACCEPT +# Time Exceeded +-A INPUT -p icmpv6 --icmpv6-type 3 -j ACCEPT +# Parameter Problem +-A INPUT -p icmpv6 --icmpv6-type 4 -j ACCEPT +# Echo Request +-A INPUT -p icmpv6 --icmpv6-type 128 -j ACCEPT +# Echo Reply +-A INPUT -p icmpv6 --icmpv6-type 129 -j ACCEPT +# Router Solicitation +-A INPUT -p icmpv6 --icmpv6-type 133 -j ACCEPT +# Router Advertisement +-A INPUT -p icmpv6 --icmpv6-type 134 -j ACCEPT +# Neighbour Solicitation +-A INPUT -p icmpv6 --icmpv6-type 135 -j ACCEPT +# Neighbour Advertisement +-A INPUT -p icmpv6 --icmpv6-type 136 -j ACCEPT +# Redirect +-A INPUT -p icmpv6 --icmpv6-type 137 -j ACCEPT +# Inverse Neighbour Discovery Solicitation +-A INPUT -p icmpv6 --icmpv6-type 141 -j ACCEPT +# Inverse Neighbour Discovery Advertisement +-A INPUT -p icmpv6 --icmpv6-type 142 -j ACCEPT -A OUTPUT -j ACCEPT COMMIT diff --git a/SPECS/iptables/iptables.signatures.json b/SPECS/iptables/iptables.signatures.json index 896ad50f637..69cef8bfcbe 100644 --- a/SPECS/iptables/iptables.signatures.json +++ b/SPECS/iptables/iptables.signatures.json @@ -1,7 +1,7 @@ { "Signatures": { "ip4save": "2b92caf1a6470a6d621cc7321e067d49227c0f39130e81f306c24595f7845f36", - "ip6save": "2b92caf1a6470a6d621cc7321e067d49227c0f39130e81f306c24595f7845f36", + "ip6save": "78752f828908763b926641496c52b9bf4c902237844d9fd5b7a9b0c9782f5d45", "iptables": "11a46d7c4170410896f503d64040aac9f33320dd2533163d5250341f543ef31c", "iptables-1.8.7.tar.bz2": "c109c96bb04998cd44156622d36f8e04b140701ec60531a10668cfdff5e8d8f0", "iptables.service": "40c2a272a6abb4d3e50ff9ae83cedaa241ad5963f27cb5aee113d15597553620", diff --git a/SPECS/iptables/iptables.spec b/SPECS/iptables/iptables.spec index 1dbe8aae0d3..259943bc25b 100644 --- a/SPECS/iptables/iptables.spec +++ b/SPECS/iptables/iptables.spec @@ -1,7 +1,7 @@ Summary: Linux kernel packet control tool Name: iptables Version: 1.8.7 -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2+ Vendor: Microsoft Corporation Distribution: Mariner @@ -98,6 +98,9 @@ find %{buildroot} -type f -name "*.la" -delete -print %{_mandir}/man3/* %changelog +* Wed May 31 2023 Rachel Menge - 1.8.7-2 +- Modify defaults to account for DHCPv6 + * Wed Jan 05 2022 Rachel Menge - 1.8.7-1 - Update to version 1.8.7 From 2599c59caf277e5817fdf5c46b75e123b9debe2e Mon Sep 17 00:00:00 2001 From: Vince Perri <5596945+vinceaperri@users.noreply.github.com> Date: Mon, 5 Jun 2023 13:57:26 -0400 Subject: [PATCH 03/14] Promote edk2, future, mtools; add python-pefile, python-virt-firmware (#5610) * Promote edk2, future; add python-pefile, python-virt-firmware * disable python-virt-firmware-tests package * Add back --silent, remove cross var * Promote mtools * Fix parsing issues in future package * Update cgmanifest and license files * Fix build errors in edk2, rename sources * Remove unpackaged files * Fix cgmanifest lint errors * Address license lint errors * Fix virt-firmware changelog * Fix specs again --- ...EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch | 65 - ...EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch | 57 - .../0003-OvmfPkg-enable-DEBUG_VERBOSE.patch | 54 - ...ease-max-debug-message-length-to-512.patch | 30 - ...L-on-TianoCore-splash-screen-boot-lo.patch | 3123 ----------------- ...oDxe-enable-debug-messages-in-VbeShi.patch | 540 --- ...rminalDxe-add-other-text-resolutions.patch | 129 - ...minalDxe-set-xterm-resolution-on-mod.patch | 128 - ...ResizeXterm-from-the-QEMU-command-li.patch | 90 - ...clusion-of-the-shell-from-the-firmwa.patch | 112 - ...ntroduce-fixed-PCD-for-early-hello-m.patch | 55 - ...rePeiCore-write-early-hello-message-.patch | 103 - ...tPkg-set-early-hello-message-RH-only.patch | 40 - ...tools_def-to-support-cross-compiling.patch | 75 - .../edk2/RedHatSecureBootPkKek1.pem | 22 - SPECS-EXTENDED/edk2/build-iso.sh | 26 - SPECS-EXTENDED/edk2/edk2.signatures.json | 22 - SPECS-EXTENDED/edk2/edk2.spec | 850 ----- SPECS-EXTENDED/edk2/hobble-openssl | 40 - .../edk2/openssl-patch-to-tarball.sh | 63 - SPECS-EXTENDED/edk2/update-tarball.sh | 54 - SPECS-EXTENDED/future/future-python39.patch | 65 - SPECS-EXTENDED/future/future.signatures.json | 5 - SPECS-EXTENDED/future/future.spec | 412 --- SPECS-EXTENDED/mtools/mtools.signatures.json | 5 - SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md | 2 +- SPECS/LICENSES-AND-NOTICES/data/licenses.json | 2 + ...-do-not-build-BrotliCompress-RH-only.patch | 32 +- ...ove-package-private-Brotli-include-p.patch | 50 + ...minalDxe-set-xterm-resolution-on-mod.patch | 180 + ...ResizeXterm-from-the-QEMU-command-li.patch | 219 ++ ...PcdResizeXterm-from-the-QEMU-command.patch | 264 +- ...mfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch | 121 + ...DEBUG_VERBOSE-0x00400000-in-QemuVide.patch | 173 + ...ce-DEBUG_VERBOSE-0x00400000-in-QemuR.patch | 97 + ...bDxe-Do-not-report-DXE-failure-on-Aa.patch | 96 + ...EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch | 131 + ...lLib-list-RHEL8-specific-OpenSSL-fil.patch | 181 + ...elLoaderFsDxe-suppress-error-on-no-k.patch | 84 + ...Dxe-suppress-error-on-no-swtpm-in-si.patch | 82 + ...ecurityPkg-add-TIS-sanity-check-tpm2.patch | 35 + ...curityPkg-add-TIS-sanity-check-tpm12.patch | 34 + ...invariants-for-NestedInterruptTplLib.patch | 66 + ...sertion-that-interrupts-do-not-occur.patch | 75 + ...30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json | 36 + .../edk2/30-edk2-ovmf-ia32-sb-enrolled.json | 1 + .../31-edk2-ovmf-2m-raw-x64-sb-enrolled.json | 4 +- SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json | 35 + .../edk2/40-edk2-ovmf-ia32-sb.json | 1 + .../edk2/41-edk2-ovmf-2m-raw-x64-sb.json | 4 +- SPECS/edk2/50-edk2-aarch64-qcow2.json | 32 + .../edk2/50-edk2-arm-verbose.json | 1 + .../edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json | 36 + .../edk2/50-edk2-ovmf-ia32-nosb.json | 3 +- SPECS/edk2/50-edk2-ovmf-x64-microvm.json | 22 + SPECS/edk2/51-edk2-aarch64-raw.json | 32 + .../edk2/51-edk2-ovmf-2m-raw-x64-nosb.json | 4 +- SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json | 32 + .../edk2/53-edk2-aarch64-verbose-raw.json | 3 +- SPECS/edk2/60-edk2-ovmf-x64-amdsev.json | 31 + SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json | 29 + SPECS/edk2/DBXUpdate-20230509.ia32.bin | Bin 0 -> 7634 bytes SPECS/edk2/DBXUpdate-20230509.x64.bin | Bin 0 -> 21170 bytes SPECS/edk2/edk2-build.fedora | 283 ++ SPECS/edk2/edk2-build.fedora.platforms | 47 + SPECS/edk2/edk2-build.py | 427 +++ SPECS/edk2/edk2.signatures.json | 32 + SPECS/edk2/edk2.spec | 1092 ++++++ .../edk2/ovmf-whitepaper-c770f8c.txt | 0 SPECS/future/future-fix_tests.patch | 192 + SPECS/future/future-python311.patch | 31 + SPECS/future/future-python312.patch | 70 + ...re-skip_tests_with_connection_errors.patch | 8 +- SPECS/future/future.signatures.json | 5 + SPECS/future/future.spec | 296 ++ .../mtools/mtools-3.9.6-config.patch | 0 SPECS/mtools/mtools.signatures.json | 5 + {SPECS-EXTENDED => SPECS}/mtools/mtools.spec | 97 +- .../python-pefile.signatures.json | 5 + SPECS/python-pefile/python-pefile.spec | 216 ++ .../python-virt-firmware.signatures.json | 5 + .../python-virt-firmware.spec | 174 + cgmanifest.json | 32 +- 83 files changed, 5076 insertions(+), 6336 deletions(-) delete mode 100644 SPECS-EXTENDED/edk2/0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch delete mode 100644 SPECS-EXTENDED/edk2/0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch delete mode 100644 SPECS-EXTENDED/edk2/0003-OvmfPkg-enable-DEBUG_VERBOSE.patch delete mode 100644 SPECS-EXTENDED/edk2/0004-OvmfPkg-increase-max-debug-message-length-to-512.patch delete mode 100644 SPECS-EXTENDED/edk2/0005-advertise-OpenSSL-on-TianoCore-splash-screen-boot-lo.patch delete mode 100644 SPECS-EXTENDED/edk2/0006-OvmfPkg-QemuVideoDxe-enable-debug-messages-in-VbeShi.patch delete mode 100644 SPECS-EXTENDED/edk2/0007-MdeModulePkg-TerminalDxe-add-other-text-resolutions.patch delete mode 100644 SPECS-EXTENDED/edk2/0008-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch delete mode 100644 SPECS-EXTENDED/edk2/0009-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch delete mode 100644 SPECS-EXTENDED/edk2/0011-OvmfPkg-allow-exclusion-of-the-shell-from-the-firmwa.patch delete mode 100644 SPECS-EXTENDED/edk2/0012-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch delete mode 100644 SPECS-EXTENDED/edk2/0013-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch delete mode 100644 SPECS-EXTENDED/edk2/0014-ArmVirtPkg-set-early-hello-message-RH-only.patch delete mode 100644 SPECS-EXTENDED/edk2/0015-Tweak-the-tools_def-to-support-cross-compiling.patch delete mode 100644 SPECS-EXTENDED/edk2/RedHatSecureBootPkKek1.pem delete mode 100644 SPECS-EXTENDED/edk2/build-iso.sh delete mode 100644 SPECS-EXTENDED/edk2/edk2.signatures.json delete mode 100644 SPECS-EXTENDED/edk2/edk2.spec delete mode 100755 SPECS-EXTENDED/edk2/hobble-openssl delete mode 100644 SPECS-EXTENDED/edk2/openssl-patch-to-tarball.sh delete mode 100644 SPECS-EXTENDED/edk2/update-tarball.sh delete mode 100644 SPECS-EXTENDED/future/future-python39.patch delete mode 100644 SPECS-EXTENDED/future/future.signatures.json delete mode 100644 SPECS-EXTENDED/future/future.spec delete mode 100644 SPECS-EXTENDED/mtools/mtools.signatures.json rename SPECS-EXTENDED/edk2/0016-BaseTools-do-not-build-BrotliCompress-RH-only.patch => SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch (56%) create mode 100644 SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch create mode 100644 SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch create mode 100644 SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch rename SPECS-EXTENDED/edk2/0010-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch => SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch (51%) create mode 100644 SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch create mode 100644 SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch create mode 100644 SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch create mode 100644 SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch create mode 100644 SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch create mode 100644 SPECS/edk2/0011-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch create mode 100644 SPECS/edk2/0012-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch create mode 100644 SPECS/edk2/0013-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch create mode 100644 SPECS/edk2/0014-SecurityPkg-add-TIS-sanity-check-tpm2.patch create mode 100644 SPECS/edk2/0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch create mode 100644 SPECS/edk2/0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch create mode 100644 SPECS/edk2/0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch create mode 100644 SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json rename SPECS-EXTENDED/edk2/40-edk2-ovmf-ia32-sb-enrolled.json => SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json (96%) rename SPECS-EXTENDED/edk2/40-edk2-ovmf-x64-sb-enrolled.json => SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json (87%) create mode 100644 SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json rename SPECS-EXTENDED/edk2/50-edk2-ovmf-ia32-sb.json => SPECS/edk2/40-edk2-ovmf-ia32-sb.json (96%) rename SPECS-EXTENDED/edk2/50-edk2-ovmf-x64-sb.json => SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json (88%) create mode 100644 SPECS/edk2/50-edk2-aarch64-qcow2.json rename SPECS-EXTENDED/edk2/70-edk2-arm-verbose.json => SPECS/edk2/50-edk2-arm-verbose.json (96%) create mode 100644 SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json rename SPECS-EXTENDED/edk2/60-edk2-ovmf-ia32.json => SPECS/edk2/50-edk2-ovmf-ia32-nosb.json (87%) create mode 100644 SPECS/edk2/50-edk2-ovmf-x64-microvm.json create mode 100644 SPECS/edk2/51-edk2-aarch64-raw.json rename SPECS-EXTENDED/edk2/60-edk2-ovmf-x64.json => SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json (85%) create mode 100644 SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json rename SPECS-EXTENDED/edk2/70-edk2-aarch64-verbose.json => SPECS/edk2/53-edk2-aarch64-verbose-raw.json (85%) create mode 100644 SPECS/edk2/60-edk2-ovmf-x64-amdsev.json create mode 100644 SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json create mode 100644 SPECS/edk2/DBXUpdate-20230509.ia32.bin create mode 100644 SPECS/edk2/DBXUpdate-20230509.x64.bin create mode 100644 SPECS/edk2/edk2-build.fedora create mode 100644 SPECS/edk2/edk2-build.fedora.platforms create mode 100755 SPECS/edk2/edk2-build.py create mode 100644 SPECS/edk2/edk2.signatures.json create mode 100644 SPECS/edk2/edk2.spec rename {SPECS-EXTENDED => SPECS}/edk2/ovmf-whitepaper-c770f8c.txt (100%) create mode 100644 SPECS/future/future-fix_tests.patch create mode 100644 SPECS/future/future-python311.patch create mode 100644 SPECS/future/future-python312.patch rename {SPECS-EXTENDED => SPECS}/future/future-skip_tests_with_connection_errors.patch (81%) create mode 100644 SPECS/future/future.signatures.json create mode 100644 SPECS/future/future.spec rename {SPECS-EXTENDED => SPECS}/mtools/mtools-3.9.6-config.patch (100%) create mode 100644 SPECS/mtools/mtools.signatures.json rename {SPECS-EXTENDED => SPECS}/mtools/mtools.spec (80%) create mode 100644 SPECS/python-pefile/python-pefile.signatures.json create mode 100644 SPECS/python-pefile/python-pefile.spec create mode 100644 SPECS/python-virt-firmware/python-virt-firmware.signatures.json create mode 100644 SPECS/python-virt-firmware/python-virt-firmware.spec diff --git a/SPECS-EXTENDED/edk2/0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch b/SPECS-EXTENDED/edk2/0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch deleted file mode 100644 index c8069863a73..00000000000 --- a/SPECS-EXTENDED/edk2/0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 46e9cd5dd6cb731d33e79b22619b217ba1600e52 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 27 Jan 2016 03:05:18 +0100 -Subject: [PATCH] OvmfPkg: silence EFI_D_VERBOSE (0x00400000) in NvmExpressDxe - -NvmExpressDxe logs all BlockIo read & write calls on the EFI_D_VERBOSE -level. - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/OvmfPkgIa32.dsc | 5 ++++- - OvmfPkg/OvmfPkgIa32X64.dsc | 5 ++++- - OvmfPkg/OvmfPkgX64.dsc | 5 ++++- - 3 files changed, 12 insertions(+), 3 deletions(-) - -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 133a9a93c0..3ddc0c5edb 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -809,7 +809,10 @@ - OvmfPkg/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 338c38db29..aba4a6cc24 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -823,7 +823,10 @@ - OvmfPkg/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index b80710fbdc..99c0ba4465 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -819,7 +819,10 @@ - OvmfPkg/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf diff --git a/SPECS-EXTENDED/edk2/0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch b/SPECS-EXTENDED/edk2/0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch deleted file mode 100644 index 502a11a3dfe..00000000000 --- a/SPECS-EXTENDED/edk2/0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch +++ /dev/null @@ -1,57 +0,0 @@ -From f8f04bc629c0874a4e7a361a55053005f9196152 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 27 Jan 2016 03:05:18 +0100 -Subject: [PATCH] OvmfPkg: silence EFI_D_VERBOSE (0x00400000) in the DXE core - -The DXE core logs a bunch of Properties Table and Memory Attributes Table -related information, on the EFI_D_VERBOSE level, that I am at the moment -not interested in. Suppress said output. - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/OvmfPkgIa32.dsc | 2 ++ - OvmfPkg/OvmfPkgIa32X64.dsc | 2 ++ - OvmfPkg/OvmfPkgX64.dsc | 2 ++ - 3 files changed, 6 insertions(+) - -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 3ddc0c5edb..146e429126 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -704,6 +704,8 @@ - - NULL|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf - DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F - } - - MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index aba4a6cc24..cdf5abba99 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -718,6 +718,8 @@ - - NULL|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf - DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F - } - - MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 99c0ba4465..7d59d768fa 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -714,6 +714,8 @@ - - NULL|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf - DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F - } - - MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf diff --git a/SPECS-EXTENDED/edk2/0003-OvmfPkg-enable-DEBUG_VERBOSE.patch b/SPECS-EXTENDED/edk2/0003-OvmfPkg-enable-DEBUG_VERBOSE.patch deleted file mode 100644 index def6e7a7f53..00000000000 --- a/SPECS-EXTENDED/edk2/0003-OvmfPkg-enable-DEBUG_VERBOSE.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 5b0813e1885c0234deafcb828f1747c766287c51 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Sun, 8 Jul 2012 14:26:07 +0200 -Subject: [PATCH] OvmfPkg: enable DEBUG_VERBOSE - -Enable verbose debug logs. - -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/OvmfPkgIa32.dsc | 2 +- - OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- - OvmfPkg/OvmfPkgX64.dsc | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 146e429126..fce6051e47 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -514,7 +514,7 @@ - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index cdf5abba99..983eebfaa7 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -518,7 +518,7 @@ - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 7d59d768fa..ea62b82ff7 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -518,7 +518,7 @@ - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 diff --git a/SPECS-EXTENDED/edk2/0004-OvmfPkg-increase-max-debug-message-length-to-512.patch b/SPECS-EXTENDED/edk2/0004-OvmfPkg-increase-max-debug-message-length-to-512.patch deleted file mode 100644 index 8685bbe3d4d..00000000000 --- a/SPECS-EXTENDED/edk2/0004-OvmfPkg-increase-max-debug-message-length-to-512.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 04d5e4e3e7c8444dbb52784a2d71cf284c9e05a0 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 20 Feb 2014 22:54:45 +0100 -Subject: [PATCH] OvmfPkg: increase max debug message length to 512 - -Upstream prefers short debug messages (sometimes even limited to 80 -characters), but any line length under 512 characters is just unsuitable -for effective debugging. (For example, config strings in HII routing, -logged by the platform driver "OvmfPkg/PlatformDxe" on DEBUG_VERBOSE -level, can be several hundred characters long.) 512 is an empirically good -value. - -Signed-off-by: Laszlo Ersek ---- - OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c -index dffb20822d..0577c43c3d 100644 ---- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c -+++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c -@@ -21,7 +21,7 @@ - // - // Define the maximum debug and assert message length that this library supports - // --#define MAX_DEBUG_MESSAGE_LENGTH 0x100 -+#define MAX_DEBUG_MESSAGE_LENGTH 0x200 - - // - // VA_LIST can not initialize to NULL for all compiler, so we use this to diff --git a/SPECS-EXTENDED/edk2/0005-advertise-OpenSSL-on-TianoCore-splash-screen-boot-lo.patch b/SPECS-EXTENDED/edk2/0005-advertise-OpenSSL-on-TianoCore-splash-screen-boot-lo.patch deleted file mode 100644 index a922618c8c8..00000000000 --- a/SPECS-EXTENDED/edk2/0005-advertise-OpenSSL-on-TianoCore-splash-screen-boot-lo.patch +++ /dev/null @@ -1,3123 +0,0 @@ -From 0dfff83988439363624c5cbf5cf182e755307bf8 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 11 Jun 2014 23:33:33 +0200 -Subject: [PATCH] advertise OpenSSL on TianoCore splash screen / boot logo - -Because we may include the OpenSSL library in our OVMF and AAVMF builds -now, we should advertise it as required by its license. This patch takes -the original TianoCore logo, shifts it up by 20 pixels, and adds the -horizontally centered message - - This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/) - -below. - -Logo-OpenSSL.bmp: PC bitmap, Windows 3.x format, 469 x 111 x 24 -Logo.bmp: PC bitmap, Windows 3.x format, 193 x 58 x 8 - -Downstream only because upstream edk2 does not intend to release a -secure-boot-enabled OVMF build. (However the advertising requirement in -the OpenSSL license, -"CryptoPkg/Library/OpensslLib/openssl-1.0.2*/LICENSE", has been discussed -nonetheless, which is why I'm changing the logo.) - -Notes about the 9ece15a -> c9e5618 rebase: -- Logo.bmp is no longer modified in-place; instead a modified copy is - created. That's because AAVMF includes the logo too, but it doesn't - include OpenSSL / Secure Boot, so we need the original copy too. - -Notes about the c9e5618 -> b9ffeab rebase: -- AAVMF gained Secure Boot support, therefore the logo is again modified - in the common location, and no FDF changes are necessary. - -Notes about the d7c0dfa -> 90bb4c5 rebase: - -- squash in the following downstream-only commits (made originally for - ): - - - eef9eb0 restore TianoCore splash logo without OpenSSL advertisment - (RHEL only) - - - 25842f0 OvmfPkg, ArmVirtPkg: show OpenSSL-less logo without Secure - Boot (RH only) - - The reason is that ideas keep changing when and where to include the - Secure Boot feature, so the logo must be controllable directly on the - build command line, from the RPM spec file. See the following - references: - - - https://post-office.corp.redhat.com/mailman/private/virt-devel/2016-March/msg00253.html - - https://post-office.corp.redhat.com/mailman/private/virt-devel/2016-April/msg00118.html - - https://bugzilla.redhat.com/show_bug.cgi?id=1323363 - -- This squashed variant should remain the final version of this patch. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- For more fun, upstream completely changed the way logo bitmaps are - embedded in the firmware binary (see for example commit ab970515d2c6, - "OvmfPkg: Use the new LogoDxe driver", 2016-09-26). Therefore in this - rebase, we reimplement the previous downstream-only commit e775fb20c999, - as described below. - -- Beyond the new bitmap file (which we preserve intact from the last - downstream branch), we introduce: - - - a new IDF (image description file) referencing the new BMP, - - - a new driver INF file, referencing the new BMP and new IDF (same C - source code though), - - - a new UNI (~description) file for the new driver INF file. - -- In the OVMF DSC and FDF files, we select the new driver INF for - inclusion if either SECURE_BOOT_ENABLE, NETWORK_IP6_ENABLE, or - TLS_ENABLE is set, as they all make use of OpenSSL (although - different subsets of it). - -- In the AAVMF DSC and FDF files, we only look at SECURE_BOOT_ENABLE, - or NETWORK_IP6_ENABLE, because the ArmVirtQemu platform does not - support TLS_ENABLE yet. - -- This patch is best displayed with "git show --find-copies-harder". - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- After picking previous downstream-only commit 32192c62e289, carry new - upstream commit e01e9ae28250 ("MdeModulePkg/LogoDxe: Add missing - dependency gEfiHiiImageExProtocolGuid", 2017-03-16) over to - "LogoOpenSSLDxe.inf". - -Signed-off-by: Laszlo Ersek -(cherry picked from commit 32192c62e289f261f5ce74acee48e5a94561f10b) -Signed-off-by: Paolo Bonzini ---- - ArmVirtPkg/ArmVirtQemu.dsc | 4 + - ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc | 4 + - ArmVirtPkg/ArmVirtQemuKernel.dsc | 4 + - MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 | 2743 ++++++++++++++++++++++++ - MdeModulePkg/Logo/Logo-OpenSSL.idf | 15 + - MdeModulePkg/Logo/LogoOpenSSLDxe.inf | 61 + - MdeModulePkg/Logo/LogoOpenSSLDxe.uni | 22 + - OvmfPkg/OvmfPkgIa32.dsc | 4 + - OvmfPkg/OvmfPkgIa32.fdf | 4 + - OvmfPkg/OvmfPkgIa32X64.dsc | 4 + - OvmfPkg/OvmfPkgIa32X64.fdf | 4 + - OvmfPkg/OvmfPkgX64.dsc | 4 + - OvmfPkg/OvmfPkgX64.fdf | 4 + - 13 files changed, 2877 insertions(+) - create mode 100644 MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 - create mode 100644 MdeModulePkg/Logo/Logo-OpenSSL.idf - create mode 100644 MdeModulePkg/Logo/LogoOpenSSLDxe.inf - create mode 100644 MdeModulePkg/Logo/LogoOpenSSLDxe.uni - -diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc -index 3f649c91d8..2405636af6 100644 ---- a/ArmVirtPkg/ArmVirtQemu.dsc -+++ b/ArmVirtPkg/ArmVirtQemu.dsc -@@ -424,7 +424,11 @@ - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf - MdeModulePkg/Universal/BdsDxe/BdsDxe.inf -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) -+ MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - MdeModulePkg/Logo/LogoDxe.inf -+!endif - MdeModulePkg/Application/UiApp/UiApp.inf { - - NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf -diff --git a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc -index a2f4bd62c8..89b04cd7a4 100644 ---- a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc -+++ b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc -@@ -193,7 +193,11 @@ READ_LOCK_STATUS = TRUE - # - # TianoCore logo (splash screen) - # -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) -+ INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - INF MdeModulePkg/Logo/LogoDxe.inf -+!endif - - # - # Ramdisk support -diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc -index 9449a01d6e..9fb79d30a1 100644 ---- a/ArmVirtPkg/ArmVirtQemuKernel.dsc -+++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc -@@ -361,7 +361,11 @@ - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf - MdeModulePkg/Universal/BdsDxe/BdsDxe.inf -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) -+ MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - MdeModulePkg/Logo/LogoDxe.inf -+!endif - MdeModulePkg/Application/UiApp/UiApp.inf { - - NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf -diff --git a/MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 b/MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 -new file mode 100644 -index 0000000000..567ca32f05 ---- /dev/null -+++ b/MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 -@@ -0,0 +1,2743 @@ -+Qk22YgIAAAAAADYAAAAoAAAA1QEAAG8AAAABABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWlpav7+/CQkJAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUoKCg6enp7+/vrKys -+PT09AAAAAAAAAAAAAAAAAAAAAAAACQkJwMDAWlpaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAERERN3d3RUVFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy8vHp6ehAQEAYGBi8vL8HBwWpqagAAAAAAAAAAAAAA -+AAAAAAAAABYWFt/f30NDQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgLU1NRU -+VFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAxMTEEBAQAAAAAAAAAAAAoKCjd3d0AAAAAAAAAAAAAAAAAAAAAAAAAAABXV1fS0tIB -+AQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAA////AAAAAAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAAAAAAAAAA////AAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAALy8vzs7O9/f309PTPj4+6urqAgICAAAAMzMzxcXF9fX18PDws7OzHx8f -+AAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAA -+AAAA////AAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAARkZG5eXl6urqAAAAAAAA -+////AAAAAAAAAAAAAAAA////AAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAgICaGhozMzM9fX19fX1ycnJYmJiAQEBAAAAAAAAAAAA////PDw8zMzM+Pj4 -+5OTkYGBgAAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAA////AAAAAAAAAAAAAAAA -+////AAAAAAAAAAAARUVFtLS05eXl+vr68fHxxMTEU1NTAAAAAAAAAAAAAAAARUVFtLS05eXl+vr6 -+8fHxxMTEU1NTAAAAAAAAAAAA////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAA////AAAAAAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAAAAAAAAAAAAAAaGho3t7e -++vr629vbZWVlAAAAAAAAAAAAAAAA////AAAAAAAA////AAAAAAAAAAAAAAAAYWFhw8PDCAgI//// -+AAAAAAAAAAAARkZG5eXl6urqAAAAAAAAAAAAAAAAAAAAT09Pzc3NAAAAAAAAAAAAAAAA////AAAA -+AAAAAAAAAAAA////AAAAAAAARkZG5eXl6urqAAAAAAAARkZG5eXl6urqAAAA////PDw8zMzM+Pj4 -+5OTkYGBgAAAAAAAAAAAAAAAA////AAAAAAAA3NzcFRUVAAAAAAAA3NzcFRUVAAAAAAAAAAAAAAAA -+AAAAKysr////Ly8vAAAALy8v////KysrAAAAAAAAAAAAAAAAKysr////Ly8vAAAALy8v////Kysr -+AAAAAAAAAAAAAAAAAAAAKysr////Ly8vAAAALy8v////KysrAAAAAAAAAAAA////AAAAAAAAAAAA -+aGho3t7e+vr629vbZWVlAAAAAAAAAAAAAAAA////PDw8zMzM+Pj45OTkYGBgAAAAAAAAAAAAAAAA -+V1dX09PT+vr67+/vq6urICAgAAAAAAAA////AAAAAAAAAAAAAAAA////AAAAAAAAMzMzxcXF9fX1 -+8PDws7OzHx8fAAAAAAAAMzMzxcXF9fX18PDws7OzHx8fAAAAAAAAAAAA////AAAAAAAAAAAA//// -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 -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBqampw8PDQEBACwsLCgoKQUFBxcXFpqamAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcxMTEQUFBDw8PBAQEGBgYVlZW39/fb29vAAAA -+AAAAXFxcxMTEQUFBDw8PBAQEGBgYVlZW39/fb29vAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAA////AAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEB0tLS -+VVVVAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eAAAAAAAAAAAAAAAA3t7eAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAenp6XV1d -+AAAAAAAAenp6XV1dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAenp6XV1dAAAAWFhY0NDQ -+AQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAPLy8j4+PgcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq6ugAAAAAAAAAAAAAA -+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAICAmlpacvLy/X19fX19cvLy2hoaAICAgAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAE1NTcfHx+rq6vv7+/Hx8cjIyGZmZgAAAAAAAAAAAAAAAE1NTcfHx+rq6vv7 -++/Hx8cjIyGZmZgAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// -+/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAALq6ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCQt7e3hYWFgAAAAAAAP///wAA -+AAAAAAAAAAAAAAAAAAAAAAAAALq6ugAAAAAAAAAAAAAAALq6ugAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2Np6engAAAAAAADY2Np6engAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2Np6enhcXF+Dg4EFBQQAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSnU1NT39/cAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAD///8AAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWVnAwMAJCQkAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAACAgLOzs4AAAAAAAACAgLOzs4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAACAgLX19fCwsJZWVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+fn55eXlbW1tAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -++Pj4a2trAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBUdHR/Pz81NTUwAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUlJe7u7gAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAB5eXnLy8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA -+AAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAA////AAAAAAAA////AAAAAAAAAAAAMzMzxcXF -+9fX18PDws7OzHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAA////PDw8zMzM+Pj45OTkYGBgAAAAAAAA -+AAAA////AAAAAAAAAAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAAAAAAAAAAAAAAU1NTx8fH9/f3 -+zs7OPj4+9vb2AgICAAAALy8vzs7O9/f309PTPj4+6urqAgICAAAAAAAAX19f5ubm9PT0vLy8Jycn -+AAAAAAAAAAAARkZG5eXl6urqAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAA////AAAAAAAA -+AAAAAAAA////AAAAAAAAAAAAX19f5ubm9PT0vLy8JycnAAAAAAAA////AAAAAAAALy8vzs7O9/f3 -+09PTPj4+6urqAgICAAAAAAAAAAAAU1NTx8fH9/f3zs7OPj4+9vb2AgICAAAAAAAAV1dX09PT+vr6 -+7+/vq6urICAgAAAAAAAAMzMzxcXF9fX18PDws7OzHx8fAAAAAAAAAAAAAAAAAAAAAAAAMzMzxcXF -+9fX18PDws7OzHx8fAAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAAAAAAAAAA////AAAAAAAAAAAA -+AAAARkZG5eXl6urqAAAAAAAAKysr////Ly8vAAAALy8v////KysrAAAAAAAAAAAAMTExxsbG9fX1 -+6+vroaGhFBQUenp69fX1AAAAAAAA////AAAAAAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAg -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAU1NTx8fH9/f3zs7OPj4+9vb2AgICAAAAAAAAV1dX09PT+vr6 -+7+/vq6urICAgAAAAAAAAAAAAfn5+////REREAAAAAAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6ur -+ICAgAAAAAAAA////AAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAAAAAAAAAA////PDw8zMzM+Pj4 -+5OTkYGBgAAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAAAAAAU1NTx8fH9/f3zs7O -+Pj4+9vb2AgICAAAAAAAAAAAAAAAABQUF8/PzPDw8zs7O+Pj44+PjZ2dnAAAAAAAAAAAAAAAAAAAA -+Pz8//v7+ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZG5eXl6urqAAAA////AAAAAAAAAAAA -+AAAA////AAAAAAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AgICaGhozMzM9fX19fX1ycnJYmJiAQEBAAAAAAAAAAAAAAAA////PDw8zMzM+Pj45OTkYGBgAAAA -+AAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAA////AAAAAAAAAAAAAAAA////AAAAAAAA -+AAAARUVFtLS05eXl+vr68fHxxMTEU1NTAAAAAAAAAAAAAAAARUVFtLS05eXl+vr68fHxxMTEU1NT -+AAAAAAAAAAAA////////////////////////////AAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAaGho3t7e+vr629vbZWVlAAAA -+AAAAAAAAAAAA////AAAAAAAAAAAAV1dX09PT+vr67+/vq6urICAgAAAAAAAAAAAAX19f5ubm9PT0 -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 -+AAAAAPr6+gQEBAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAP///wAAAAAAAAAAAAAAAP///wAA -+AAAAAAAAAPr6+gICAgAAAAAAAAAAAAMDA////wAAAAAAAPz8/P////////////////////j4+AAA -+AAAAAAoKCn5+ftra2v7+/re3tyMjIwAAAAAAAAAAAAAAAAAAAAAAAAoKCn5+ftra2v7+/re3tyMj -+IwAAAAAAAPz8/AICAgAAAAAAAAAAAAMDA/z8/AAAAAAAAP///wAAAAAAAAAAAAAAAP///wAAAAAA -+AAAAACYmJu/v7wkJCfX19RYWFvT09AgICOvr6yUlJQAAAAAAAAcHB4GBgdDQ0O3t7fr6+v7+/v// -+/wAAAAAAAAAAAP///wAAAAAAAAAAAAAAAPz8/P////////////////////j4+AAAAAAAAAAAAAAA -+AAAAAAAAAPr6+gICAgAAAAAAAAAAAAMDA////wAAAAAAAPz8/P////////////////////j4+AAA -+AAAAAMrKylVVVQAAAFFRUaurqwAAAAAAAAAAAPz8/P////////////////////j4+AAAAAAAAP// -+/wAAAAAAAPz8/AICAgAAAAAAAAAAAAMDA/z8/AAAAAAAAP///wMDAwAAAAAAAAAAAAUFBfn5+QAA -+AAAAAPz8/P////////////////////j4+AAAAAAAAPr6+gICAgAAAAAAAAAAAAMDA////wAAAAAA -+AAAAAAAAAAAAAAAAAP///wICAgAAAAAAAAAAAAICAvr6+gAAAAAAAAAAAJSUlGhoaAAAADo6OouL -+iwAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAP///wAAAAAAAAAAAAAAAP///wAAAAAA -+AAAAAPz8/P////////////////////j4+AAAAAAAAAAAAAAAAAAAAAAAAOvr6xcXFwAAAAAAAAAA -+AAAAAAAAAAAAACIiIunp6QAAAAAAAAAAAP///wMDAwAAAAAAAAAAAAUFBfn5+QAAAAAAAPz8/P// -+//////////////////j4+AAAAAAAAP///wAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAA -+AAAAABMTE1hYWNXV1V5eXgAAAAAAAAAAAAAAAAAAAAAAAAAAABMTE1hYWNXV1V5eXgAAAAAAAP// -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 -+zs5ZWVkAAAAAAAAFBQXz8/M8PDzPz8/5+fnk5ORmZmYAAAAAAAAAAAAAAABfX1/R0dH29vba2tpf -+X18AAAAAAAAGBgbn5+c+Pj7R0dH29vbLy8suLi4AAAAAAADs7OwaGhoAAAAAAAAAAAAAAAAAAAAq -+KiqUlJQAAAAAAADs7OwaGhoAAAAAAAAAAAAAAAAAAAAqKiqUlJQAAAAAAAD///8AAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAMDAzw8PAAAAAHBwfo -+6Og7Ozvb29v5+fkAAAAAAABpaWnc3Nz6+vrb29tWVlYAAAAAAAAAAAAAAAD///8AAAAAAAAAAABf -+X1/R0dH29vba2tpfX18AAAAAAAAAAAAAAABgYGDk5OTz8/O4uLgkJCQAAAD4+Pj///////+QkJAA -+AAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//// -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAwMD////AAAAAAAAAAAAAAAA3t7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//// -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eAAAA -+AAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAQEBqampw8PDQEBACwsLCgoKQUFBxcXFpqamAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAXFxcxMTEQUFBDw8PBAQEGBgYVlZW39/fb29vAAAAAAAAXFxcxMTE -+QUFBDw8PBAQEGBgYVlZW39/fb29vAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAA////AAAAAAAAAAAAAAAACQkJICAghoaGjo6OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7eAAAAAAAAAP////////////////////// -+/////////////wAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAALq6ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8j4+PgcHBwAA -+AAAAALq6ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq6ugAAAAAAAAAAAP///wAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAICAmlpacvLy/X19fX19cvLy2hoaAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAE1NTcfHx+rq6vv7+/Hx8cjIyGZmZgAAAAAAAAAAAAAAAE1NTcfHx+rq6vv7+/Hx8cjIyGZm -+ZgAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////// -+//////b29s/Pz3NzcwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAALq6ugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ -+//8AAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSnU1NT39/cAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAA -+AAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAA//////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////////////////////////////////wAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+OcGdtRTltRTlvSD5tRTltRTlz -+TUBtRTlvSD5tRTltRTlzTUD///+pkoqOcGeUdm2Udm2Udm2Udm2Udm2Udm2Udm2Udm2Udm2Udm3/ -+///Qw761oZu1oZu1oZu9q6W1oZu1oZu1oZu1oZu1oZu1oZu1oZv9/f3n4d/az8zaz8zaz8zaz8za -+z8zaz8zaz8zaz8zaz8zaz8zaz8z9/f3z8O7n4d/n4d/r5uTn4d/r5uTr5uTv6+rr5uTr5uTn4d/n -+4d/9/Pz7+vr39fT39fT39fT59/f39fT39fT59/f39fT59/f59/f39fT9/f3///////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAA////////////b0g+PAcAQQ0APAcAPAcAQQ0APAcAPAcAPAcAQQ0APAcATBwN -+////lHZtZTsubUU5bUU5bUU5bUU5b0g+b0g+b0g+bUU5b0g+bUU5////vaulmn92oYd+oYd+mn92 -+oYd+oYd+oYd+mn92oYd+mn92mn92/fz82s/M0MO+0MO+0MO+0MO+xrey0MO+0MO+0MO+xreyxrey -+0MO+/fz87+vq4tvY4tvY4tvY4tvY4tvY4tvYxrey0MO+4tvY4tvY4tvY/Pv7+vn58/Du9fPy9fPy -+9fPy9fPy9fPy9fPy9fPy9fPy9fPy9fPy/f39//////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+2s/M5+Hf//////////////////////////////////////////////////////////////////// -+////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////// -+/////21FOUENAEQSAUQSAUQSAUQSAUQSAUQSAUQSAUENAEQSAUQSAf///5p/dm1FOXNNQHNNQHNN -+QHNNQHNNQHNNQHNNQHNNQHNNQHNNQP///72rpZp/dqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqmS -+ipp/dv38/OLb2NDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvv38/O/r6uLb2Ovm5OLb -+2OLb2Ovm5Ovm5IFfVaGHfu/r6ufh3+Lb2Pz7+/38/P39/ff19Pn39/f19Pf19Pf19PXz8vXz8vf1 -+9Pn39/Pw7v39/f////////////////////////////7+/v////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////////////4trYbWhm/////////////// -+//////////////////////////////////////////////////////////////7+/v////////// -+/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////9zTUA8BwBEEgFEEgFB -+DQBEEgFEEgFBDQBEEgFEEgFEEgFEEgH///+Udm1tRTlzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBz -+TUBzTUD///+9q6Waf3ahh36hh36hh36hh36hh36hh36hh36pkoqhh36hh379/Pzi29jQw77Qw77Q -+w77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw779/Pzv6+ri29ipkopvSD5tRTmaf3bn4d+La2FdMSN8 -+WU21oZvr5uS1oZuBX1Wpkorv6+qaf3bn4d+9q6W9q6X59/f6+fnaz8yhh3759/f9/f3////n4d+h -+h37r5uSLa2GOcGeUdm3r5uShh36pkoq1oZvaz8zn4d+GZVuOcGfr5uTQw761oZv///+pkori29jG -+t7LGt7Lr5uShh37//v7////39fShh37v6+r///////+9q6XQw769q6XGt7L///+hh37z8O6pkorn -+4d/Qw761oZv18/KUdm3i29ipkorQw77///+hh36GZVuUdm3Gt7Kpkorr5uT///+1oZt8WU21oZv9 -+/Pz///////+9q6V8WU2BX1WUdm3v6+r///+9q6V8WU2pkor////39fSGZVvn4d/////Gt7J8WU2a -+f3b39fSpkoraz8zi29iBX1WUdm339fSOcGdtRTmGZVvaz8zQw761oZv18/Khh3759/epkori29jQ -+w76BX1Waf3b39fS9q6XQw77n4d+hh3739fSOcGe9q6X///////////////8AAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAA////////////bUU5PAcARBIBRBIBRBIBRBIBRBIBRBIBRBIBRBIB -+RBIBRBIB////mn92bUU5c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01A////vauloYd+oYd+ -+qZKKoYd+oYd+oYd+oYd+oYd+oYd+oYd+mn92/fz84tvYxrey0MO+0MO+0MO+0MO+0MO+0MO+0MO+ -+0MO+0MO+0MO+/fz88/DuvaulTBwNtaGbxreyVScYqZKKjnBnXTEjoYd+XTEjtaGbXTEjvaulZTsu -+xreyZTsu4tvYmn92lHZt/Pv7/v79vaulb0g+////////////2s/MbUU5i2thfFlNqZKKPAcA4tvY -+VScY5+Hfb0g+xreyfFlNlHZthmVbjnBntaGbgV9V////b0g+0MO+oYd+lHZt2s/Mb0g+/v79//// -+7+vqXTEj5+Hf////////jnBnqZKKjnBnqZKK////VScY6+bkb0g+0MO+qZKKi2th0MO+PAcAqZKK -+VScYgV9V2s/MTBwNvaulTBwNqZKKbUU52s/M2s/MVScYxreyZTsu2s/M////////i2thi2th4tvY -+i2thd1JG2s/MVScYxreybUU50MO+2s/MPAcAqZKK9fPyVScYvauld1JGvaulgV9VtaGbc01AoYd+ -+fFlNlHZtmn92ZTsuqZKKbUU5oYd+hmVb6+bkZTsu9/X0ZTsuxreyXTEjtaGbfFlNtaGbhmVbtaGb -+2s/MZTsu2s/MVScY7+vq////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AP///////////29IPjwHAEQSAUENAEENAEQSAUQSAUQSAUQSAUQSAUQSAUQSAf///5p/dm1FOXNN -+QHNNQHNNQHNNQHNNQHNNQHNNQHNNQHNNQHNNQP///8a3spp/dqGHfqGHfqGHfqGHfqGHfqGHfqGH -+fqGHfqGHfpp/dv38/NrPzNDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvv38/PPw7nxZ -+TZp/du/r6u/r6qmSim1FOYZlW6GHfvf19G1FOXdSRl0xI4trYW9IPsa3smU7LuLb2KGHfpR2bfv6 -++v39/ca3sl0xI7Whm7Whm/Xz8trPzG1FOdDDvmU7LnxZTUwcDeLb2F0xI////3dSRrWhm21FOevm -+5Ofh32U7LqmSiotrYf///3dSRtrPzKmSiqGHftrPzG1FOf7+/v////Pw7mU7LtDDvuvm5P///5R2 -+bamSipR2bamSiv///10xI+/r6ndSRtDDvrWhm45wZ6GHfl0xI2U7Ll0xI2U7LtrPzHdSRnxZTVUn -+GLWhm3NNQOLb2KmSilUnGItrYXdSRtrPzP///////45wZ6mSiv////Xz8m9IPqGHfkwcDYZlW3dS -+RtDDvpR2bW1FOXxZTdDDvkwcDYZlW3xZTb2rpYFfVbWhm2U7LvPw7tDDvnNNQItrYbWhm////21F -+OYZlW45wZ+/r6mU7Lvn393dSRqmSil0xI4FfVXxZTbWhm45wZ7Whm9rPzG9IPtDDvm1FOf////// -+/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////9tRTk8BwBE -+EgFEEgFEEgFEEgFEEgFEEgFEEgFEEgFEEgFMHA3///+af3ZtRTlzTUBzTUBzTUBzTUBzTUBzTUBz -+TUBzTUBzTUBzTUD////Gt7Kaf3ahh36hh36hh36pkoqhh36hh36hh36hh36hh36hh379/Pzi29jQ -+w77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw779/Pzz8O5zTUCpkorr5uTn4d+9q6VlOy6G -+ZVtvSD7Qw75dMSOhh35dMSPQw75dMSO1oZtVJxjGt7KGZVuaf3b8+/v9/f29q6VdMSOpkop8WU2B -+X1Xaz8xvSD7Qw76OcGe9q6VMHA3az8xVJxjr5uRvSD61oZtlOy7Gt7Kpkop8WU21oZttRTnn4d9t -+RTm1oZuUdm18WU3Gt7JvSD7////////z8O5dMSNtRTlvSD7Gt7KUdm2pkoqOcGeGZVvr5uRMHA3Q -+w75tRTm1oZuhh36BX1VdMSPGt7JBDQCOcGeGZVupkoqOcGfGt7JtRTmpkoptRTm9q6W1oZtlOy7G -+t7JdMSPGt7L///////+OcGehh37///////93Ukahh35VJxjQw75lOy6pkoptRTnQw75lOy61oZtd -+MSPGt7JvSD6pkoqGZVu1oZtlOy7Qw76hh36BX1WOcGd8WU3i29hlOy6af3ZtRTnaz8xVJxjaz8xl -+Oy69q6VdMSO9q6V8WU2hh36La2GUdm3Gt7JlOy7Gt7JlOy77+vr///////////////8AAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////bUU5QQ0AQQ0ARBIBQQ0ARBIBRBIBQQ0A -+RBIBRBIBRBIBRBIB////mn92bUU5c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01A////vaul -+oYd+oYd+oYd+oYd+oYd+qZKKoYd+oYd+oYd+oYd+oYd+/fz84tvY0MO+0MO+0MO+0MO+0MO+0MO+ -+0MO+0MO+0MO+0MO+0MO+/fz88/Dumn92c01A6+bk7+vqi2thd1JGqZKKZTsuXTEjlHZt4tvYlHZt -+ZTsuhmVb8/DuhmVbb0g+ZTsu0MO++vn5/f39vaulc01A////5+HfVScYxreybUU56+bkc01AbUU5 -+lHZtvaulQQ0AlHZtVScYfFlNtaGbbUU5ZTsu0MO+2s/MXTEjc01AjnBnb0g+ZTsui2thXTEjqZKK -+////////8/DuZTsu5+Hf////////taGbxreytaGbXTEji2thd1JGc01Ac01AfFlNbUU5vaullHZt -+7+vqjnBn0MO+xreyqZKKmn92bUU5d1JG5+HflHZtVScYtaGbhmVbbUU5jnBn+/r6////////i2th -+qZKK////4tvYVScY6+bklHZtZTsujnBn2s/Mi2th////oYd+xreyoYd+ZTsufFlN7+vqgV9Vvaul -+0MO+ZTsubUU54tvYtaGbbUU5ZTsuqZKK2s/Mc01AZTsugV9Vc01AfFlN9/X0qZKKZTsud1JG8/Du -+taGbb0g+ZTsuqZKKoYd+PAcA0MO+////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAP///////////29IPjwHAEQSAUENAEQSAUQSAUQSAUQSAUQSAUQSAUQSAUQSAf///5p/ -+dm1FOXNNQHNNQHNNQHNNQHNNQHNNQHNNQHNNQHNNQHNNQP///72rpZp/dqGHfqGHfqGHfqmSiqGH -+fqmSiqGHfqGHfqGHfpp/dv38/OLb2NDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvv38 -+/PPw7trPzGU7LndSRoFfVVUnGMa3sufh3+Lb2NrPzOfh3+Lb2Pv6+u/r6vXz8vn39/Xz8u/r6vPw -+7vn39/Xz8v39/b2rpV0xI45wZ3dSRotrYdrPzGU7Lv38/P38/PXz8v///+/r6m9IPv///4FfVWU7 -+Luvm5Pv6+vn39/////////z7+/f19P////r5+fn39/38/Pf19P////////////Pw7l0xI4ZlW5R2 -+baGHfr2rpca3sv////r5+fn39/////f19Pr5+fr5+fn39/////7+/v////////////////7+/v// -+//Xz8vz7+/////////f19Pz7+/39/fXz8v38/P///////////5R2bWU7LpR2bV0xI6GHfv////// -+//Xz8v7+/f7+/v7+/v/////+/v7+/v/+//Xz8vv6+v///3xZTb2rpf////f19Pn39/////////z7 -++/Xz8v/+//////39/ff19P////f19Pr5+f/////+//Xz8vv6+v////////38/Pf19P///9rPzHdS -+Rv///////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////9t -+RTlBDQBBDQBEEgFEEgFEEgFEEgFEEgFBDQBEEgFEEgFMHA3///+af3ZtRTlzTUBzTUBzTUBzTUBz -+TUBzTUBzTUBzTUBzTUBzTUD///+9q6Whh36hh36hh36hh36hh36hh36hh36hh36hh36pkoqhh379 -+/Pzi29jQw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw779/Pzv6+ri29jaz8ypkoqpkorQ -+w77n4d/i29ji29jn4d/i29ji29j8+/v7+vr18/L18/L39fT39fT18/L18/L18/L59/fn4d/Gt7K9 -+q6XQw7739fT39fTaz8z+/v7////////////////v6+r////v6+rGt7Lz8O7///////////////// -+///////////////////////////////////////9/PzQw77Gt7LGt7LQw77az8zi29j///////// -+//////////////////////////////////////////////////////////////////////////// -+///////////////////////////n4d/Qw77Gt7Laz8z9/Pz///////////////////////////// -+///////////////////////i29jr5uT///////////////////////////////////////////// -+///////////////////////////////////////////////////r5uT///////////////////8A -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////b0g+PAcARBIBQQ0ARBIBRBIB -+RBIBRBIBQQ0ARBIBQQ0ATBwN////mn92bUU5c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01A -+////vaulmn92oYd+qZKKoYd+oYd+oYd+oYd+oYd+oYd+oYd+oYd+/fz84tvY0MO+0MO+0MO+0MO+ -+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/fz87+vq4tvY5+Hf6+bk6+bk5+Hf4tvY4tvY4tvY4tvY4tvY -+4tvY/Pv7+vn59fPy9fPy9fPy9fPy9fPy9fPy9fPy9fPy+ff3/Pv7/fz8/v7+//////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAP///////////3NNQEENAEQSAUwcDUQSAUQSAUQSAUQSAUwcDUQSAUwcDUwc -+Df///5p/dm1FOXdSRndSRndSRndSRndSRndSRndSRndSRnNNQHdSRv///72rpaGHfqmSiqGHfqGH -+fqmSiqmSiqGHfqmSiqGHfqmSiqGHfv38/OLb2NDDvtrPzNDDvtDDvtDDvtDDvtDDvtDDvtDDvtDD -+vtDDvv38/O/r6uLb2Ofh3+Lb2OLb2OLb2Ofh3+Lb2OLb2OLb2OLb2OLb2Pz7+/r5+fXz8vXz8vXz -+8vXz8vXz8vXz8vXz8vXz8vXz8vXz8vXz8v39/f////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////v7//v7//v7//v7//v7//v7//v7//v7//v7//v7//v7//v7///////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////taGblHZtmn92mn92 -+mn92lHZtmn92mn92lHZtmn92mn92mn92////0MO+taGbtaGbvaultaGbvaulvaulvaulvaulvaul -+taGbvaul////5+Hf2s/M2s/M2s/M2s/M2s/M2s/M2s/M4tvY2s/M4tvY2s/M/fz8//////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAP///////////45wZ2U7Lm1FOW1FOW1FOW1FOW1FOW1FOW1FOW1F -+OW1FOXNNQP///7Whm5p/dqGHfqGHfpp/dqGHfqGHfpp/dqGHfpp/dqGHfqGHfv///9rPzNDDvtDD -+vtDDvtDDvtDDvtDDvtDDvsa3stDDvtDDvtDDvvz7+/////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAD///////////+OcGdzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUD///+9q6Waf3ah -+h36hh36hh36hh36hh36pkoqhh36pkoqhh36hh37////i29jQw77Qw77Qw77Qw77Qw77Qw77Qw77Q -+w77Qw77Qw77Qw778+/v////////////////9/Pz39fT39fT39fT7+vr///////////////////// -+///////////6+fn39fT39fT39fT9/f3////////////////////6+fnv6+rz8O7v6+rv6+r59/f/ -+///////////6+fn39fT59/fz8O79/Pz////+/v759/f39fT39fT59/f///////////////////// -+///7+vr39fT39fT39fT+/v7////////////////////////////7+vrv6+rz8O7v6+rz8O739fT/ -+///////////////////////////////////////////////////////////4+v/r8v/r8v/r8v/r -+8v/r8v/1+f/////////////////////////////////////////////////////+/v/y9v/r8v/r -+8v/r8v/y9v/8/f/////////////////////////////8/f/y9v/1+f/1+f/8/f////////////// -+///////////////////////////////1+f/r8v/r8v/r8v/r8v/1+f////////////////////// -+//////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////lHZtbUU5 -+c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ad1JG////vauloYd+oYd+oYd+oYd+oYd+oYd+oYd+ -+oYd+oYd+oYd+oYd+////4tvY0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/Pv7//// -+////////////2s/MVScYVScYVScYoYd+////////////////////////////////qZKKTBwNVScY -+XTEj5+Hf////////////+ff3oYd+ZTsuTBwNPAcAPAcAQQ0AXTEji2th0MO+/fz8d1JGVScYVScY -+bUU58/Du////9fPyd1JGTBwNVScYi2th////////////////////////qZKKVScYXTEjVScY6+bk -+////////////////////6+bkoYd+ZTsuTBwNPAcAPAcAPAcAVScYjnBnxrey//////////////// -+/////////////////////////P3/wtj/Toz/LHb/AFX/AFX/AFX/AFX/AFX/E2X/ZJr/q8n/+vz/ -+////////////////////////////////9fn/q8n/Toz/E2X/AFX/AFX/AFX/E2X/PoL/lLr/6/L/ -+////////////////////wtj/E2X/LHb/AFX/0+L///////////////////////////////////// -+q8n/ZJr/LHb/E2X/AFX/AFX/AFX/LHb/Toz/wtj/////////////////////////////AAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////45wZ29IPnNNQHNNQHNNQHNNQHNNQHNN -+QHNNQHNNQHNNQHNNQP///72rpZp/dqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfv///+Lb -+2NDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvvz7+////////////////9DDvjwHAEEN -+ADwHAJp/dv///////////////////////////////5p/djwHADwHAEQSAeLb2P////////Xz8m1F -+OTwHAEENAEENADwHADwHADwHADwHADwHAEwcDWU7LkwcDTwHADwHAKmSiv////////Pw7l0xIzwH -+ADwHAHdSRv///////////////////////6mSijwHAEENADwHAO/r6v///////////////8a3skwc -+DTwHADwHADwHADwHADwHADwHAEENADwHAEENAIZlW/n39////////////////////////////8LY -+/z6C/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/xNl/wBV/wBV/z6C/9Pi//////////////////// -+/////+vy/z6C/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/yx2/8LY/////////////////6vJ -+/wBV/wBV/wBV/8LY//////////////////////////////X5/3am/wBV/wBV/wBV/wBV/wBV/wBV -+/wBV/wBV/wBV/wBV/3am/////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAD///////////+Udm1tRTlzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUB3Ukb///+9 -+q6Whh36hh36hh36hh36hh36hh36hh36hh36hh36hh36hh37////i29jGt7LQw77Qw77Qw77Qw77Q -+w77Qw77Qw77Qw77Qw77Gt7L8+/v////////////////az8xBDQBEEgE8BwCaf3b///////////// -+//////////////////+af3ZBDQBBDQBMHA3i29j///////+pkoo8BwBEEgFBDQBVJxiOcGepkoqh -+h36GZVtEEgE8BwBBDQBEEgFEEgFEEgHaz8z////////z8O5lOy48BwA8BwB8WU3///////////// -+//////////+pkoo8BwBEEgE8BwDr5uT////////////Qw75MHA1BDQBBDQA8BwBlOy6OcGeaf3Z3 -+UkZEEgE8BwBEEgE8BwB8WU38+/v///////////////////+ryf8TZf8AVf8TZf8AVf8AVf8TZf8+ -+gv8+gv8+gv8TZf8AVf8AVf8AVf8AVf8TZf/C2P/////////////////y9v8sdv8AVf8AVf8AVf8T -+Zf9OjP92pv9kmv8sdv8AVf8AVf8AVf8TZf/C2P////////////+ryf8AVf8TZf8AVf/C2P////// -+//////////////////////92pv8AVf8AVf8AVf8AVf8+gv92pv9kmv8+gv8AVf8AVf8AVf8AVf92 -+pv////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////// -+lHZtb0g+c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01A////vaulmn92oYd+oYd+oYd+oYd+ -+oYd+oYd+oYd+oYd+oYd+oYd+////2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+ -+/Pv7////////////////2s/MPAcARBIBPAcAmn92////////////////////////////////oYd+ -+PAcAQQ0ATBwN4tvY////+/r6b0g+PAcAQQ0ATBwNxrey////////////////4tvYc01APAcARBIB -+QQ0AVScY6+bk////////8/DuZTsuPAcAPAcAd1JG////////////////////////oYd+PAcARBIB -+PAcA7+vq/////////fz8XTEjPAcARBIBQQ0AoYd++ff3/////////v7+2s/MZTsuPAcARBIBPAcA -+taGb////////////////0+L/E2X/AFX/E2X/AFX/E2X/q8n/6/L/9fn/+Pr/+Pr/4uz/q8n/E2X/ -+AFX/E2X/AFX/E2X/4uz/////////////dqb/AFX/E2X/AFX/PoL/4uz/////////////8vb/dqb/ -+AFX/AFX/AFX/PoL//f7/////////lLr/AFX/AFX/AFX/wtj/////////////////////////q8n/ -+AFX/AFX/AFX/E2X/q8n/////////////////q8n/E2X/AFX/AFX/AFX/wtj///////////////// -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////5R2bW9IPnNNQHNNQHNNQHNN -+QHNNQHNNQHNNQHNNQHNNQHdSRv///7Whm6GHfqGHfqGHfqmSiqGHfqGHfqGHfqGHfqGHfqGHfqGH -+fv///9rPzNDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvvz7+////////////////9DD -+vkENAEQSATwHAJp/dv///////////////////////////////5p/dkENAEENAEwcDeLb2P////n3 -+921FOTwHAEENAF0xI/Xz8v///////////////////+/r6kwcDUQSAUENAFUnGO/r6v////////Pw -+7mU7LkENADwHAHxZTf///////////////////////6mSijwHAEQSATwHAO/r6v///////72rpTwH -+AEQSATwHAI5wZ////////////////////////9rPzEwcDUQSAUENAGU7Lv7+/v///////////z6C -+/wBV/wBV/wBV/06M//X5/////////////////////////////+Ls/yx2/wBV/wBV/wBV/06M//// -+//////r8/yx2/wBV/wBV/xNl/+vy/////////////////////////z6C/wBV/wBV/wBV/8LY//// -+/////6vJ/wBV/xNl/wBV/8LY/////////////////////////06M/wBV/wBV/wBV/5S6//////// -+/////////////////5S6/wBV/wBV/wBV/2Sa/////////////////wAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAD///////////+Udm1tRTlzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBzTUBz -+TUD///+9q6Waf3apkoqhh36hh36hh36hh36hh36hh36pkoqhh36pkor////i29jGt7LQw77Qw77Q -+w77Qw77Qw77Qw77Qw77Qw77Qw77Qw778+/v////////////////az8xBDQBBDQA8BwCaf3b///// -+//////////////////////////+hh348BwBBDQBMHA3i29j///////+BX1U8BwBEEgFBDQCGZVvi -+29jr5uT8+/v///////////+La2E8BwBBDQBVJxjv6+r////////z8O5lOy5BDQA8BwB8WU3///// -+//////////////////+hh348BwBBDQA8BwDr5uT///////+OcGc8BwBEEgFEEgHaz8z///////// -+//////////////////98WU1BDQBBDQBEEgHv6+r////////C2P8AVf8AVf8AVf8TZf/y9v////// -+///////////////////////////////T4v8TZf8AVf8TZf8TZf/T4v/////C2P8AVf8AVf8AVf+U -+uv/////////////////////////////C2P8AVf8TZf8AVf92pv////////+ryf8AVf8AVf8AVf/C -+2P/////////////////////y9v8sdv8AVf8AVf8+gv/////////////////////////////+/v+r -+yf/T4v/r8v/6/P/+/v////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//// -+////////lHZtbUU5c01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ac01Ad1JG////taGboYd+oYd+qZKK -+oYd+oYd+oYd+oYd+qZKKoYd+oYd+oYd+////2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+ -+0MO+0MO+/Pv7////////////////0MO+QQ0ARBIBPAcAmn92//////////////////////////// -+////mn92QQ0AQQ0ATBwN4tvY////////2s/MTBwNPAcARBIBQQ0APAcAXTEjc01AgV9Vmn92xrey -+hmVbPAcAQQ0ATBwN7+vq////////8/DuZTsuQQ0APAcAfFlN////////////////////////oYd+ -+PAcARBIBPAcA7+vq////////d1JGPAcAPAcAXTEj7+vq////////////////////////////qZKK -+PAcARBIBQQ0A2s/M////////Toz/AFX/AFX/AFX/lLr///////////////////////////////// -+////////////ZJr/AFX/AFX/AFX/lLr/////lLr/AFX/E2X/AFX/q8n///////////////////// -+////////4uz/E2X/AFX/AFX/ZJr/////////q8n/AFX/E2X/AFX/wtj///////////////////// -+0+L/E2X/AFX/AFX/E2X/dqb/ZJr/dqb/ZJr/dqb/ZJr/ZJr/ZJr/dqb/dqb/ZJr/q8n///////// -+////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////5R2bXNNQHNNQHNN -+QHNNQHNNQHNNQHNNQHNNQHNNQHNNQHdSRv///72rpZp/dqmSiqGHfqGHfqGHfqGHfqGHfqGHfqGH -+fqGHfqGHfv///9rPzMa3stDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvvz7+/////////// -+/////9DDvkENAEQSATwHAJp/dv///////////////////////////////6GHfjwHAEENAEwcDeLb -+2P///////////9rPzGU7LjwHADwHADwHADwHADwHADwHADwHAEENAEQSAUQSAUENAFUnGO/r6v// -+//////Pw7mU7LjwHADwHAHxZTf///////////////////////6mSijwHAEQSATwHAOvm5P////38 -+/HNNQDwHAEENAF0xI+/r6v///////////////////////////72rpTwHAEQSAUQSAdrPzP////r8 -+/yx2/wBV/wBV/wBV/+Ls/////////////////////////////////////////////8LY/2Sa/6vJ -+/+Ls//r8/////5S6/wBV/wBV/xNl/8LY/////////////////////////////+vy/xNl/wBV/wBV -+/2Sa/////////6vJ/wBV/wBV/wBV/8LY/////////////////////+Ls/wBV/wBV/wBV/wBV/wBV -+/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/z6C//7//////////////wAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+Udm1tRTlzTUBzTUBzTUBzTUBzTUBzTUBzTUBz -+TUBzTUB3Ukb///+9q6Whh36hh36hh36hh36hh36hh36hh36hh36hh36hh36hh37////i29jQw77Q -+w77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw778+/v////////////////Qw75BDQBEEgE8BwCa -+f3b///////////////////////////////+hh348BwBBDQBMHA3i29j////////////////59/fQ -+w76Udm13UkZdMSNMHA1BDQBBDQBBDQBBDQBEEgFBDQBVJxjv6+r////////z8O5lOy5BDQA8BwB3 -+Ukb///////////////////////+hh35BDQBBDQA8BwDv6+r///////93UkY8BwA8BwBdMSPv6+r/ -+//////////////////////////+pkoo8BwBBDQBBDQDaz8z////i7P8TZf8AVf8AVf8sdv/y9v// -+//////////////////////////////////////////////////////////////////+Uuv8AVf8A -+Vf8AVf+ryf/////////////////////////////i7P8AVf8AVf8AVf9kmv////////+ryf8AVf8A -+Vf8AVf/C2P/////////////////////i7P8TZf8AVf8AVf8AVf8AVf8AVf8AVf8TZf8AVf8AVf8A -+Vf8AVf8AVf8TZf8AVf9kmv////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAA//////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////v7+/f39/f39/f39/f39/f39/f39/f39 -+/f39/f39/f39/f39////////////////////2s/MQQ0AQQ0APAcAmn92//////////////////// -+////////////oYd+PAcAQQ0ATBwN4tvY////////8/Du4tvY2s/M2s/M+ff3/////fz8+vn57+vq -+0MO+taGbZTsuQQ0AQQ0ATBwN7+vq////////8/DuXTEjPAcAQQ0AZTsu+ff3//////////////// -+////qZKKPAcARBIBPAcA6+bk////////jnBnPAcARBIBQQ0A2s/M//////////////////////// -+////fFlNQQ0ARBIBRBIB7+vq////0+L/AFX/E2X/AFX/Toz///////////////////////////// -+////////////////////////////////////////////wtj/AFX/AFX/AFX/dqb///////////// -+////////////////q8n/AFX/AFX/AFX/dqb/////////q8n/AFX/AFX/AFX/lLr///////////// -+////////8vb/LHb/AFX/AFX/LHb/wtj/wtj/0+L/wtj/0+L/0+L/0+L/lLr/AFX/AFX/AFX/dqb/ -+////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////8a3sr2r -+pb2rpb2rpb2rpb2rpb2rpb2rpb2rpb2rpb2rpb2rpf///+fh39rPzOLb2NrPzOLb2OLb2NrPzOLb -+2NrPzNrPzOLb2NrPzP7+/f////////////////////////////////////////////////////// -+/////////////9DDvkENAEQSATwHAJp/dv///////////////////////////////5p/dkENAEEN -+AEwcDeLb2P///////7Whm0wcDUQSATwHAMa3sv///////////////////////5R2bTwHAEQSAVUn -+GOvm5P////////Pw7mU7LkENAEENAEQSAdDDvv///////////////////45wZzwHAEQSATwHAO/r -+6v///////8a3sjwHAEQSATwHAIFfVf///////////////////////9DDvkwcDUQSATwHAHNNQP// -+/////8LY/wBV/wBV/wBV/06M//////////////////////////////////////////////////// -+//////////////////////7//xNl/wBV/wBV/xNl/+Ls//////////////////////j6/z6C/wBV -+/wBV/wBV/9Pi/////////6vJ/wBV/xNl/wBV/yx2//7+/////////////////////2Sa/wBV/xNl -+/wBV/5S6/////////////////////////2Sa/wBV/wBV/wBV/8LY/////////////////wAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+pkoqaf3aaf3ahh36af3aaf3aaf3ah -+h36hh36af3aaf3ahh37////i29jGt7LQw77Qw77Gt7LQw77Gt7LQw77Qw77Qw77Gt7LQw779/f3/ -+///////////////////////////////////////////////////////////////////Qw75BDQBE -+EgE8BwCaf3b///////////////////////////////+af3ZBDQBBDQBMHA3i29j////////i29hM -+HA08BwBBDQBVJxjaz8z9/f3////////9/PzGt7JMHA1EEgFBDQBdMSP8+/v////////z8O5lOy48 -+BwBEEgFBDQBdMSPGt7L18/L////8+/u9q6VMHA1BDQBBDQBVJxjv6+r////////+/v1lOy5BDQBE -+EgFBDQCOcGfr5uT////////6+fm9q6VMHA1BDQBBDQA8BwDGt7L////////T4v8sdv8AVf8AVf8+ -+gv/1+f////////////////////////////////////////////////////////////////////// -+//+Uuv8AVf8AVf8AVf8sdv/C2P/+/v/////////T4v8+gv8AVf8AVf8AVf9OjP////////////+U -+uv8AVf8AVf8AVf8AVf9OjP/C2P/C2P9kmv+ryf/////T4v8TZf8AVf8AVf8TZf+Uuv/4+v////// -+///i7P92pv8AVf8AVf8AVf8+gv////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAA////////////vaulmn92oYd+oYd+oYd+oYd+oYd+oYd+oYd+qZKKoYd+qZKK//// -+2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/f39//////////////////////// -+////////////////////////////////////////////2s/MQQ0ARBIBPAcAmn92//////////// -+////////////////////oYd+PAcAQQ0ATBwN4tvY////////////mn92PAcAQQ0AQQ0ARBIBbUU5 -+c01Ac01AZTsuTBwNQQ0ARBIBPAcAjnBn////////////8/DuZTsuQQ0AQQ0AQQ0APAcATBwNXTEj -+bUU5ZTsuRBIBQQ0AQQ0APAcAjnBn////////////////0MO+TBwNPAcARBIBPAcAVScYbUU5c01A -+ZTsuQQ0ARBIBQQ0APAcAmn92////////////6/L/E2X/AFX/AFX/E2X/4uz///////////////// -+////////////////////////////////////////////////////////+Pr/Toz/AFX/AFX/AFX/ -+AFX/LHb/Toz/PoL/E2X/AFX/AFX/AFX/E2X/4uz/////////////q8n/AFX/AFX/AFX/AFX/AFX/ -+AFX/AFX/AFX/PoL/+vz/////lLr/AFX/AFX/AFX/AFX/LHb/PoL/PoL/LHb/AFX/AFX/AFX/E2X/ -+4uz/////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////// -+/7Whm6GHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfv///9rPzNDDvtDDvtDDvtDDvtDD -+vtDDvtDDvtDDvtDDvtDDvtDDvv39/f////////////////////////////////////////////// -+/////////////////////9DDvkENAEENAEENAJp/dv///////////////////////////////5p/ -+djwHADwHAEQSAeLb2P////////////n395R2bUENADwHAEENADwHADwHADwHADwHAEENAEENADwH -+AG1FOfXz8v////////////Pw7mU7LjwHAEENAF0xI0wcDTwHADwHADwHADwHAEENAEENADwHAG9I -+Pu/r6v///////////////////9DDvmU7LjwHADwHAEENADwHADwHADwHAEENADwHAEQSAaGHfv// -+/////////////////06M/wBV/wBV/wBV/6vJ//////////////////////////////////////// -+/////5S6/3am/6vJ/9Pi//j6//////////////X5/2Sa/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV -+/wBV/z6C/+Ls/////////////////6vJ/wBV/wBV/xNl/xNl/wBV/wBV/wBV/wBV/wBV/8LY//// -+/////6vJ/xNl/wBV/wBV/wBV/wBV/wBV/wBV/wBV/wBV/yx2/8LY//////////////////////// -+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+9q6Waf3apkoqhh36hh36h -+h36hh36hh36hh36hh36hh36hh37////i29jQw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Q -+w779/f3////////////////////////////////////////////////////////////////////a -+z8w8BwBEEgE8BwCaf3b///////////////////////////////+1oZtzTUBzTUB8WU3r5uT///// -+///////////////az8yUdm1lOy5MHA1VJxhMHA1MHA1VJxhtRTm1oZvz8O7////////////////3 -+9fSLa2FzTUBzTUC1oZvaz8yBX1VVJxhMHA1MHA1VJxhtRTm1oZv18/L///////////////////// -+///////39fS1oZt3UkZMHA1MHA1MHA1MHA1dMSOUdm3i29j///////////////////////+ryf8A -+Vf8TZf8AVf8sdv/9/v/////////////////////////////////////i7P8TZf8AVf8AVf8sdv/i -+7P/////////////////9/v/C2P9kmv8sdv8TZf8TZf8TZf8TZf8+gv/C2P/4+v////////////// -+//////+ryf9OjP8+gv9kmv/T4v8+gv8AVf8TZf8TZf9kmv/i7P/////////////i7P+Uuv8sdv8T -+Zf8TZf8TZf8TZf8+gv+ryf/y9v////////////////////////////8AAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAA////////////taGboYd+oYd+oYd+oYd+oYd+oYd+oYd+oYd+oYd+oYd+ -+qZKK////2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/f39//////////////// -+////////////////////////////////////////////////////2s/MQQ0AQQ0APAcAmn92//// -+//////////////////////////////////////////////////////////////////////////// -+////8/Du5+Hf6+bk6+bk+ff3//////////////////////////////////////////////////// -+/////f396+bk5+Hf8/Du/////////////////////////////////////////////////////f39 -+6+bk6+bk8/Du////////////////////////////////////+vz/LHb/AFX/E2X/AFX/ZJr///// -+////////////////////////////+Pr/Toz/AFX/AFX/AFX/PoL///////////////////////// -+/////////v7/4uz/4uz/4uz/+vz///////////////////////////////////////////////// -+////////6/L/4uz/+vz/////////////////////////////////6/L/4uz/4uz/8vb///////// -+////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// -+/////////72rpZp/dqGHfqGHfqGHfqmSiqGHfqGHfqGHfqGHfqGHfqGHfv///+Lb2NDDvtDDvtDD -+vtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvv39/f////////////////////////////////////// -+//Xz8u/r6vPw7u/r6vPw7u/r6vXz8sa3skENAEQSATwHAJR2bfXz8u/r6u/r6u/r6vPw7u/r6u/r -+6v///9DDvqGHfqGHfqmSiu/r6v////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////8LY/xNl/wBV/wBV/wBV/z6C/9Pi//L2//3+//////////j6 -+/9Pi/06M/wBV/wBV/wBV/wBV/9Pi//////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+1oZuhh36hh36h -+h36hh36hh36hh36hh36hh36hh36hh36pkor////az8zQw77Qw77Qw77Qw77Qw77Qw77Qw77Qw77Q -+w77Qw77Qw779/f3///////////////////////////////////////+hh35MHA1MHA1VJxhVJxhM -+HA1VJxhMHA1EEgFEEgFEEgFMHA1VJxhVJxhVJxhVJxhVJxhVJxhVJxj///+af3Y8BwA8BwBBDQDi -+29j///////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////+ryf8TZf8AVf8TZf8AVf8AVf8sdv9OjP9kmv9kmv8+gv8AVf8AVf8AVf8AVf8AVf+r -+yf////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////8AAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////vaulmn92oYd+qZKKoYd+oYd+oYd+oYd+oYd+ -+oYd+oYd+qZKK////2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/f39//////// -+////////////////////////////////lHZtPAcAQQ0APAcAPAcAPAcAPAcAPAcAQQ0AQQ0AQQ0A -+PAcAPAcAPAcAPAcAPAcAPAcAPAcAPAcA////mn92PAcAPAcATBwN4tvY//////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////////////////////wtj/PoL/ -+AFX/AFX/AFX/AFX/AFX/AFX/AFX/AFX/AFX/AFX/AFX/E2X/q8n///////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAP///////////7Whm6GHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfqGHfv///+Lb2NDD -+vtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvtDDvv39/f////////////////////////////// -+/////////6GHflUnGFUnGF0xI10xI1UnGF0xI1UnGFUnGFUnGFUnGF0xI1UnGF0xI1UnGFUnGF0x -+I1UnGFUnGP///6mSilUnGF0xI10xI+fh3/////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////z9/8LY/2Sa/yx2/wBV/wBV/wBV -+/wBV/wBV/wBV/yx2/3am/+vy//////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////+1oZua -+f3ahh36hh36pkoqhh36hh36hh36hh36hh36hh36hh37////az8zGt7LQw77Qw77Qw77Qw77Qw77Q -+w77Qw77Qw77Qw77Qw779/f3////////////////////////////////////////6+fn39fT39fT3 -+9fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT39fT////7+vr39fT3 -+9fT39fT9/f3///////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+///////////////////////////////////////1+f/i7P/C2P+ryf/C2P/C2P/i7P/6/P////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////8AAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////taGboYd+oYd+oYd+oYd+oYd+oYd+ -+oYd+oYd+oYd+oYd+oYd+////2s/M0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+0MO+/f39 -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAP////////////39/f38/P38/P38/P38/P38/P38/P38/P38/P38/P38/P38/P// -+//39/f38/P38/P38/P38/P38/P38/P38/P38/P38/P38/P38/P////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////// -+///z8O7r5uTr5uTr5uTr5uTv6+rr5uTv6+rr5uTv6+rr5uTr5uT///////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////5+Hf4tvY4tvY4tvY4tvY -+4tvY4tvY4tvY4tvY4tvY4tvY4tvY//////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAP///////////+fh3+Lb2OLb2OLb2OLb2Ofh3+Lb2OLb2OLb2OLb2OLb -+2OLb2P////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ -+///////////r5uTi29ji29ji29ji29ji29ji29jn4d/i29ji29ji29jn4d////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////5+Hf4tvY4tvY -+4tvY4tvY4tvY5+Hf4tvY5+Hf4tvY4tvY4tvY//////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////////////////AAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////+vm5OLb2OLb2OLb2OLb2OLb2OLb2Ofh3+Lb -+2Ofh3+Lb2OLb2P////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAD////////////n4d/i29ji29ji29ji29ji29ji29ji29ji29ji29ji29ji29j///////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////6+bk -+4tvY4tvY4tvY4tvY4tvY4tvY4tvY4tvY5+Hf4tvY4tvY//////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////////////////////////////////////////////////////////////////AAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////+fh3+Lb2OLb2OLb2OLb2Ofh3+Lb -+2Ofh3+Lb2OLb2OLb2OLb2P////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAD////////////r5uTi29ji29jn4d/i29ji29jn4d/i29ji29ji29ji29ji29j/ -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// -+////5+Hf4tvY4tvY4tvY5+Hf4tvY4tvY4tvY4tvY4tvY4tvY5+Hf//////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////+vm5OLb2OLb2OLb2OLb -+2OLb2OLb2OLb2OLb2OLb2OLb2OLb2P////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAD////////////9/f39/Pz9/Pz9/Pz9/Pz9/Pz9/Pz9/Pz9/Pz9/Pz9 -+/Pz9/Pz///////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+/////////////////////////////////////////////////////////////////wAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////////////////////////////////////// -+//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -diff --git a/MdeModulePkg/Logo/Logo-OpenSSL.idf b/MdeModulePkg/Logo/Logo-OpenSSL.idf -new file mode 100644 -index 0000000000..e527cff79b ---- /dev/null -+++ b/MdeModulePkg/Logo/Logo-OpenSSL.idf -@@ -0,0 +1,15 @@ -+// /** @file -+// Platform Logo image definition file. -+// -+// Copyright (c) 2016, Intel Corporation. All rights reserved.
-+// -+// This program and the accompanying materials -+// are licensed and made available under the terms and conditions of the BSD License -+// which accompanies this distribution. The full text of the license may be found at -+// http://opensource.org/licenses/bsd-license.php -+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+// -+// **/ -+ -+#image IMG_LOGO Logo-OpenSSL.bmp -diff --git a/MdeModulePkg/Logo/LogoOpenSSLDxe.inf b/MdeModulePkg/Logo/LogoOpenSSLDxe.inf -new file mode 100644 -index 0000000000..2f79d873e2 ---- /dev/null -+++ b/MdeModulePkg/Logo/LogoOpenSSLDxe.inf -@@ -0,0 +1,61 @@ -+## @file -+# The default logo bitmap picture shown on setup screen. -+# -+# Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
-+# -+# This program and the accompanying materials -+# are licensed and made available under the terms and conditions of the BSD License -+# which accompanies this distribution. The full text of the license may be found at -+# http://opensource.org/licenses/bsd-license.php -+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+# -+# -+## -+ -+[Defines] -+ INF_VERSION = 0x00010005 -+ BASE_NAME = LogoOpenSSLDxe -+ MODULE_UNI_FILE = LogoOpenSSLDxe.uni -+ FILE_GUID = 9CAE7B89-D48D-4D68-BBC4-4C0F1D48CDFF -+ MODULE_TYPE = DXE_DRIVER -+ VERSION_STRING = 1.0 -+ -+ ENTRY_POINT = InitializeLogo -+# -+# This flag specifies whether HII resource section is generated into PE image. -+# -+ UEFI_HII_RESOURCE_SECTION = TRUE -+ -+# -+# The following information is for reference only and not required by the build tools. -+# -+# VALID_ARCHITECTURES = IA32 X64 -+# -+ -+[Sources] -+ Logo-OpenSSL.bmp -+ Logo.c -+ Logo-OpenSSL.idf -+ -+[Packages] -+ MdeModulePkg/MdeModulePkg.dec -+ MdePkg/MdePkg.dec -+ -+[LibraryClasses] -+ UefiBootServicesTableLib -+ UefiDriverEntryPoint -+ DebugLib -+ -+[Protocols] -+ gEfiHiiDatabaseProtocolGuid ## CONSUMES -+ gEfiHiiImageExProtocolGuid ## CONSUMES -+ gEfiHiiPackageListProtocolGuid ## PRODUCES CONSUMES -+ gEdkiiPlatformLogoProtocolGuid ## PRODUCES -+ -+[Depex] -+ gEfiHiiDatabaseProtocolGuid AND -+ gEfiHiiImageExProtocolGuid -+ -+[UserExtensions.TianoCore."ExtraFiles"] -+ LogoDxeExtra.uni -diff --git a/MdeModulePkg/Logo/LogoOpenSSLDxe.uni b/MdeModulePkg/Logo/LogoOpenSSLDxe.uni -new file mode 100644 -index 0000000000..7227ac3910 ---- /dev/null -+++ b/MdeModulePkg/Logo/LogoOpenSSLDxe.uni -@@ -0,0 +1,22 @@ -+// /** @file -+// The logo bitmap picture (with OpenSSL advertisment) shown on setup screen. -+// -+// This module provides the logo bitmap picture (with OpenSSL advertisment) -+// shown on setup screen, through EDKII Platform Logo protocol. -+// -+// Copyright (c) 2016, Intel Corporation. All rights reserved.
-+// -+// This program and the accompanying materials -+// are licensed and made available under the terms and conditions of the BSD License -+// which accompanies this distribution. The full text of the license may be found at -+// http://opensource.org/licenses/bsd-license.php -+// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+// -+// **/ -+ -+ -+#string STR_MODULE_ABSTRACT #language en-US "Provides the logo bitmap picture (with OpenSSL advertisment) shown on setup screen." -+ -+#string STR_MODULE_DESCRIPTION #language en-US "This module provides the logo bitmap picture (with OpenSSL advertisment) shown on setup screen, through EDKII Platform Logo protocol." -+ -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index fce6051e47..2886c10b1b 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -755,7 +755,11 @@ - NULL|OvmfPkg/Csm/LegacyBootManagerLib/LegacyBootManagerLib.inf - !endif - } -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+ MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - MdeModulePkg/Logo/LogoDxe.inf -+!endif - MdeModulePkg/Application/UiApp/UiApp.inf { - - NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf -diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf -index 2b9a6b5801..6e1e7f5f44 100644 ---- a/OvmfPkg/OvmfPkgIa32.fdf -+++ b/OvmfPkg/OvmfPkgIa32.fdf -@@ -297,7 +297,11 @@ INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf - -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - INF MdeModulePkg/Logo/LogoDxe.inf -+!endif - - # - # Network modules -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 983eebfaa7..5a9e9a707a 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -769,7 +769,11 @@ - NULL|OvmfPkg/Csm/LegacyBootManagerLib/LegacyBootManagerLib.inf - !endif - } -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+ MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - MdeModulePkg/Logo/LogoDxe.inf -+!endif - MdeModulePkg/Application/UiApp/UiApp.inf { - - NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf -diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf -index 83ff6aef2e..1fab3d5014 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.fdf -+++ b/OvmfPkg/OvmfPkgIa32X64.fdf -@@ -298,7 +298,11 @@ INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf - -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - INF MdeModulePkg/Logo/LogoDxe.inf -+!endif - - # - # Network modules -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index ea62b82ff7..70c2c3e3b9 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -765,7 +765,11 @@ - NULL|OvmfPkg/Csm/LegacyBootManagerLib/LegacyBootManagerLib.inf - !endif - } -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+ MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - MdeModulePkg/Logo/LogoDxe.inf -+!endif - MdeModulePkg/Application/UiApp/UiApp.inf { - - NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf -diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf -index 8da59037e5..6dc48977a0 100644 ---- a/OvmfPkg/OvmfPkgX64.fdf -+++ b/OvmfPkg/OvmfPkgX64.fdf -@@ -307,7 +307,11 @@ INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf - -+!if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) -+INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -+!else - INF MdeModulePkg/Logo/LogoDxe.inf -+!endif - - # - # Network modules diff --git a/SPECS-EXTENDED/edk2/0006-OvmfPkg-QemuVideoDxe-enable-debug-messages-in-VbeShi.patch b/SPECS-EXTENDED/edk2/0006-OvmfPkg-QemuVideoDxe-enable-debug-messages-in-VbeShi.patch deleted file mode 100644 index 7173be1f03d..00000000000 --- a/SPECS-EXTENDED/edk2/0006-OvmfPkg-QemuVideoDxe-enable-debug-messages-in-VbeShi.patch +++ /dev/null @@ -1,540 +0,0 @@ -From 31dcc494a7c3ce1bbb1d35b42ba3b6359ca971cf Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 12 Jun 2014 00:17:59 +0200 -Subject: [PATCH] OvmfPkg: QemuVideoDxe: enable debug messages in VbeShim - -The Int10h VBE Shim is capable of emitting short debug messages when the -win2k8r2 UEFI guest uses (emulates) the Video BIOS. In upstream the quiet -version is preferred; for us debug messages are important as a default. - -For this patch, the DEBUG macro is enabled in the assembly file, and then -the header file is regenerated from the assembly, by running -"OvmfPkg/QemuVideoDxe/VbeShim.sh". - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Signed-off-by: Laszlo Ersek -(cherry picked from commit ccda46526bb2e573d9b54f0db75d27e442b4566f) -(cherry picked from commit ed45b26dbeadd63dd8f2edf627290957d8bbb3b2) -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/QemuVideoDxe/VbeShim.asm | 2 +- - OvmfPkg/QemuVideoDxe/VbeShim.h | 481 ++++++++++++++++++++----------- - 2 files changed, 308 insertions(+), 175 deletions(-) - -diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.asm b/OvmfPkg/QemuVideoDxe/VbeShim.asm -index 1d284b2641..0d5cfaf1e4 100644 ---- a/OvmfPkg/QemuVideoDxe/VbeShim.asm -+++ b/OvmfPkg/QemuVideoDxe/VbeShim.asm -@@ -12,7 +12,7 @@ - ;------------------------------------------------------------------------------ - - ; enable this macro for debug messages --;%define DEBUG -+%define DEBUG - - %macro DebugLog 1 - %ifdef DEBUG -diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.h b/OvmfPkg/QemuVideoDxe/VbeShim.h -index cc9b6e14cd..325d6478a1 100644 ---- a/OvmfPkg/QemuVideoDxe/VbeShim.h -+++ b/OvmfPkg/QemuVideoDxe/VbeShim.h -@@ -517,185 +517,318 @@ STATIC CONST UINT8 mVbeShim[] = { - /* 000001FE nop */ 0x90, - /* 000001FF nop */ 0x90, - /* 00000200 cmp ax,0x4f00 */ 0x3D, 0x00, 0x4F, -- /* 00000203 jz 0x22d */ 0x74, 0x28, -+ /* 00000203 jz 0x235 */ 0x74, 0x30, - /* 00000205 cmp ax,0x4f01 */ 0x3D, 0x01, 0x4F, -- /* 00000208 jz 0x245 */ 0x74, 0x3B, -+ /* 00000208 jz 0x255 */ 0x74, 0x4B, - /* 0000020A cmp ax,0x4f02 */ 0x3D, 0x02, 0x4F, -- /* 0000020D jz 0x269 */ 0x74, 0x5A, -+ /* 0000020D jz 0x289 */ 0x74, 0x7A, - /* 0000020F cmp ax,0x4f03 */ 0x3D, 0x03, 0x4F, -- /* 00000212 jz word 0x331 */ 0x0F, 0x84, 0x1B, 0x01, -+ /* 00000212 jz word 0x361 */ 0x0F, 0x84, 0x4B, 0x01, - /* 00000216 cmp ax,0x4f10 */ 0x3D, 0x10, 0x4F, -- /* 00000219 jz word 0x336 */ 0x0F, 0x84, 0x19, 0x01, -+ /* 00000219 jz word 0x36e */ 0x0F, 0x84, 0x51, 0x01, - /* 0000021D cmp ax,0x4f15 */ 0x3D, 0x15, 0x4F, -- /* 00000220 jz word 0x338 */ 0x0F, 0x84, 0x14, 0x01, -+ /* 00000220 jz word 0x378 */ 0x0F, 0x84, 0x54, 0x01, - /* 00000224 cmp ah,0x0 */ 0x80, 0xFC, 0x00, -- /* 00000227 jz word 0x33a */ 0x0F, 0x84, 0x0F, 0x01, -- /* 0000022B jmp short 0x22b */ 0xEB, 0xFE, -- /* 0000022D push es */ 0x06, -- /* 0000022E push di */ 0x57, -- /* 0000022F push ds */ 0x1E, -- /* 00000230 push si */ 0x56, -- /* 00000231 push cx */ 0x51, -- /* 00000232 push cs */ 0x0E, -- /* 00000233 pop ds */ 0x1F, -- /* 00000234 mov si,0x0 */ 0xBE, 0x00, 0x00, -- /* 00000237 mov cx,0x100 */ 0xB9, 0x00, 0x01, -- /* 0000023A cld */ 0xFC, -- /* 0000023B rep movsb */ 0xF3, 0xA4, -- /* 0000023D pop cx */ 0x59, -- /* 0000023E pop si */ 0x5E, -- /* 0000023F pop ds */ 0x1F, -- /* 00000240 pop di */ 0x5F, -- /* 00000241 pop es */ 0x07, -- /* 00000242 jmp word 0x34c */ 0xE9, 0x07, 0x01, -- /* 00000245 push es */ 0x06, -- /* 00000246 push di */ 0x57, -- /* 00000247 push ds */ 0x1E, -- /* 00000248 push si */ 0x56, -- /* 00000249 push cx */ 0x51, -- /* 0000024A and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF, -- /* 0000024E cmp cx,0xf1 */ 0x81, 0xF9, 0xF1, 0x00, -- /* 00000252 jz 0x256 */ 0x74, 0x02, -- /* 00000254 jmp short 0x22b */ 0xEB, 0xD5, -- /* 00000256 push cs */ 0x0E, -- /* 00000257 pop ds */ 0x1F, -- /* 00000258 mov si,0x100 */ 0xBE, 0x00, 0x01, -- /* 0000025B mov cx,0x100 */ 0xB9, 0x00, 0x01, -- /* 0000025E cld */ 0xFC, -- /* 0000025F rep movsb */ 0xF3, 0xA4, -- /* 00000261 pop cx */ 0x59, -- /* 00000262 pop si */ 0x5E, -- /* 00000263 pop ds */ 0x1F, -- /* 00000264 pop di */ 0x5F, -- /* 00000265 pop es */ 0x07, -- /* 00000266 jmp word 0x34c */ 0xE9, 0xE3, 0x00, -- /* 00000269 push dx */ 0x52, -- /* 0000026A push ax */ 0x50, -- /* 0000026B cmp bx,0x40f1 */ 0x81, 0xFB, 0xF1, 0x40, -- /* 0000026F jz 0x273 */ 0x74, 0x02, -- /* 00000271 jmp short 0x22b */ 0xEB, 0xB8, -- /* 00000273 mov dx,0x3c0 */ 0xBA, 0xC0, 0x03, -- /* 00000276 mov al,0x20 */ 0xB0, 0x20, -- /* 00000278 out dx,al */ 0xEE, -- /* 00000279 push dx */ 0x52, -- /* 0000027A push ax */ 0x50, -- /* 0000027B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 0000027E mov ax,0x4 */ 0xB8, 0x04, 0x00, -- /* 00000281 out dx,ax */ 0xEF, -- /* 00000282 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 00000285 mov ax,0x0 */ 0xB8, 0x00, 0x00, -- /* 00000288 out dx,ax */ 0xEF, -- /* 00000289 pop ax */ 0x58, -- /* 0000028A pop dx */ 0x5A, -- /* 0000028B push dx */ 0x52, -- /* 0000028C push ax */ 0x50, -- /* 0000028D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 00000290 mov ax,0x5 */ 0xB8, 0x05, 0x00, -- /* 00000293 out dx,ax */ 0xEF, -- /* 00000294 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 00000297 mov ax,0x0 */ 0xB8, 0x00, 0x00, -- /* 0000029A out dx,ax */ 0xEF, -- /* 0000029B pop ax */ 0x58, -- /* 0000029C pop dx */ 0x5A, -- /* 0000029D push dx */ 0x52, -- /* 0000029E push ax */ 0x50, -- /* 0000029F mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002A2 mov ax,0x8 */ 0xB8, 0x08, 0x00, -- /* 000002A5 out dx,ax */ 0xEF, -- /* 000002A6 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 000002A9 mov ax,0x0 */ 0xB8, 0x00, 0x00, -- /* 000002AC out dx,ax */ 0xEF, -- /* 000002AD pop ax */ 0x58, -- /* 000002AE pop dx */ 0x5A, -- /* 000002AF push dx */ 0x52, -- /* 000002B0 push ax */ 0x50, -- /* 000002B1 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002B4 mov ax,0x9 */ 0xB8, 0x09, 0x00, -- /* 000002B7 out dx,ax */ 0xEF, -- /* 000002B8 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 000002BB mov ax,0x0 */ 0xB8, 0x00, 0x00, -- /* 000002BE out dx,ax */ 0xEF, -- /* 000002BF pop ax */ 0x58, -- /* 000002C0 pop dx */ 0x5A, -- /* 000002C1 push dx */ 0x52, -- /* 000002C2 push ax */ 0x50, -- /* 000002C3 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002C6 mov ax,0x3 */ 0xB8, 0x03, 0x00, -- /* 000002C9 out dx,ax */ 0xEF, -- /* 000002CA mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 000002CD mov ax,0x20 */ 0xB8, 0x20, 0x00, -- /* 000002D0 out dx,ax */ 0xEF, -- /* 000002D1 pop ax */ 0x58, -- /* 000002D2 pop dx */ 0x5A, -- /* 000002D3 push dx */ 0x52, -- /* 000002D4 push ax */ 0x50, -- /* 000002D5 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002D8 mov ax,0x1 */ 0xB8, 0x01, 0x00, -- /* 000002DB out dx,ax */ 0xEF, -- /* 000002DC mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 000002DF mov ax,0x400 */ 0xB8, 0x00, 0x04, -- /* 000002E2 out dx,ax */ 0xEF, -- /* 000002E3 pop ax */ 0x58, -- /* 000002E4 pop dx */ 0x5A, -- /* 000002E5 push dx */ 0x52, -- /* 000002E6 push ax */ 0x50, -- /* 000002E7 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002EA mov ax,0x6 */ 0xB8, 0x06, 0x00, -- /* 000002ED out dx,ax */ 0xEF, -- /* 000002EE mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 000002F1 mov ax,0x400 */ 0xB8, 0x00, 0x04, -- /* 000002F4 out dx,ax */ 0xEF, -- /* 000002F5 pop ax */ 0x58, -- /* 000002F6 pop dx */ 0x5A, -- /* 000002F7 push dx */ 0x52, -- /* 000002F8 push ax */ 0x50, -- /* 000002F9 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 000002FC mov ax,0x2 */ 0xB8, 0x02, 0x00, -- /* 000002FF out dx,ax */ 0xEF, -- /* 00000300 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 00000303 mov ax,0x300 */ 0xB8, 0x00, 0x03, -- /* 00000306 out dx,ax */ 0xEF, -- /* 00000307 pop ax */ 0x58, -- /* 00000308 pop dx */ 0x5A, -- /* 00000309 push dx */ 0x52, -- /* 0000030A push ax */ 0x50, -- /* 0000030B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 0000030E mov ax,0x7 */ 0xB8, 0x07, 0x00, -- /* 00000311 out dx,ax */ 0xEF, -- /* 00000312 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 00000315 mov ax,0x300 */ 0xB8, 0x00, 0x03, -- /* 00000318 out dx,ax */ 0xEF, -- /* 00000319 pop ax */ 0x58, -- /* 0000031A pop dx */ 0x5A, -- /* 0000031B push dx */ 0x52, -- /* 0000031C push ax */ 0x50, -- /* 0000031D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -- /* 00000320 mov ax,0x4 */ 0xB8, 0x04, 0x00, -- /* 00000323 out dx,ax */ 0xEF, -- /* 00000324 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -- /* 00000327 mov ax,0x41 */ 0xB8, 0x41, 0x00, -- /* 0000032A out dx,ax */ 0xEF, -- /* 0000032B pop ax */ 0x58, -- /* 0000032C pop dx */ 0x5A, -- /* 0000032D pop ax */ 0x58, -- /* 0000032E pop dx */ 0x5A, -- /* 0000032F jmp short 0x34c */ 0xEB, 0x1B, -- /* 00000331 mov bx,0x40f1 */ 0xBB, 0xF1, 0x40, -- /* 00000334 jmp short 0x34c */ 0xEB, 0x16, -- /* 00000336 jmp short 0x350 */ 0xEB, 0x18, -- /* 00000338 jmp short 0x350 */ 0xEB, 0x16, -- /* 0000033A cmp al,0x3 */ 0x3C, 0x03, -- /* 0000033C jz 0x345 */ 0x74, 0x07, -- /* 0000033E cmp al,0x12 */ 0x3C, 0x12, -- /* 00000340 jz 0x349 */ 0x74, 0x07, -- /* 00000342 jmp word 0x22b */ 0xE9, 0xE6, 0xFE, -- /* 00000345 mov al,0x30 */ 0xB0, 0x30, -- /* 00000347 jmp short 0x34b */ 0xEB, 0x02, -- /* 00000349 mov al,0x20 */ 0xB0, 0x20, -- /* 0000034B iretw */ 0xCF, -- /* 0000034C mov ax,0x4f */ 0xB8, 0x4F, 0x00, -- /* 0000034F iretw */ 0xCF, -- /* 00000350 mov ax,0x14f */ 0xB8, 0x4F, 0x01, -- /* 00000353 iretw */ 0xCF, -+ /* 00000227 jz word 0x382 */ 0x0F, 0x84, 0x57, 0x01, -+ /* 0000022B push si */ 0x56, -+ /* 0000022C mov si,0x3e9 */ 0xBE, 0xE9, 0x03, -+ /* 0000022F call word 0x3c4 */ 0xE8, 0x92, 0x01, -+ /* 00000232 pop si */ 0x5E, -+ /* 00000233 jmp short 0x233 */ 0xEB, 0xFE, -+ /* 00000235 push es */ 0x06, -+ /* 00000236 push di */ 0x57, -+ /* 00000237 push ds */ 0x1E, -+ /* 00000238 push si */ 0x56, -+ /* 00000239 push cx */ 0x51, -+ /* 0000023A push si */ 0x56, -+ /* 0000023B mov si,0x3fb */ 0xBE, 0xFB, 0x03, -+ /* 0000023E call word 0x3c4 */ 0xE8, 0x83, 0x01, -+ /* 00000241 pop si */ 0x5E, -+ /* 00000242 push cs */ 0x0E, -+ /* 00000243 pop ds */ 0x1F, -+ /* 00000244 mov si,0x0 */ 0xBE, 0x00, 0x00, -+ /* 00000247 mov cx,0x100 */ 0xB9, 0x00, 0x01, -+ /* 0000024A cld */ 0xFC, -+ /* 0000024B rep movsb */ 0xF3, 0xA4, -+ /* 0000024D pop cx */ 0x59, -+ /* 0000024E pop si */ 0x5E, -+ /* 0000024F pop ds */ 0x1F, -+ /* 00000250 pop di */ 0x5F, -+ /* 00000251 pop es */ 0x07, -+ /* 00000252 jmp word 0x3ac */ 0xE9, 0x57, 0x01, -+ /* 00000255 push es */ 0x06, -+ /* 00000256 push di */ 0x57, -+ /* 00000257 push ds */ 0x1E, -+ /* 00000258 push si */ 0x56, -+ /* 00000259 push cx */ 0x51, -+ /* 0000025A push si */ 0x56, -+ /* 0000025B mov si,0x404 */ 0xBE, 0x04, 0x04, -+ /* 0000025E call word 0x3c4 */ 0xE8, 0x63, 0x01, -+ /* 00000261 pop si */ 0x5E, -+ /* 00000262 and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF, -+ /* 00000266 cmp cx,0xf1 */ 0x81, 0xF9, 0xF1, 0x00, -+ /* 0000026A jz 0x276 */ 0x74, 0x0A, -+ /* 0000026C push si */ 0x56, -+ /* 0000026D mov si,0x432 */ 0xBE, 0x32, 0x04, -+ /* 00000270 call word 0x3c4 */ 0xE8, 0x51, 0x01, -+ /* 00000273 pop si */ 0x5E, -+ /* 00000274 jmp short 0x233 */ 0xEB, 0xBD, -+ /* 00000276 push cs */ 0x0E, -+ /* 00000277 pop ds */ 0x1F, -+ /* 00000278 mov si,0x100 */ 0xBE, 0x00, 0x01, -+ /* 0000027B mov cx,0x100 */ 0xB9, 0x00, 0x01, -+ /* 0000027E cld */ 0xFC, -+ /* 0000027F rep movsb */ 0xF3, 0xA4, -+ /* 00000281 pop cx */ 0x59, -+ /* 00000282 pop si */ 0x5E, -+ /* 00000283 pop ds */ 0x1F, -+ /* 00000284 pop di */ 0x5F, -+ /* 00000285 pop es */ 0x07, -+ /* 00000286 jmp word 0x3ac */ 0xE9, 0x23, 0x01, -+ /* 00000289 push dx */ 0x52, -+ /* 0000028A push ax */ 0x50, -+ /* 0000028B push si */ 0x56, -+ /* 0000028C mov si,0x41a */ 0xBE, 0x1A, 0x04, -+ /* 0000028F call word 0x3c4 */ 0xE8, 0x32, 0x01, -+ /* 00000292 pop si */ 0x5E, -+ /* 00000293 cmp bx,0x40f1 */ 0x81, 0xFB, 0xF1, 0x40, -+ /* 00000297 jz 0x2a3 */ 0x74, 0x0A, -+ /* 00000299 push si */ 0x56, -+ /* 0000029A mov si,0x432 */ 0xBE, 0x32, 0x04, -+ /* 0000029D call word 0x3c4 */ 0xE8, 0x24, 0x01, -+ /* 000002A0 pop si */ 0x5E, -+ /* 000002A1 jmp short 0x233 */ 0xEB, 0x90, -+ /* 000002A3 mov dx,0x3c0 */ 0xBA, 0xC0, 0x03, -+ /* 000002A6 mov al,0x20 */ 0xB0, 0x20, -+ /* 000002A8 out dx,al */ 0xEE, -+ /* 000002A9 push dx */ 0x52, -+ /* 000002AA push ax */ 0x50, -+ /* 000002AB mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 000002AE mov ax,0x4 */ 0xB8, 0x04, 0x00, -+ /* 000002B1 out dx,ax */ 0xEF, -+ /* 000002B2 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 000002B5 mov ax,0x0 */ 0xB8, 0x00, 0x00, -+ /* 000002B8 out dx,ax */ 0xEF, -+ /* 000002B9 pop ax */ 0x58, -+ /* 000002BA pop dx */ 0x5A, -+ /* 000002BB push dx */ 0x52, -+ /* 000002BC push ax */ 0x50, -+ /* 000002BD mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 000002C0 mov ax,0x5 */ 0xB8, 0x05, 0x00, -+ /* 000002C3 out dx,ax */ 0xEF, -+ /* 000002C4 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 000002C7 mov ax,0x0 */ 0xB8, 0x00, 0x00, -+ /* 000002CA out dx,ax */ 0xEF, -+ /* 000002CB pop ax */ 0x58, -+ /* 000002CC pop dx */ 0x5A, -+ /* 000002CD push dx */ 0x52, -+ /* 000002CE push ax */ 0x50, -+ /* 000002CF mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 000002D2 mov ax,0x8 */ 0xB8, 0x08, 0x00, -+ /* 000002D5 out dx,ax */ 0xEF, -+ /* 000002D6 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 000002D9 mov ax,0x0 */ 0xB8, 0x00, 0x00, -+ /* 000002DC out dx,ax */ 0xEF, -+ /* 000002DD pop ax */ 0x58, -+ /* 000002DE pop dx */ 0x5A, -+ /* 000002DF push dx */ 0x52, -+ /* 000002E0 push ax */ 0x50, -+ /* 000002E1 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 000002E4 mov ax,0x9 */ 0xB8, 0x09, 0x00, -+ /* 000002E7 out dx,ax */ 0xEF, -+ /* 000002E8 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 000002EB mov ax,0x0 */ 0xB8, 0x00, 0x00, -+ /* 000002EE out dx,ax */ 0xEF, -+ /* 000002EF pop ax */ 0x58, -+ /* 000002F0 pop dx */ 0x5A, -+ /* 000002F1 push dx */ 0x52, -+ /* 000002F2 push ax */ 0x50, -+ /* 000002F3 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 000002F6 mov ax,0x3 */ 0xB8, 0x03, 0x00, -+ /* 000002F9 out dx,ax */ 0xEF, -+ /* 000002FA mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 000002FD mov ax,0x20 */ 0xB8, 0x20, 0x00, -+ /* 00000300 out dx,ax */ 0xEF, -+ /* 00000301 pop ax */ 0x58, -+ /* 00000302 pop dx */ 0x5A, -+ /* 00000303 push dx */ 0x52, -+ /* 00000304 push ax */ 0x50, -+ /* 00000305 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 00000308 mov ax,0x1 */ 0xB8, 0x01, 0x00, -+ /* 0000030B out dx,ax */ 0xEF, -+ /* 0000030C mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 0000030F mov ax,0x400 */ 0xB8, 0x00, 0x04, -+ /* 00000312 out dx,ax */ 0xEF, -+ /* 00000313 pop ax */ 0x58, -+ /* 00000314 pop dx */ 0x5A, -+ /* 00000315 push dx */ 0x52, -+ /* 00000316 push ax */ 0x50, -+ /* 00000317 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 0000031A mov ax,0x6 */ 0xB8, 0x06, 0x00, -+ /* 0000031D out dx,ax */ 0xEF, -+ /* 0000031E mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 00000321 mov ax,0x400 */ 0xB8, 0x00, 0x04, -+ /* 00000324 out dx,ax */ 0xEF, -+ /* 00000325 pop ax */ 0x58, -+ /* 00000326 pop dx */ 0x5A, -+ /* 00000327 push dx */ 0x52, -+ /* 00000328 push ax */ 0x50, -+ /* 00000329 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 0000032C mov ax,0x2 */ 0xB8, 0x02, 0x00, -+ /* 0000032F out dx,ax */ 0xEF, -+ /* 00000330 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 00000333 mov ax,0x300 */ 0xB8, 0x00, 0x03, -+ /* 00000336 out dx,ax */ 0xEF, -+ /* 00000337 pop ax */ 0x58, -+ /* 00000338 pop dx */ 0x5A, -+ /* 00000339 push dx */ 0x52, -+ /* 0000033A push ax */ 0x50, -+ /* 0000033B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 0000033E mov ax,0x7 */ 0xB8, 0x07, 0x00, -+ /* 00000341 out dx,ax */ 0xEF, -+ /* 00000342 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 00000345 mov ax,0x300 */ 0xB8, 0x00, 0x03, -+ /* 00000348 out dx,ax */ 0xEF, -+ /* 00000349 pop ax */ 0x58, -+ /* 0000034A pop dx */ 0x5A, -+ /* 0000034B push dx */ 0x52, -+ /* 0000034C push ax */ 0x50, -+ /* 0000034D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, -+ /* 00000350 mov ax,0x4 */ 0xB8, 0x04, 0x00, -+ /* 00000353 out dx,ax */ 0xEF, -+ /* 00000354 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, -+ /* 00000357 mov ax,0x41 */ 0xB8, 0x41, 0x00, -+ /* 0000035A out dx,ax */ 0xEF, -+ /* 0000035B pop ax */ 0x58, -+ /* 0000035C pop dx */ 0x5A, -+ /* 0000035D pop ax */ 0x58, -+ /* 0000035E pop dx */ 0x5A, -+ /* 0000035F jmp short 0x3ac */ 0xEB, 0x4B, -+ /* 00000361 push si */ 0x56, -+ /* 00000362 mov si,0x411 */ 0xBE, 0x11, 0x04, -+ /* 00000365 call word 0x3c4 */ 0xE8, 0x5C, 0x00, -+ /* 00000368 pop si */ 0x5E, -+ /* 00000369 mov bx,0x40f1 */ 0xBB, 0xF1, 0x40, -+ /* 0000036C jmp short 0x3ac */ 0xEB, 0x3E, -+ /* 0000036E push si */ 0x56, -+ /* 0000036F mov si,0x43f */ 0xBE, 0x3F, 0x04, -+ /* 00000372 call word 0x3c4 */ 0xE8, 0x4F, 0x00, -+ /* 00000375 pop si */ 0x5E, -+ /* 00000376 jmp short 0x3b8 */ 0xEB, 0x40, -+ /* 00000378 push si */ 0x56, -+ /* 00000379 mov si,0x452 */ 0xBE, 0x52, 0x04, -+ /* 0000037C call word 0x3c4 */ 0xE8, 0x45, 0x00, -+ /* 0000037F pop si */ 0x5E, -+ /* 00000380 jmp short 0x3b8 */ 0xEB, 0x36, -+ /* 00000382 push si */ 0x56, -+ /* 00000383 mov si,0x423 */ 0xBE, 0x23, 0x04, -+ /* 00000386 call word 0x3c4 */ 0xE8, 0x3B, 0x00, -+ /* 00000389 pop si */ 0x5E, -+ /* 0000038A cmp al,0x3 */ 0x3C, 0x03, -+ /* 0000038C jz 0x39d */ 0x74, 0x0F, -+ /* 0000038E cmp al,0x12 */ 0x3C, 0x12, -+ /* 00000390 jz 0x3a1 */ 0x74, 0x0F, -+ /* 00000392 push si */ 0x56, -+ /* 00000393 mov si,0x432 */ 0xBE, 0x32, 0x04, -+ /* 00000396 call word 0x3c4 */ 0xE8, 0x2B, 0x00, -+ /* 00000399 pop si */ 0x5E, -+ /* 0000039A jmp word 0x233 */ 0xE9, 0x96, 0xFE, -+ /* 0000039D mov al,0x30 */ 0xB0, 0x30, -+ /* 0000039F jmp short 0x3a3 */ 0xEB, 0x02, -+ /* 000003A1 mov al,0x20 */ 0xB0, 0x20, -+ /* 000003A3 push si */ 0x56, -+ /* 000003A4 mov si,0x3d6 */ 0xBE, 0xD6, 0x03, -+ /* 000003A7 call word 0x3c4 */ 0xE8, 0x1A, 0x00, -+ /* 000003AA pop si */ 0x5E, -+ /* 000003AB iretw */ 0xCF, -+ /* 000003AC push si */ 0x56, -+ /* 000003AD mov si,0x3d6 */ 0xBE, 0xD6, 0x03, -+ /* 000003B0 call word 0x3c4 */ 0xE8, 0x11, 0x00, -+ /* 000003B3 pop si */ 0x5E, -+ /* 000003B4 mov ax,0x4f */ 0xB8, 0x4F, 0x00, -+ /* 000003B7 iretw */ 0xCF, -+ /* 000003B8 push si */ 0x56, -+ /* 000003B9 mov si,0x3dc */ 0xBE, 0xDC, 0x03, -+ /* 000003BC call word 0x3c4 */ 0xE8, 0x05, 0x00, -+ /* 000003BF pop si */ 0x5E, -+ /* 000003C0 mov ax,0x14f */ 0xB8, 0x4F, 0x01, -+ /* 000003C3 iretw */ 0xCF, -+ /* 000003C4 pushaw */ 0x60, -+ /* 000003C5 push ds */ 0x1E, -+ /* 000003C6 push cs */ 0x0E, -+ /* 000003C7 pop ds */ 0x1F, -+ /* 000003C8 mov dx,0x402 */ 0xBA, 0x02, 0x04, -+ /* 000003CB lodsb */ 0xAC, -+ /* 000003CC cmp al,0x0 */ 0x3C, 0x00, -+ /* 000003CE jz 0x3d3 */ 0x74, 0x03, -+ /* 000003D0 out dx,al */ 0xEE, -+ /* 000003D1 jmp short 0x3cb */ 0xEB, 0xF8, -+ /* 000003D3 pop ds */ 0x1F, -+ /* 000003D4 popaw */ 0x61, -+ /* 000003D5 ret */ 0xC3, -+ /* 000003D6 inc bp */ 0x45, -+ /* 000003D7 js 0x442 */ 0x78, 0x69, -+ /* 000003D9 jz 0x3e5 */ 0x74, 0x0A, -+ /* 000003DB add [di+0x6e],dl */ 0x00, 0x55, 0x6E, -+ /* 000003DE jnc 0x455 */ 0x73, 0x75, -+ /* 000003E0 jo 0x452 */ 0x70, 0x70, -+ /* 000003E2 outsw */ 0x6F, -+ /* 000003E3 jc 0x459 */ 0x72, 0x74, -+ /* 000003E5 or al,[fs:bx+si] */ 0x65, 0x64, 0x0A, 0x00, -+ /* 000003E9 push bp */ 0x55, -+ /* 000003EA outsb */ 0x6E, -+ /* 000003EB imul bp,[bp+0x6f],byte +0x77 */ 0x6B, 0x6E, 0x6F, 0x77, -+ /* 000003EF outsb */ 0x6E, -+ /* 000003F0 and [bp+0x75],al */ 0x20, 0x46, 0x75, -+ /* 000003F3 outsb */ 0x6E, -+ /* 000003F4 arpl [si+0x69],si */ 0x63, 0x74, 0x69, -+ /* 000003F7 outsw */ 0x6F, -+ /* 000003F8 outsb */ 0x6E, -+ /* 000003F9 or al,[bx+si] */ 0x0A, 0x00, -+ /* 000003FB inc di */ 0x47, -+ /* 000003FC gs jz 0x448 */ 0x65, 0x74, 0x49, -+ /* 000003FF outsb */ 0x6E, -+ /* 00000400 outsd */ 0x66, 0x6F, -+ /* 00000402 or al,[bx+si] */ 0x0A, 0x00, -+ /* 00000404 inc di */ 0x47, -+ /* 00000405 gs jz 0x455 */ 0x65, 0x74, 0x4D, -+ /* 00000408 outsw */ 0x6F, -+ /* 00000409 gs dec cx */ 0x64, 0x65, 0x49, -+ /* 0000040C outsb */ 0x6E, -+ /* 0000040D outsd */ 0x66, 0x6F, -+ /* 0000040F or al,[bx+si] */ 0x0A, 0x00, -+ /* 00000411 inc di */ 0x47, -+ /* 00000412 gs jz 0x462 */ 0x65, 0x74, 0x4D, -+ /* 00000415 outsw */ 0x6F, -+ /* 00000416 or al,[gs:bx+si] */ 0x64, 0x65, 0x0A, 0x00, -+ /* 0000041A push bx */ 0x53, -+ /* 0000041B gs jz 0x46b */ 0x65, 0x74, 0x4D, -+ /* 0000041E outsw */ 0x6F, -+ /* 0000041F or al,[gs:bx+si] */ 0x64, 0x65, 0x0A, 0x00, -+ /* 00000423 push bx */ 0x53, -+ /* 00000424 gs jz 0x474 */ 0x65, 0x74, 0x4D, -+ /* 00000427 outsw */ 0x6F, -+ /* 00000428 gs dec sp */ 0x64, 0x65, 0x4C, -+ /* 0000042B gs a32 popaw */ 0x65, 0x67, 0x61, -+ /* 0000042E arpl [bx+di+0xa],di */ 0x63, 0x79, 0x0A, -+ /* 00000431 add [di+0x6e],dl */ 0x00, 0x55, 0x6E, -+ /* 00000434 imul bp,[bx+0x77],byte +0x6e */ 0x6B, 0x6F, 0x77, 0x6E, -+ /* 00000438 and [di+0x6f],cl */ 0x20, 0x4D, 0x6F, -+ /* 0000043B or al,[gs:bx+si] */ 0x64, 0x65, 0x0A, 0x00, -+ /* 0000043F inc di */ 0x47, -+ /* 00000440 gs jz 0x493 */ 0x65, 0x74, 0x50, -+ /* 00000443 insw */ 0x6D, -+ /* 00000444 inc bx */ 0x43, -+ /* 00000445 popaw */ 0x61, -+ /* 00000446 jo 0x4a9 */ 0x70, 0x61, -+ /* 00000448 bound bp,[bx+di+0x6c] */ 0x62, 0x69, 0x6C, -+ /* 0000044B imul si,[si+0x69],word 0x7365 */ 0x69, 0x74, 0x69, 0x65, 0x73, -+ /* 00000450 or al,[bx+si] */ 0x0A, 0x00, -+ /* 00000452 push dx */ 0x52, -+ /* 00000453 gs popaw */ 0x65, 0x61, -+ /* 00000455 fs inc bp */ 0x64, 0x45, -+ /* 00000457 fs */ 0x64, -+ /* 00000458 db 0x69 */ 0x69, -+ /* 00000459 or al,[fs:bx+si] */ 0x64, 0x0A, 0x00, - }; - #endif diff --git a/SPECS-EXTENDED/edk2/0007-MdeModulePkg-TerminalDxe-add-other-text-resolutions.patch b/SPECS-EXTENDED/edk2/0007-MdeModulePkg-TerminalDxe-add-other-text-resolutions.patch deleted file mode 100644 index b40f0a583ca..00000000000 --- a/SPECS-EXTENDED/edk2/0007-MdeModulePkg-TerminalDxe-add-other-text-resolutions.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 3b413c99f3a5087710f4932b4ba61c2646ae84b9 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 25 Feb 2014 18:40:35 +0100 -Subject: [PATCH] MdeModulePkg: TerminalDxe: add other text resolutions - -When the console output is multiplexed to several devices by -ConSplitterDxe, then ConSplitterDxe builds an intersection of text modes -supported by all console output devices. - -Two notable output devices are provided by: -(1) MdeModulePkg/Universal/Console/GraphicsConsoleDxe, -(2) MdeModulePkg/Universal/Console/TerminalDxe. - -GraphicsConsoleDxe supports four modes at most -- see -InitializeGraphicsConsoleTextMode() and "mGraphicsConsoleModeData": - -(1a) 80x25 (required by the UEFI spec as mode 0), -(1b) 80x50 (not necessarily supported, but if it is, then the UEFI spec - requires the driver to provide it as mode 1), -(1c) 100x31 (corresponding to graphics resolution 800x600, which the UEFI - spec requires from all plug-in graphics devices), -(1d) "full screen" resolution, derived form the underlying GOP's - horizontal and vertical resolutions with division by EFI_GLYPH_WIDTH - (8) and EFI_GLYPH_HEIGHT (19), respectively. - -The automatic "full screen resolution" makes GraphicsConsoleDxe's -character console very flexible. However, TerminalDxe (which runs on -serial ports) only provides the following fixed resolutions -- see -InitializeTerminalConsoleTextMode() and "mTerminalConsoleModeData": - -(2a) 80x25 (required by the UEFI spec as mode 0), -(2b) 80x50 (since the character resolution of a serial device cannot be - interrogated easily, this is added unconditionally as mode 1), -(2c) 100x31 (since the character resolution of a serial device cannot be - interrogated easily, this is added unconditionally as mode 2). - -When ConSplitterDxe combines (1) and (2), multiplexing console output to -both video output and serial terminal, the list of commonly supported text -modes (ie. the "intersection") comprises: - -(3a) 80x25, unconditionally, from (1a) and (2a), -(3b) 80x50, if the graphics console provides at least 640x950 pixel - resolution, from (1b) and (2b) -(3c) 100x31, if the graphics device is a plug-in one (because in that case - 800x600 is a mandated pixel resolution), from (1c) and (2c). - -Unfortunately, the "full screen resolution" (1d) of the GOP-based text -console is not available in general. - -Mitigate this problem by extending "mTerminalConsoleModeData" with a -handful of text resolutions that are derived from widespread maximal pixel -resolutions. This way TerminalDxe won't cause ConSplitterDxe to filter out -the most frequent (1d) values from the intersection, and eg. the MODE -command in the UEFI shell will offer the "best" (ie. full screen) -resolution too. - -Upstream status: three calendar months (with on-and-off discussion and -patches) have not been enough to find a solution to this problem that -would please all stakeholders. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- adapt commit 0bc77c63de03 (code and commit message) to upstream commit - 390b95a49c14 ("MdeModulePkg/TerminalDxe: Refine - InitializeTerminalConsoleTextMode", 2017-01-10). - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Signed-off-by: Laszlo Ersek -(cherry picked from commit 99dc3720ac86059f60156197328cc433603c536e) -Signed-off-by: Paolo Bonzini ---- - .../Universal/Console/TerminalDxe/Terminal.c | 41 +++++++++++++++++-- - 1 file changed, 38 insertions(+), 3 deletions(-) - -diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c -index a98b690c8b..ded5513c74 100644 ---- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c -+++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c -@@ -115,9 +115,44 @@ TERMINAL_DEV mTerminalDevTemplate = { - }; - - TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] = { -- {80, 25}, -- {80, 50}, -- {100, 31}, -+ { 80, 25 }, // from graphics resolution 640 x 480 -+ { 80, 50 }, // from graphics resolution 640 x 960 -+ { 100, 25 }, // from graphics resolution 800 x 480 -+ { 100, 31 }, // from graphics resolution 800 x 600 -+ { 104, 32 }, // from graphics resolution 832 x 624 -+ { 120, 33 }, // from graphics resolution 960 x 640 -+ { 128, 31 }, // from graphics resolution 1024 x 600 -+ { 128, 40 }, // from graphics resolution 1024 x 768 -+ { 144, 45 }, // from graphics resolution 1152 x 864 -+ { 144, 45 }, // from graphics resolution 1152 x 870 -+ { 160, 37 }, // from graphics resolution 1280 x 720 -+ { 160, 40 }, // from graphics resolution 1280 x 760 -+ { 160, 40 }, // from graphics resolution 1280 x 768 -+ { 160, 42 }, // from graphics resolution 1280 x 800 -+ { 160, 50 }, // from graphics resolution 1280 x 960 -+ { 160, 53 }, // from graphics resolution 1280 x 1024 -+ { 170, 40 }, // from graphics resolution 1360 x 768 -+ { 170, 40 }, // from graphics resolution 1366 x 768 -+ { 175, 55 }, // from graphics resolution 1400 x 1050 -+ { 180, 47 }, // from graphics resolution 1440 x 900 -+ { 200, 47 }, // from graphics resolution 1600 x 900 -+ { 200, 63 }, // from graphics resolution 1600 x 1200 -+ { 210, 55 }, // from graphics resolution 1680 x 1050 -+ { 240, 56 }, // from graphics resolution 1920 x 1080 -+ { 240, 63 }, // from graphics resolution 1920 x 1200 -+ { 240, 75 }, // from graphics resolution 1920 x 1440 -+ { 250, 105 }, // from graphics resolution 2000 x 2000 -+ { 256, 80 }, // from graphics resolution 2048 x 1536 -+ { 256, 107 }, // from graphics resolution 2048 x 2048 -+ { 320, 75 }, // from graphics resolution 2560 x 1440 -+ { 320, 84 }, // from graphics resolution 2560 x 1600 -+ { 320, 107 }, // from graphics resolution 2560 x 2048 -+ { 350, 110 }, // from graphics resolution 2800 x 2100 -+ { 400, 126 }, // from graphics resolution 3200 x 2400 -+ { 480, 113 }, // from graphics resolution 3840 x 2160 -+ { 512, 113 }, // from graphics resolution 4096 x 2160 -+ { 960, 227 }, // from graphics resolution 7680 x 4320 -+ { 1024, 227 }, // from graphics resolution 8192 x 4320 - // - // New modes can be added here. - // diff --git a/SPECS-EXTENDED/edk2/0008-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch b/SPECS-EXTENDED/edk2/0008-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch deleted file mode 100644 index 78bf51178b3..00000000000 --- a/SPECS-EXTENDED/edk2/0008-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 50b53194f7caea602e04df663358617c280f299c Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 25 Feb 2014 22:40:01 +0100 -Subject: [PATCH] MdeModulePkg: TerminalDxe: set xterm resolution on mode - change (RH only) - -The - - CSI Ps ; Ps ; Ps t - -escape sequence serves for window manipulation. We can use the - - CSI 8 ; ; t - -sequence to adapt eg. the xterm window size to the selected console mode. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- refresh commit 519b9751573e against various context changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- Refresh downstream-only commit 2909e025db68 against "MdeModulePkg.dec" - context change from upstream commits e043f7895b83 ("MdeModulePkg: Add - PCD PcdPteMemoryEncryptionAddressOrMask", 2017-02-27) and 76081dfcc5b2 - ("MdeModulePkg: Add PROMPT&HELP string of pcd to UNI file", 2017-03-03). - -Reference: -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 2909e025db6878723b49644a8a0cf160d07e6444) -Signed-off-by: Paolo Bonzini ---- - MdeModulePkg/MdeModulePkg.dec | 4 +++ - .../Console/TerminalDxe/TerminalConOut.c | 30 +++++++++++++++++++ - .../Console/TerminalDxe/TerminalDxe.inf | 2 ++ - 3 files changed, 36 insertions(+) - -diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec -index cb30a79758..e562bed57e 100644 ---- a/MdeModulePkg/MdeModulePkg.dec -+++ b/MdeModulePkg/MdeModulePkg.dec -@@ -2013,6 +2013,10 @@ - # @Prompt Enable StatusCode via memory. - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE|BOOLEAN|0x00010023 - -+ ## Controls whether TerminalDxe outputs an XTerm resize sequence on terminal -+ # mode change. -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE|BOOLEAN|0x00010080 -+ - [PcdsPatchableInModule] - ## Specify memory size with page number for PEI code when - # Loading Module at Fixed Address feature is enabled. -diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -index aae470e956..26156857aa 100644 ---- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -@@ -7,6 +7,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - - **/ - -+#include -+ - #include "Terminal.h" - - // -@@ -80,6 +82,16 @@ CHAR16 mSetCursorPositionString[] = { ESC, '[', '0', '0', ';', '0', '0', 'H', 0 - CHAR16 mCursorForwardString[] = { ESC, '[', '0', '0', 'C', 0 }; - CHAR16 mCursorBackwardString[] = { ESC, '[', '0', '0', 'D', 0 }; - -+// -+// Note that this is an ASCII format string, taking two INT32 arguments: -+// rows, columns. -+// -+// A %d (INT32) format specification can expand to at most 11 characters. -+// -+CHAR8 mResizeTextAreaFormatString[] = "\x1B[8;%d;%dt"; -+#define RESIZE_SEQ_SIZE (sizeof mResizeTextAreaFormatString + 2 * (11 - 2)) -+ -+ - // - // Body of the ConOut functions - // -@@ -506,6 +518,24 @@ TerminalConOutSetMode ( - return EFI_DEVICE_ERROR; - } - -+ if (PcdGetBool (PcdResizeXterm)) { -+ CHAR16 ResizeSequence[RESIZE_SEQ_SIZE]; -+ -+ UnicodeSPrintAsciiFormat ( -+ ResizeSequence, -+ sizeof ResizeSequence, -+ mResizeTextAreaFormatString, -+ (INT32) TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows, -+ (INT32) TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns -+ ); -+ TerminalDevice->OutputEscChar = TRUE; -+ Status = This->OutputString (This, ResizeSequence); -+ TerminalDevice->OutputEscChar = FALSE; -+ if (EFI_ERROR (Status)) { -+ return EFI_DEVICE_ERROR; -+ } -+ } -+ - This->Mode->Mode = (INT32) ModeNumber; - - Status = This->ClearScreen (This); -diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -index b2a8aeba85..eff6253465 100644 ---- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -@@ -55,6 +55,7 @@ - DebugLib - PcdLib - BaseLib -+ PrintLib - - [Guids] - ## SOMETIMES_PRODUCES ## Variable:L"ConInDev" -@@ -87,6 +88,7 @@ - [Pcd] - gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType ## SOMETIMES_CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## CONSUMES - - # [Event] - # # Relative timer event set by UnicodeToEfiKey(), used to be one 2 seconds input timeout. diff --git a/SPECS-EXTENDED/edk2/0009-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch b/SPECS-EXTENDED/edk2/0009-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch deleted file mode 100644 index 591a4e391ad..00000000000 --- a/SPECS-EXTENDED/edk2/0009-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 0616c1d69ef552bd35700992fae37263ddd8c4ce Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 14 Oct 2015 15:59:06 +0200 -Subject: [PATCH] OvmfPkg: take PcdResizeXterm from the QEMU command line (RH - only) - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- refresh downstream-only commit 8abc2a6ddad2 against context differences - in the DSC files from upstream commit 5e167d7e784c - ("OvmfPkg/PlatformPei: don't allocate reserved mem varstore if - SMM_REQUIRE", 2017-03-12). - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 6fa0c4d67c0bb8bde2ddd6db41c19eb0c40b2721) -(cherry picked from commit 8abc2a6ddad25af7e88dc0cf57d55dfb75fbf92d) -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/OvmfPkgIa32.dsc | 1 + - OvmfPkg/OvmfPkgIa32X64.dsc | 1 + - OvmfPkg/OvmfPkgX64.dsc | 1 + - OvmfPkg/PlatformPei/Platform.c | 1 + - OvmfPkg/PlatformPei/PlatformPei.inf | 1 + - 5 files changed, 5 insertions(+) - -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 2886c10b1b..b974740e2f 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -577,6 +577,7 @@ - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 - !endif -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800 - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 5a9e9a707a..65a8c6764c 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -586,6 +586,7 @@ - gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800 - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable|FALSE - gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId|0 - gUefiOvmfPkgTokenSpaceGuid.PcdPciIoBase|0x0 -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 70c2c3e3b9..72bc289f26 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -582,6 +582,7 @@ - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 - !endif - gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800 - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 - gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable|FALSE -diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c -index 96468701e3..14efbabe39 100644 ---- a/OvmfPkg/PlatformPei/Platform.c -+++ b/OvmfPkg/PlatformPei/Platform.c -@@ -748,6 +748,7 @@ InitializePlatform ( - MemTypeInfoInitialization (); - MemMapInitialization (); - NoexecDxeInitialization (); -+ UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdResizeXterm); - } - - InstallClearCacheCallback (); -diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/PlatformPei.inf -index c53be2f492..e5744ed818 100644 ---- a/OvmfPkg/PlatformPei/PlatformPei.inf -+++ b/OvmfPkg/PlatformPei/PlatformPei.inf -@@ -97,6 +97,7 @@ - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved - gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode - gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable - gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack diff --git a/SPECS-EXTENDED/edk2/0011-OvmfPkg-allow-exclusion-of-the-shell-from-the-firmwa.patch b/SPECS-EXTENDED/edk2/0011-OvmfPkg-allow-exclusion-of-the-shell-from-the-firmwa.patch deleted file mode 100644 index 21e1f26088c..00000000000 --- a/SPECS-EXTENDED/edk2/0011-OvmfPkg-allow-exclusion-of-the-shell-from-the-firmwa.patch +++ /dev/null @@ -1,112 +0,0 @@ -From c1d277217b6d4115277cac4de26943fde3b7f170 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 4 Nov 2014 23:02:53 +0100 -Subject: [PATCH] OvmfPkg: allow exclusion of the shell from the firmware image - -When '-D EXCLUDE_SHELL_FROM_FD' is passed to 'build', exclude the shell -binary from the firmware image. - -Peter Jones advised us that firmware vendors for physical systems disable -the memory-mapped, firmware image-contained UEFI shell in -SecureBoot-enabled builds. The reason being that the memory-mapped shell -can always load, it may have direct access to various hardware in the -system, and it can run UEFI shell scripts (which cannot be signed at all). - -Intended use of the new build option: - -- In-tree builds: don't pass '-D EXCLUDE_SHELL_FROM_FD'. The resultant - firmware image will contain a shell binary, independently of SecureBoot - enablement, which is flexible for interactive development. (Ie. no - change for in-tree builds.) - -- RPM builds: pass both '-D SECURE_BOOT_ENABLE' and - '-D EXCLUDE_SHELL_FROM_FD'. The resultant RPM will provide: - - - OVMF_CODE.fd: SecureBoot-enabled firmware, without builtin UEFI shell, - - - OVMF_VARS.fd: variable store template matching OVMF_CODE.fd, - - - UefiShell.iso: a bootable ISO image with the shell on it as default - boot loader. The shell binary will load when SecureBoot is turned off, - and won't load when SecureBoot is turned on (because it is not - signed). - - UefiShell.iso is the reason we're not excluding the shell from the DSC - files as well, only the FDF files -- when '-D EXCLUDE_SHELL_FROM_FD' - is specified, the shell binary needs to be built the same, only it - will be included in UefiShell.iso. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Signed-off-by: Laszlo Ersek -(cherry picked from commit 9c391def70366cabae08e6008814299c3372fafd) -(cherry picked from commit d9dd9ee42937b2611fe37183cc9ec7f62d946933) -Signed-off-by: Paolo Bonzini ---- - OvmfPkg/OvmfPkgIa32.fdf | 2 ++ - OvmfPkg/OvmfPkgIa32X64.fdf | 3 +++ - OvmfPkg/OvmfPkgX64.fdf | 3 +++ - 3 files changed, 8 insertions(+) - -diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf -index 6e1e7f5f44..07c1cdbe81 100644 ---- a/OvmfPkg/OvmfPkgIa32.fdf -+++ b/OvmfPkg/OvmfPkgIa32.fdf -@@ -291,11 +291,13 @@ INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResour - INF FatPkg/EnhancedFatDxe/Fat.inf - INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf - -+!ifndef $(EXCLUDE_SHELL_FROM_FD) - !if $(TOOL_CHAIN_TAG) != "XCODE5" - INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf - INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf -+!endif - - !if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) - INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf -index 1fab3d5014..b1560d6218 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.fdf -+++ b/OvmfPkg/OvmfPkgIa32X64.fdf -@@ -292,11 +292,14 @@ INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResour - INF FatPkg/EnhancedFatDxe/Fat.inf - INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf - -+!ifndef $(EXCLUDE_SHELL_FROM_FD) - !if $(TOOL_CHAIN_TAG) != "XCODE5" - INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf - INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf -+!endif -+ - - !if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) - INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf -diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf -index 6dc48977a0..34cd97aac4 100644 ---- a/OvmfPkg/OvmfPkgX64.fdf -+++ b/OvmfPkg/OvmfPkgX64.fdf -@@ -301,11 +301,14 @@ INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResour - INF FatPkg/EnhancedFatDxe/Fat.inf - INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf - -+!ifndef $(EXCLUDE_SHELL_FROM_FD) - !if $(TOOL_CHAIN_TAG) != "XCODE5" - INF ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf - INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.inf - !endif - INF ShellPkg/Application/Shell/Shell.inf -+!endif -+ - - !if ($(SECURE_BOOT_ENABLE) == TRUE) || ($(NETWORK_IP6_ENABLE) == TRUE) || ($(TLS_ENABLE) == TRUE) - INF MdeModulePkg/Logo/LogoOpenSSLDxe.inf diff --git a/SPECS-EXTENDED/edk2/0012-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch b/SPECS-EXTENDED/edk2/0012-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch deleted file mode 100644 index a37d5ac5f65..00000000000 --- a/SPECS-EXTENDED/edk2/0012-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch +++ /dev/null @@ -1,55 +0,0 @@ -From cdd42dea1b59285def15d38feaf2093f9f1688dd Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 14 Oct 2015 13:49:43 +0200 -Subject: [PATCH] ArmPlatformPkg: introduce fixed PCD for early hello message - (RH only) - -Drew has proposed that ARM|AARCH64 platform firmware (especially virtual -machine firmware) print a reasonably early, simple hello message to the -serial port, regardless of debug mask settings. This should inform -interactive users, and provide some rough help in localizing boot -problems, even with restrictive debug masks. - -If a platform doesn't want this feature, it should stick with the default -empty string. - -RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1270279 -Downstream only: -. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Suggested-by: Drew Jones -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 7ce97b06421434c82095f01a1753a8c9c546cc30) -(cherry picked from commit 20b1f1cbd0590aa71c6d99d35e23cf08e0707750) -Signed-off-by: Paolo Bonzini ---- - ArmPlatformPkg/ArmPlatformPkg.dec | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/ArmPlatformPkg/ArmPlatformPkg.dec b/ArmPlatformPkg/ArmPlatformPkg.dec -index 696d636aac..1553e1ae92 100644 ---- a/ArmPlatformPkg/ArmPlatformPkg.dec -+++ b/ArmPlatformPkg/ArmPlatformPkg.dec -@@ -104,6 +104,13 @@ - ## If set, this will swap settings for HDLCD RED_SELECT and BLUE_SELECT registers - gArmPlatformTokenSpaceGuid.PcdArmHdLcdSwapBlueRedSelect|FALSE|BOOLEAN|0x00000045 - -+ # -+ # Early hello message (ASCII string), printed to the serial port. -+ # If set to the empty string, nothing is printed. -+ # Otherwise, a trailing CRLF should be specified explicitly. -+ # -+ gArmPlatformTokenSpaceGuid.PcdEarlyHelloMessage|""|VOID*|0x00000100 -+ - [PcdsFixedAtBuild.common,PcdsDynamic.common] - ## PL031 RealTimeClock - gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x0|UINT32|0x00000024 diff --git a/SPECS-EXTENDED/edk2/0013-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch b/SPECS-EXTENDED/edk2/0013-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch deleted file mode 100644 index b5ecd438b56..00000000000 --- a/SPECS-EXTENDED/edk2/0013-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch +++ /dev/null @@ -1,103 +0,0 @@ -From f9b6876cb7e14d4e863cc33c8999ece2cf399ff6 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 14 Oct 2015 13:59:20 +0200 -Subject: [PATCH] ArmPlatformPkg: PrePeiCore: write early hello message to the - serial port (RH) - -The FixedPcdGetSize() macro expands to an integer constant, therefore an -optimizing compiler can eliminate the new code, if the platform DSC -doesn't override the empty string (size=1) default of -PcdEarlyHelloMessage. - -RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1270279 -Downstream only: -. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit b16c4c505ce0e27305235533eac9236aa66f132e) -(cherry picked from commit 742e5bf6d5ce5a1e73879d6e5c0dd00feda7a9ac) -Signed-off-by: Paolo Bonzini ---- - ArmPlatformPkg/PrePeiCore/MainMPCore.c | 5 +++++ - ArmPlatformPkg/PrePeiCore/MainUniCore.c | 5 +++++ - ArmPlatformPkg/PrePeiCore/PrePeiCore.h | 1 + - ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf | 2 ++ - ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf | 2 ++ - 5 files changed, 15 insertions(+) - -diff --git a/ArmPlatformPkg/PrePeiCore/MainMPCore.c b/ArmPlatformPkg/PrePeiCore/MainMPCore.c -index d379ad8b7a..ff1672f94d 100644 ---- a/ArmPlatformPkg/PrePeiCore/MainMPCore.c -+++ b/ArmPlatformPkg/PrePeiCore/MainMPCore.c -@@ -111,6 +111,11 @@ PrimaryMain ( - UINTN TemporaryRamBase; - UINTN TemporaryRamSize; - -+ if (FixedPcdGetSize (PcdEarlyHelloMessage) > 1) { -+ SerialPortWrite (FixedPcdGetPtr (PcdEarlyHelloMessage), -+ FixedPcdGetSize (PcdEarlyHelloMessage) - 1); -+ } -+ - CreatePpiList (&PpiListSize, &PpiList); - - // Enable the GIC Distributor -diff --git a/ArmPlatformPkg/PrePeiCore/MainUniCore.c b/ArmPlatformPkg/PrePeiCore/MainUniCore.c -index 1500d2bd51..5b0790beac 100644 ---- a/ArmPlatformPkg/PrePeiCore/MainUniCore.c -+++ b/ArmPlatformPkg/PrePeiCore/MainUniCore.c -@@ -29,6 +29,11 @@ PrimaryMain ( - UINTN TemporaryRamBase; - UINTN TemporaryRamSize; - -+ if (FixedPcdGetSize (PcdEarlyHelloMessage) > 1) { -+ SerialPortWrite (FixedPcdGetPtr (PcdEarlyHelloMessage), -+ FixedPcdGetSize (PcdEarlyHelloMessage) - 1); -+ } -+ - CreatePpiList (&PpiListSize, &PpiList); - - // Adjust the Temporary Ram as the new Ppi List (Common + Platform Ppi Lists) is created at -diff --git a/ArmPlatformPkg/PrePeiCore/PrePeiCore.h b/ArmPlatformPkg/PrePeiCore/PrePeiCore.h -index 7140c7f5b5..1d69a2b468 100644 ---- a/ArmPlatformPkg/PrePeiCore/PrePeiCore.h -+++ b/ArmPlatformPkg/PrePeiCore/PrePeiCore.h -@@ -15,6 +15,7 @@ - #include - #include - #include -+#include - - #include - #include -diff --git a/ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf b/ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf -index fb01dd1a11..a6681c1032 100644 ---- a/ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf -+++ b/ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf -@@ -69,6 +69,8 @@ - gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize - gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize - -+ gArmPlatformTokenSpaceGuid.PcdEarlyHelloMessage -+ - gArmTokenSpaceGuid.PcdGicDistributorBase - gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase - gArmTokenSpaceGuid.PcdGicSgiIntId -diff --git a/ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf b/ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf -index e9eb092d3a..a02ff39b7a 100644 ---- a/ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf -+++ b/ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf -@@ -68,3 +68,5 @@ - gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize - - gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack -+ -+ gArmPlatformTokenSpaceGuid.PcdEarlyHelloMessage diff --git a/SPECS-EXTENDED/edk2/0014-ArmVirtPkg-set-early-hello-message-RH-only.patch b/SPECS-EXTENDED/edk2/0014-ArmVirtPkg-set-early-hello-message-RH-only.patch deleted file mode 100644 index e9cafd2e62b..00000000000 --- a/SPECS-EXTENDED/edk2/0014-ArmVirtPkg-set-early-hello-message-RH-only.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 34a88714097996e34811d27b32e77ff71ca763a6 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 14 Oct 2015 14:07:17 +0200 -Subject: [PATCH] ArmVirtPkg: set early hello message (RH only) - -Print a friendly banner on QEMU, regardless of debug mask settings. - -RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1270279 -Downstream only: -. - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- no changes - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 5d4a15b9019728b2d96322bc679099da49916925) -(cherry picked from commit 179df76dbb0d199bd905236e98775b4059c6502a) -Signed-off-by: Paolo Bonzini ---- - ArmVirtPkg/ArmVirtQemu.dsc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc -index 24c6ea2e64..ad6af7f1c6 100644 ---- a/ArmVirtPkg/ArmVirtQemu.dsc -+++ b/ArmVirtPkg/ArmVirtQemu.dsc -@@ -125,6 +125,7 @@ - gArmVirtTokenSpaceGuid.PcdTpm2SupportEnabled|$(TPM2_ENABLE) - - [PcdsFixedAtBuild.common] -+ gArmPlatformTokenSpaceGuid.PcdEarlyHelloMessage|"UEFI firmware starting.\r\n" - !if $(ARCH) == AARCH64 - gArmTokenSpaceGuid.PcdVFPEnabled|1 - !endif diff --git a/SPECS-EXTENDED/edk2/0015-Tweak-the-tools_def-to-support-cross-compiling.patch b/SPECS-EXTENDED/edk2/0015-Tweak-the-tools_def-to-support-cross-compiling.patch deleted file mode 100644 index b36f1e481ff..00000000000 --- a/SPECS-EXTENDED/edk2/0015-Tweak-the-tools_def-to-support-cross-compiling.patch +++ /dev/null @@ -1,75 +0,0 @@ -From d8b75ad1013b21c089a1af579b510f32c49c5b14 Mon Sep 17 00:00:00 2001 -From: Paolo Bonzini -Date: Thu, 16 Aug 2018 15:45:47 -0400 -Subject: [PATCH] Tweak the tools_def to support cross-compiling. - -These files are meant for customization, so this is not upstream. - -Signed-off-by: Paolo Bonzini -Signed-off-by: Cole Robinson ---- - BaseTools/Conf/tools_def.template | 44 +++++++++++++++---------------- - 1 file changed, 22 insertions(+), 22 deletions(-) - -diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template -index 933b3160fd..e62ccc322d 100755 ---- a/BaseTools/Conf/tools_def.template -+++ b/BaseTools/Conf/tools_def.template -@@ -2350,17 +2350,17 @@ RELEASE_GCC49_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20 - ################## - # GCC5 IA32 definitions - ################## --*_GCC5_IA32_OBJCOPY_PATH = DEF(GCC5_IA32_PREFIX)objcopy --*_GCC5_IA32_CC_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_SLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc-ar --*_GCC5_IA32_DLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_ASLDLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_ASM_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_PP_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_VFRPP_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_ASLCC_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_ASLPP_PATH = DEF(GCC5_IA32_PREFIX)gcc --*_GCC5_IA32_RC_PATH = DEF(GCC5_IA32_PREFIX)objcopy -+*_GCC5_IA32_OBJCOPY_PATH = ENV(GCC5_IA32_PREFIX)objcopy -+*_GCC5_IA32_CC_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_SLINK_PATH = ENV(GCC5_IA32_PREFIX)gcc-ar -+*_GCC5_IA32_DLINK_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_ASLDLINK_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_ASM_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_PP_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_VFRPP_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_ASLCC_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_ASLPP_PATH = ENV(GCC5_IA32_PREFIX)gcc -+*_GCC5_IA32_RC_PATH = ENV(GCC5_IA32_PREFIX)objcopy - - *_GCC5_IA32_ASLCC_FLAGS = DEF(GCC5_ASLCC_FLAGS) -m32 - *_GCC5_IA32_ASLDLINK_FLAGS = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_i386 -no-pie -@@ -2382,17 +2382,17 @@ RELEASE_GCC5_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto -Os -Wl, - ################## - # GCC5 X64 definitions - ################## --*_GCC5_X64_OBJCOPY_PATH = DEF(GCC5_X64_PREFIX)objcopy --*_GCC5_X64_CC_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_SLINK_PATH = DEF(GCC5_X64_PREFIX)gcc-ar --*_GCC5_X64_DLINK_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_ASLDLINK_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_ASM_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_PP_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_VFRPP_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_ASLCC_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_ASLPP_PATH = DEF(GCC5_X64_PREFIX)gcc --*_GCC5_X64_RC_PATH = DEF(GCC5_X64_PREFIX)objcopy -+*_GCC5_X64_OBJCOPY_PATH = ENV(GCC5_X64_PREFIX)objcopy -+*_GCC5_X64_CC_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_SLINK_PATH = ENV(GCC5_X64_PREFIX)gcc-ar -+*_GCC5_X64_DLINK_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_ASLDLINK_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_ASM_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_PP_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_VFRPP_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_ASLCC_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_ASLPP_PATH = ENV(GCC5_X64_PREFIX)gcc -+*_GCC5_X64_RC_PATH = ENV(GCC5_X64_PREFIX)objcopy - - *_GCC5_X64_ASLCC_FLAGS = DEF(GCC5_ASLCC_FLAGS) -m64 - *_GCC5_X64_ASLDLINK_FLAGS = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_x86_64 diff --git a/SPECS-EXTENDED/edk2/RedHatSecureBootPkKek1.pem b/SPECS-EXTENDED/edk2/RedHatSecureBootPkKek1.pem deleted file mode 100644 index d3023628837..00000000000 --- a/SPECS-EXTENDED/edk2/RedHatSecureBootPkKek1.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIJAP71iOjzlsDxMA0GCSqGSIb3DQEBCwUAMFExKzApBgNV -BAMTIlJlZCBIYXQgU2VjdXJlIEJvb3QgKFBLL0tFSyBrZXkgMSkxIjAgBgkqhkiG -9w0BCQEWE3NlY2FsZXJ0QHJlZGhhdC5jb20wHhcNMTQxMDMxMTExNTM3WhcNMzcx -MDI1MTExNTM3WjBRMSswKQYDVQQDEyJSZWQgSGF0IFNlY3VyZSBCb290IChQSy9L -RUsga2V5IDEpMSIwIAYJKoZIhvcNAQkBFhNzZWNhbGVydEByZWRoYXQuY29tMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkB+Ee42865cmgm2Iq4rJjGhw -+d9LB7I3gwsCyGdoMJ7j8PCZSrhZV8ZB9jiL/mZMSek3N5IumAEeWxRQ5qiNJQ31 -huarMMtAFuqNixaGcEM38s7Akd9xFI6ZDom2TG0kHozkL08l0LoG+MboGRh2cx2B -bajYBc86yHsoyDajFg0pjJmaaNyrwE2Nv1q7K6k5SwSXHPk2u8U6hgSur9SCe+Cr -3kkFaPz2rmgabJBNVxk8ZGYD9sdSm/eUz5NqoWjJqs+Za7yqXgjnORz3+A+6Bn7x -y+h23f4i2q06Xls06rPJ4E0EKX64YLkF77XZF1hWFmC5MDLwNkrD8nmNEkBw8wID -AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy -YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUPOlg4/8ZoQp7o0L0jUIutNWccuww -HwYDVR0jBBgwFoAUPOlg4/8ZoQp7o0L0jUIutNWccuwwDQYJKoZIhvcNAQELBQAD -ggEBAFxNkoi0gl8drYsR7N8GpnqlK583VQyNbgUArbcMQYlpz9ZlBptReNKtx7+c -3AVzf+ceORO06rYwfUB1q5xDC9+wwhu/MOD0/sDbYiGY9sWv3jtPSQrmHvmGsD8N -1tRGN9tUdF7/EcJgxnBYxRxv7LLYbm/DvDOHOKTzRGScNDsolCZ4J58WF+g7aQol -qXM2fp43XOzoP9uR+RKzPc7n3RXDrowFIGGbld6br/qxXBzll+fDNBGF9YonJqRw -NuwM9oM9kPc28/nzFdSQYr5TtK/TSa/v9HPoe3bkRCo3uoGkmQw6MSRxoOTktxrL -R+SqIs/vdWGA40O3SFdzET14m2k= ------END CERTIFICATE----- diff --git a/SPECS-EXTENDED/edk2/build-iso.sh b/SPECS-EXTENDED/edk2/build-iso.sh deleted file mode 100644 index 413c1194371..00000000000 --- a/SPECS-EXTENDED/edk2/build-iso.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -# args -dir="$1" - -# cfg -shell="$dir/Shell.efi" -enroll="$dir/EnrollDefaultKeys.efi" -root="$dir/image" -vfat="$dir/shell.img" -iso="$dir/UefiShell.iso" - -# create non-partitioned (1.44 MB floppy disk) FAT image -mkdir "$root" -mkdir "$root"/efi -mkdir "$root"/efi/boot -cp "$shell" "$root"/efi/boot/bootx64.efi -cp "$enroll" "$root" -qemu-img convert --image-opts \ - driver=vvfat,floppy=on,fat-type=12,label=UEFI_SHELL,dir="$root/" \ - $vfat - -# build ISO with FAT image file as El Torito EFI boot image -genisoimage -input-charset ASCII -J -rational-rock \ - -efi-boot "${vfat##*/}" -no-emul-boot -o "$iso" -- "$vfat" -rm -rf "$root/" "$vfat" diff --git a/SPECS-EXTENDED/edk2/edk2.signatures.json b/SPECS-EXTENDED/edk2/edk2.signatures.json deleted file mode 100644 index 4022793ad81..00000000000 --- a/SPECS-EXTENDED/edk2/edk2.signatures.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "Signatures": { - "40-edk2-ovmf-ia32-sb-enrolled.json": "564d0814fd5a4c175b7d3a47e4151f15924ce8cdb00001a68af16d697fe81116", - "40-edk2-ovmf-x64-sb-enrolled.json": "fe041ffc4691dd330439eb97328dd481423aa69179a7623596fed584bd77b3e8", - "50-edk2-ovmf-ia32-sb.json": "572ba7a5452f02e092534a70b19fbefc4535870c00751aad8df79e7d7d54f6b5", - "50-edk2-ovmf-x64-sb.json": "188cee7edbc433a5832f01cb77b53f315d4620f4ec169e90ed8ec9e47f171b22", - "60-edk2-ovmf-ia32.json": "ac4674f60b72e2b63feb0292ce76c1fc33839690376c27bd6f5c16aec9e11efd", - "60-edk2-ovmf-x64.json": "053ec6b6e262245b4ef5cd129806f63300740b411a9514cfc8d024732e14a2df", - "70-edk2-aarch64-verbose.json": "d223ff0710f00e36f59a8cc0218265658cb4c75d8211ee1c9a70d7d9612ae23a", - "70-edk2-arm-verbose.json": "9b09b36c9079877c0e9ad84dffb5e0d8c33a9aedf0486f48d395ad885e555302", - "RedHatSecureBootPkKek1.pem": "3af70940c9084ba603c3810b3e7f279268bf1ff7312c41fd04f4a68b495c996b", - "build-iso.sh": "cbe24d6d5dd79f9d725789f49230e6704e1e572073cc81f004a77b0acff0e37b", - "edk2-stable202008.tar.gz": "b399cd11c5901035d5f0e920cff3fa67ce7c1277bddae9ec73ef4e455c11d332", - "hobble-openssl": "ab168bd8bf578f7361524f9a12eecbbaf41fd7e2c852a0158aafd3bce9cac569", - "openssl-1.1.1g-hobbled.tar.xz": "2408ab62a3474eea4d87a587ae8d6663af66551ac4a3da6993723cdfe0c314fe", - "openssl-patch-to-tarball.sh": "2f56e002d51f424bde8751b2d5332a0553738e63b3beae3afbcafe7bbba95b62", - "ovmf-whitepaper-c770f8c.txt": "842518adadaa837914dbb13a6628002fb7f7acca107c6d6f41815b399dc9f8b8", - "qemu-ovmf-secureboot-20190521-gitf158f12.tar.xz": "5d4fa7cb8a8068466bdbed56f5bb78fd2a1e7216f0ea653cd1b203fdf4b6258a", - "softfloat-20180726-gitb64af41.tar.xz": "c7f2172357ca3022621b9464fd92bf2b462256bda3e019bf9a669fa6b5aeea91", - "update-tarball.sh": "3e318fe4f7cd2ff4842a0e5a2e81863d74dd2cfa8a76d5ec38850aef91d2954a" - } -} \ No newline at end of file diff --git a/SPECS-EXTENDED/edk2/edk2.spec b/SPECS-EXTENDED/edk2/edk2.spec deleted file mode 100644 index 2268cfca39e..00000000000 --- a/SPECS-EXTENDED/edk2/edk2.spec +++ /dev/null @@ -1,850 +0,0 @@ -# RPM doesn't detect that code in /usr/share is python3, this forces it -# https://fedoraproject.org/wiki/Changes/Avoid_usr_bin_python_in_RPM_Build#Python_bytecompilation -%global __python python3 -%global edk2_stable_date 202008 -%global edk2_stable_str edk2-stable%{edk2_stable_date} -%global openssl_version 1.1.1g -%global qosb_version 20190521-gitf158f12 -%global softfloat_version 20180726-gitb64af41 - -%define qosb_testing 0 -%define cross 0 - -%ifarch %{ix86} x86_64 -%define build_ovmf_ia32 1 -%ifarch x86_64 -%define build_ovmf_x64 1 -%endif -%endif - -%ifarch aarch64 -%define build_aavmf_aarch64 1 -%endif - -%ifarch %{arm} -%define build_aavmf_arm 1 -%endif - -%if 0%{?cross} -%define build_ovmf_x64 1 -%define build_ovmf_ia32 1 -%define build_aavmf_aarch64 1 -%define build_aavmf_arm 1 -%endif - -# Enable this to skip secureboot enrollment, if problems pop up -%if %{with_check} -# keep enroll for testing (non containeried build env) -%global skip_enroll 0 -%else -# skip enroll when building that blocks containerized build -%global skip_enroll 1 -%endif - -%ifarch x86_64 -%if %{with_check} -%define qosb_testing 1 -%endif -%endif - -Summary: EFI Development Kit II -Name: edk2 -# Even though edk2 stable releases are YYYYMM, we need -# to use YYYMMDD to avoid needing to bump package epoch -# due to previous 'git' Version: -Version: %{edk2_stable_date}01stable -Release: 4%{?dist} -License: BSD -Vendor: Microsoft Corporation -Distribution: Mariner -URL: https://github.com/tianocore/tianocore.github.io/wiki/EDK-II/ -# Needed due to a dependency on "nasm", which doesn't officially support the ARM64 architecture. -# See here: https://github.com/netwide-assembler/nasm/pull/3 -ExclusiveArch: x86_64 - -Source0: https://github.com/tianocore/edk2/archive/%{edk2_stable_str}.tar.gz#/%{edk2_stable_str}.tar.gz -Source1: openssl-%{openssl_version}-hobbled.tar.xz -Source2: ovmf-whitepaper-c770f8c.txt -#Source3: https://github.com/puiterwijk/qemu-ovmf-secureboot/archive/v{qosb_version}/qemu-ovmf-secureboot-{qosb_version}.tar.gz -Source3: qemu-ovmf-secureboot-%{qosb_version}.tar.xz -Source4: softfloat-%{softfloat_version}.tar.xz -Source5: RedHatSecureBootPkKek1.pem -Source10: hobble-openssl -Source11: build-iso.sh -Source12: update-tarball.sh -Source13: openssl-patch-to-tarball.sh -# Fedora-specific JSON "descriptor files" -Source14: 40-edk2-ovmf-x64-sb-enrolled.json -Source15: 50-edk2-ovmf-x64-sb.json -Source16: 60-edk2-ovmf-x64.json -Source17: 40-edk2-ovmf-ia32-sb-enrolled.json -Source18: 50-edk2-ovmf-ia32-sb.json -Source19: 60-edk2-ovmf-ia32.json -Source20: 70-edk2-aarch64-verbose.json -Source21: 70-edk2-arm-verbose.json - -# non-upstream patches -Patch0001: 0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch -Patch0002: 0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch -Patch0003: 0003-OvmfPkg-enable-DEBUG_VERBOSE.patch -Patch0004: 0004-OvmfPkg-increase-max-debug-message-length-to-512.patch -Patch0005: 0005-advertise-OpenSSL-on-TianoCore-splash-screen-boot-lo.patch -Patch0006: 0006-OvmfPkg-QemuVideoDxe-enable-debug-messages-in-VbeShi.patch -Patch0007: 0007-MdeModulePkg-TerminalDxe-add-other-text-resolutions.patch -Patch0008: 0008-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch -Patch0009: 0009-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch -Patch0010: 0010-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch -Patch0011: 0011-OvmfPkg-allow-exclusion-of-the-shell-from-the-firmwa.patch -Patch0012: 0012-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch -Patch0013: 0013-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch -Patch0014: 0014-ArmVirtPkg-set-early-hello-message-RH-only.patch -Patch0015: 0015-Tweak-the-tools_def-to-support-cross-compiling.patch -Patch0016: 0016-BaseTools-do-not-build-BrotliCompress-RH-only.patch - -BuildRequires: bc -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: genisoimage -BuildRequires: iasl -BuildRequires: libuuid-devel -BuildRequires: nasm -BuildRequires: python3 -BuildRequires: python3-devel -# These are for QOSB -BuildRequires: python3-requests -BuildRequires: qemu-img -BuildRequires: qemu-kvm -BuildRequires: sed - -%if 0%{?cross} -BuildRequires: gcc-aarch64-linux-gnu -BuildRequires: gcc-arm-linux-gnu -BuildRequires: gcc-x86_64-linux-gnu -%endif - -%if %{?qosb_testing} -# This is used for testing the enrollment: builds are run in a chroot, lacking -# a kernel. The testing is only performed on x86_64 for now, but we can't make -# the BuildRequires only on a specific arch, as that'd come through in the SRPM -# NOTE: The actual enrollment needs to happen in all builds for all architectures, -# because OVMF is built as noarch, which means that koji enforces that the build -# results don't actually differ per arch, and then it picks a random arches' build -# for the actual RPM. -BuildRequires: kernel-core -%endif - -%description -EDK II is a development code base for creating UEFI drivers, applications -and firmware images. - -%package tools -Summary: EFI Development Kit II Tools -License: BSD - -%description tools -This package provides tools that are needed to -build EFI executables and ROMs using the GNU tools. - -%package tools-python -Summary: EFI Development Kit II Tools -License: BSD -Requires: python3 -BuildArch: noarch - -%description tools-python -This package provides tools that are needed to build EFI executables -and ROMs using the GNU tools. You do not need to install this package; -you probably want to install edk2-tools only. - -%package tools-doc -Summary: Documentation for EFI Development Kit II Tools -License: BSD -BuildArch: noarch - -%description tools-doc -This package documents the tools that are needed to -build EFI executables and ROMs using the GNU tools. - -%package qosb -Summary: Tool to enroll secureboot -License: BSD -Requires: python3 -BuildArch: noarch - -%description qosb -This package contains QOSB (QEMU OVMF Secure Boot), which can enroll OVMF -variable files to enforce Secure Boot. - -%if 0%{?build_ovmf_x64:1} -%package ovmf -Summary: Open Virtual Machine Firmware -# OVMF includes the Secure Boot and IPv6 features; it has a builtin OpenSSL -# library. -License: BSD AND OpenSSL -BuildArch: noarch - -Provides: bundled(openssl) - -Provides: OVMF = %{version}-%{release} -Obsoletes: OVMF < %{version}-%{release} - -%description ovmf -EFI Development Kit II -Open Virtual Machine Firmware (x64) -%endif - -%if 0%{?build_ovmf_ia32:1} -%package ovmf-ia32 -Summary: Open Virtual Machine Firmware -# OVMF includes the Secure Boot and IPv6 features; it has a builtin OpenSSL -# library. -License: BSD AND OpenSSL -BuildArch: noarch - -Provides: bundled(openssl) - -%description ovmf-ia32 -EFI Development Kit II -Open Virtual Machine Firmware (ia32) -%endif - -%if 0%{?build_aavmf_aarch64:1} -%package aarch64 -Summary: AARCH64 Virtual Machine Firmware -# No Secure Boot for AAVMF yet, but we include OpenSSL for the IPv6/HTTP boot stack. -License: BSD AND OpenSSL -BuildArch: noarch - -Provides: AAVMF = %{version}-%{release} -Obsoletes: AAVMF < %{version}-%{release} - -Provides: bundled(openssl) - -%description aarch64 -EFI Development Kit II -AARCH64 UEFI Firmware -%endif - -%if 0%{?build_aavmf_arm:1} -%package arm -Summary: ARM Virtual Machine Firmware -# No Secure Boot for ARMv7, but we include OpenSSL for the IPv6/HTTP boot stack. -License: BSD AND OpenSSL -BuildArch: noarch - -%description arm -EFI Development Kit II -ARMv7 UEFI Firmware -%endif - - -%prep -%setup -q -n edk2-%{edk2_stable_str} - -# Ensure old shell and binary packages are not used -rm -rf EdkShellBinPkg -rm -rf EdkShellPkg -rm -rf FatBinPkg -rm -rf ShellBinPkg - -# copy whitepaper into place -cp -a -- %{SOURCE2} . -# extract openssl into place -tar -xf %{SOURCE1} --strip-components=1 --directory CryptoPkg/Library/OpensslLib/openssl -# extract softfloat into place -tar -xf %{SOURCE4} --strip-components=1 --directory ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/ - -# Extract QOSB -tar -xf %{SOURCE3} -mv qemu-ovmf-secureboot-%{qosb_version}/README.md README.qosb -mv qemu-ovmf-secureboot-%{qosb_version}/LICENSE LICENSE.qosb - -%autopatch -p1 -base64 --decode < MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 > MdeModulePkg/Logo/Logo-OpenSSL.bmp - -# Extract OEM string from the RH cert, as described here -# https://bugzilla.tianocore.org/show_bug.cgi?id=1747#c2 -sed \ - -e 's/^-----BEGIN CERTIFICATE-----$/4e32566d-8e9e-4f52-81d3-5bb9715f9727:/' \ - -e '/^-----END CERTIFICATE-----$/d' \ - %{_sourcedir}/RedHatSecureBootPkKek1.pem \ -| tr -d '\n' \ -> PkKek1.oemstr - - -%build -export PYTHON_COMMAND=python3 -source ./edksetup.sh - -# compiler -CC_FLAGS="-t GCC5" - -# parallel builds -JOBS="%{?_smp_mflags}" -JOBS="${JOBS#-j}" -if test "$JOBS" != ""; then - CC_FLAGS="${CC_FLAGS} -n $JOBS" -fi - -# common features -CC_FLAGS="$CC_FLAGS --cmd-len=65536 -b DEBUG --hash" -CC_FLAGS="$CC_FLAGS -D NETWORK_IP6_ENABLE" -CC_FLAGS="$CC_FLAGS -D NETWORK_TLS_ENABLE" -CC_FLAGS="$CC_FLAGS -D NETWORK_HTTP_BOOT_ENABLE" -CC_FLAGS="$CC_FLAGS -D TPM2_ENABLE" - -# ovmf features -OVMF_FLAGS="${CC_FLAGS}" -OVMF_FLAGS="${OVMF_FLAGS} -D FD_SIZE_2MB" - -# ovmf + secure boot features -OVMF_SB_FLAGS="${OVMF_FLAGS}" -OVMF_SB_FLAGS="${OVMF_SB_FLAGS} -D SECURE_BOOT_ENABLE" -OVMF_SB_FLAGS="${OVMF_SB_FLAGS} -D SMM_REQUIRE" -OVMF_SB_FLAGS="${OVMF_SB_FLAGS} -D EXCLUDE_SHELL_FROM_FD" - -# arm firmware features -ARM_FLAGS="${CC_FLAGS}" - -unset MAKEFLAGS -%make_build -C BaseTools \ - EXTRA_OPTFLAGS="%{optflags}" \ - EXTRA_LDFLAGS="%{__global_ldflags}" -sed -i -e 's/-Werror//' Conf/tools_def.txt - - -%if 0%{?cross} -export GCC5_IA32_PREFIX="x86_64-linux-gnu-" -export GCC5_X64_PREFIX="x86_64-linux-gnu-" -export GCC5_AARCH64_PREFIX="aarch64-linux-gnu-" -export GCC5_ARM_PREFIX="arm-linux-gnu-" -%endif - -# build ovmf (x64) -%if 0%{?build_ovmf_x64:1} -mkdir -p ovmf -build ${OVMF_FLAGS} -a X64 -p OvmfPkg/OvmfPkgX64.dsc -cp Build/OvmfX64/*/FV/OVMF_*.fd ovmf/ -rm -rf Build/OvmfX64 - -# build ovmf (x64) with secure boot -build ${OVMF_SB_FLAGS} -a IA32 -a X64 -p OvmfPkg/OvmfPkgIa32X64.dsc -cp Build/Ovmf3264/*/FV/OVMF_CODE.fd ovmf/OVMF_CODE.secboot.fd - -# build ovmf (x64) shell iso with EnrollDefaultKeys -cp Build/Ovmf3264/*/X64/Shell.efi ovmf/ -cp Build/Ovmf3264/*/X64/EnrollDefaultKeys.efi ovmf -sh %{_sourcedir}/build-iso.sh ovmf/ - -%if !%{skip_enroll} -python3 qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator \ - --qemu-binary %{_bindir}/qemu-system-x86_64 \ - --ovmf-binary ovmf/OVMF_CODE.secboot.fd \ - --ovmf-template-vars ovmf/OVMF_VARS.fd \ - --uefi-shell-iso ovmf/UefiShell.iso \ - --oem-string "$(< PkKek1.oemstr)" \ - --skip-testing \ - ovmf/OVMF_VARS.secboot.fd -%else -# This isn't going to actually give secureboot, but makes json files happy -# if we need to test disabling ovmf-vars-generator -cp ovmf/OVMF_VARS.fd ovmf/OVMF_VARS.secboot.fd -%endif -%endif - - -# build ovmf-ia32 -%if 0%{?build_ovmf_ia32:1} -mkdir -p ovmf-ia32 -build ${OVMF_FLAGS} -a IA32 -p OvmfPkg/OvmfPkgIa32.dsc -cp Build/OvmfIa32/*/FV/OVMF_CODE*.fd ovmf-ia32/ -# cp VARS files from from ovmf/, which are all we need -cp ovmf/OVMF_VARS*.fd ovmf-ia32/ -rm -rf Build/OvmfIa32 - -# build ovmf-ia32 with secure boot -build ${OVMF_SB_FLAGS} -a IA32 -p OvmfPkg/OvmfPkgIa32.dsc -cp Build/OvmfIa32/*/FV/OVMF_CODE.fd ovmf-ia32/OVMF_CODE.secboot.fd - -# build ovmf-ia32 shell iso with EnrollDefaultKeys -cp Build/OvmfIa32/*/IA32/Shell.efi ovmf-ia32/Shell.efi -cp Build/OvmfIa32/*/IA32/EnrollDefaultKeys.efi ovmf-ia32/EnrollDefaultKeys.efi -sh %{_sourcedir}/build-iso.sh ovmf-ia32/ -%endif - - -# build aarch64 firmware -%if 0%{?build_aavmf_aarch64:1} -mkdir -p aarch64 -build $ARM_FLAGS -a AARCH64 -p ArmVirtPkg/ArmVirtQemu.dsc -cp Build/ArmVirtQemu-AARCH64/DEBUG_*/FV/*.fd aarch64 -dd of="aarch64/QEMU_EFI-pflash.raw" if="/dev/zero" bs=1M count=64 -dd of="aarch64/QEMU_EFI-pflash.raw" if="aarch64/QEMU_EFI.fd" conv=notrunc -dd of="aarch64/vars-template-pflash.raw" if="/dev/zero" bs=1M count=64 -%endif - - -# build ARMv7 firmware -%if 0%{?build_aavmf_arm:1} -mkdir -p arm -build $ARM_FLAGS -a ARM -p ArmVirtPkg/ArmVirtQemu.dsc -cp Build/ArmVirtQemu-ARM/DEBUG_*/FV/*.fd arm -dd of="arm/QEMU_EFI-pflash.raw" if="/dev/zero" bs=1M count=64 -dd of="arm/QEMU_EFI-pflash.raw" if="arm/QEMU_EFI.fd" conv=notrunc -dd of="arm/vars-template-pflash.raw" if="/dev/zero" bs=1M count=64 -%endif - - - -%check -%if 0%{?build_ovmf_x64:1} -%if 0%{?qosb_testing} -%if !%{skip_enroll} -python3 qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator \ - --qemu-binary %{_bindir}/qemu-system-x86_64 \ - --ovmf-binary ovmf/OVMF_CODE.secboot.fd \ - --ovmf-template-vars ovmf/OVMF_VARS.fd \ - --uefi-shell-iso ovmf/UefiShell.iso \ - --skip-enrollment \ - --print-output \ - --no-download \ - --kernel-path `rpm -ql kernel-core | grep "\/vmlinuz$" -m 1` \ - ovmf/OVMF_VARS.secboot.fd -%endif -%endif -%endif - - - -%install -cp CryptoPkg/Library/OpensslLib/openssl/LICENSE LICENSE.openssl -mkdir -p %{buildroot}%{_bindir} \ - %{buildroot}%{_datadir}/%{name}/Conf \ - %{buildroot}%{_datadir}/%{name}/Scripts -install BaseTools/Source/C/bin/* \ - %{buildroot}%{_bindir} -install BaseTools/BinWrappers/PosixLike/LzmaF86Compress \ - %{buildroot}%{_bindir} -install BaseTools/BuildEnv \ - %{buildroot}%{_datadir}/%{name} -install BaseTools/Conf/*.template \ - %{buildroot}%{_datadir}/%{name}/Conf -install BaseTools/Scripts/GccBase.lds \ - %{buildroot}%{_datadir}/%{name}/Scripts - -cp -R BaseTools/Source/Python %{buildroot}%{_datadir}/%{name}/Python -for i in build BPDG Ecc GenDepex GenFds GenPatchPcdTable PatchPcdValue TargetTool Trim UPT; do -echo '#!/bin/sh -export PYTHONPATH=%{_datadir}/%{name}/Python -exec python3 '%{_datadir}/%{name}/Python/$i/$i.py' "$@"' > %{buildroot}%{_bindir}/$i - chmod +x %{buildroot}%{_bindir}/$i -done - -# For distro-provided firmware packages, the specification -# (https://git.qemu.org/?p=qemu.git;a=blob;f=docs/interop/firmware.json) -# says the JSON "descriptor files" to be searched in this directory: -# `/usr/share/firmware/`. Create it. -mkdir -p %{buildroot}/%{_datadir}/qemu/firmware - -mkdir -p %{buildroot}%{_datadir}/%{name} -%if 0%{?build_ovmf_x64:1} -cp -a ovmf %{buildroot}%{_datadir}/%{name} -# Libvirt hardcodes this directory name -mkdir %{buildroot}%{_datadir}/OVMF -ln -sf ../%{name}/ovmf/OVMF_CODE.fd %{buildroot}%{_datadir}/OVMF -ln -sf ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}%{_datadir}/OVMF -ln -sf ../%{name}/ovmf/OVMF_VARS.fd %{buildroot}%{_datadir}/OVMF -ln -sf ../%{name}/ovmf/OVMF_VARS.secboot.fd %{buildroot}%{_datadir}/OVMF -ln -sf ../%{name}/ovmf/UefiShell.iso %{buildroot}%{_datadir}/OVMF - -for f in %{_sourcedir}/*edk2-ovmf-x64*.json; do - install -pm 644 $f %{buildroot}/%{_datadir}/qemu/firmware -done -%endif - - -%if 0%{?build_ovmf_ia32:1} -cp -a ovmf-ia32 %{buildroot}%{_datadir}/%{name} - -for f in %{_sourcedir}/*edk2-ovmf-ia32*.json; do - install -pm 644 $f %{buildroot}/%{_datadir}/qemu/firmware -done -%endif - - -%if 0%{?build_aavmf_aarch64:1} -cp -a aarch64 %{buildroot}%{_datadir}/%{name} -# Libvirt hardcodes this directory name -mkdir %{buildroot}%{_datadir}/AAVMF -ln -sf ../%{name}/aarch64/QEMU_EFI-pflash.raw %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.fd -ln -sf ../%{name}/aarch64/vars-template-pflash.raw %{buildroot}%{_datadir}/AAVMF/AAVMF_VARS.fd - -for f in %{_sourcedir}/*edk2-aarch64*.json; do - install -pm 644 $f %{buildroot}/%{_datadir}/qemu/firmware -done -%endif - - -%if 0%{?build_aavmf_arm:1} -cp -a arm %{buildroot}%{_datadir}/%{name} -ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw %{buildroot}%{_datadir}/AAVMF/AAVMF32_CODE.fd - -for f in %{_sourcedir}/*edk2-arm*.json; do - install -pm 644 $f %{buildroot}/%{_datadir}/qemu/firmware -done -%endif - -%if 0%{?py_byte_compile:1} -# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#manual-bytecompilation -%py_byte_compile %{python3} %{buildroot}%{_datadir}/edk2/Python -%endif - - -install qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator %{buildroot}%{_bindir} - - -%files tools -%license LICENSE.openssl License.txt -%{_bindir}/DevicePath -%{_bindir}/EfiRom -%{_bindir}/GenCrc32 -%{_bindir}/GenFfs -%{_bindir}/GenFv -%{_bindir}/GenFw -%{_bindir}/GenSec -%{_bindir}/LzmaCompress -%{_bindir}/LzmaF86Compress -%{_bindir}/Split -%{_bindir}/TianoCompress -%{_bindir}/VfrCompile -%{_bindir}/VolInfo -%dir %{_datadir}/%{name} -%{_datadir}/%{name}/BuildEnv -%{_datadir}/%{name}/Conf -%{_datadir}/%{name}/Scripts - -%files tools-python -%{_bindir}/build -%{_bindir}/BPDG -%{_bindir}/Ecc -%{_bindir}/GenDepex -%{_bindir}/GenFds -%{_bindir}/GenPatchPcdTable -%{_bindir}/PatchPcdValue -%{_bindir}/TargetTool -%{_bindir}/Trim -%{_bindir}/UPT -%dir %{_datadir}/%{name} -%{_datadir}/%{name}/Python - -%files tools-doc -%doc BaseTools/UserManuals/*.rtf - -%files qosb -%license LICENSE.qosb -%doc README.qosb -%{_bindir}/ovmf-vars-generator - -%if 0%{?build_ovmf_x64:1} -%files ovmf -%license LICENSE.openssl OvmfPkg/License.txt -%doc OvmfPkg/README -%doc ovmf-whitepaper-c770f8c.txt -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/ovmf -%dir %{_datadir}/qemu/firmware -%{_datadir}/%{name}/ovmf/OVMF*.fd -%{_datadir}/%{name}/ovmf/*.efi -%{_datadir}/%{name}/ovmf/*.iso -%{_datadir}/qemu/firmware/*edk2-ovmf-x64*.json -%{_datadir}/OVMF -%endif - -%if 0%{?build_ovmf_ia32:1} -%files ovmf-ia32 -%license LICENSE.openssl OvmfPkg/License.txt -%doc OvmfPkg/README -%doc ovmf-whitepaper-c770f8c.txt -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/ovmf-ia32 -%dir %{_datadir}/qemu/firmware -%{_datadir}/%{name}/ovmf-ia32/OVMF*.fd -%{_datadir}/%{name}/ovmf-ia32/*.efi -%{_datadir}/%{name}/ovmf-ia32/*.iso -%{_datadir}/qemu/firmware/*edk2-ovmf-ia32*.json -%endif - -%if 0%{?build_aavmf_aarch64:1} -%files aarch64 -%license LICENSE.openssl OvmfPkg/License.txt -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/aarch64 -%dir %{_datadir}/qemu/firmware -%{_datadir}/%{name}/aarch64/QEMU*.fd -%{_datadir}/%{name}/aarch64/*.raw -%{_datadir}/qemu/firmware/*edk2-aarch64*.json -%{_datadir}/AAVMF/AAVMF_* -%endif - -%if 0%{?build_aavmf_arm:1} -%files arm -%license LICENSE.openssl OvmfPkg/License.txt -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/arm -%dir %{_datadir}/qemu/firmware -%{_datadir}/%{name}/arm/QEMU*.fd -%{_datadir}/%{name}/arm/*.raw -%{_datadir}/qemu/firmware/*edk2-arm*.json -%{_datadir}/AAVMF/AAVMF32_* -%endif - -%changelog -* Thu Jun 02 2022 Pawel Winogrodzki - 20200801stable-4 -- Switching to building exclusively for AMD64 due to dependency on "nasm". - -* Thu Apr 07 2022 Nicolas Guibourge - 20200801stable-3 -- Skip enroll that blocks building from containerized environment. -- License verified. - -* Tue Jul 06 2021 Pawel Winogrodzki - 20200801stable-2 -- Initial CBL-Mariner import from Fedora 33 (license: MIT). -- Turn off cross-compilation. -- Replace BR 'qemu-system-x86' with Mariner's 'qemu-kvm'. -- Hiding test-only BRs behind the 'with_check' macro. - -* Wed Sep 16 2020 Cole Robinson - 20200801stable-1 -- Update to edk2 stable 202008 - -* Sat Sep 12 2020 Peter Robinson - 20200201stable-6 -- Tweaks for aarch64/ARMv7 builds -- Minor cleanups - -* Tue Aug 04 2020 Cole Robinson - 20200201stable-5 -- Fix build failures on rawhide - -* Sat Aug 01 2020 Fedora Release Engineering - 20200201stable-4 -- Second attempt - Rebuilt for - https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 27 2020 Fedora Release Engineering - 20200201stable-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 13 2020 Tom Stellard - 20200201stable-2 -- Use make macros -- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro - -* Mon Apr 13 2020 Cole Robinson - 20200201stable-1 -- Update to stable-202002 - -* Tue Jan 28 2020 Fedora Release Engineering - 20190501stable-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Sep 06 2019 Patrick Uiterwijk - 20190501stable-4 -- Updated HTTP_BOOT option to new upstream value - -* Wed Jul 24 2019 Fedora Release Engineering - 20190501stable-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Mon Jul 15 2019 Cole Robinson - 20190501stable-2 -- License is now BSD-2-Clause-Patent -- Re-enable secureboot enrollment -- Use qemu-ovmf-secureboot from git - -* Thu Jul 11 2019 Cole Robinson - 20190501stable-1 -- Update to stable-201905 -- Update to openssl-1.1.1b -- Ship VARS file for ovmf-ia32 (bug 1688596) -- Ship Fedora-variant JSON "firmware descriptor files" -- Resolves rhbz#1728652 - -* Mon Mar 18 2019 Cole Robinson - 20190308stable-1 -- Use YYYYMMDD versioning to fix upgrade path - -* Fri Mar 15 2019 Cole Robinson - 201903stable-1 -- Update to stable-201903 -- Update to openssl-1.1.0j -- Move to python3 deps - -* Thu Jan 31 2019 Fedora Release Engineering - 20180815gitcb5f4f45ce-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Nov 14 2018 Patrick Uiterwijk - 20180815gitcb5f4f45ce-5 -- Add -qosb dependency on python3 - -* Fri Nov 9 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-4 -- Fix network boot via grub (bz 1648476) - -* Wed Sep 12 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-3 -- Explicitly compile the scripts using py_byte_compile - -* Fri Aug 31 2018 Cole Robinson - 20180815gitcb5f4f45ce-2 -- Fix passing through RPM build flags (bz 1540244) - -* Tue Aug 21 2018 Cole Robinson - 20180815gitcb5f4f45ce-1 -- Update to edk2 git cb5f4f45ce, edk2-stable201808 -- Update to qemu-ovmf-secureboot-1.1.3 -- Enable TPM2 support - -* Mon Jul 23 2018 Paolo Bonzini - 20180529gitee3198e672e2-5 -- Fixes for AMD SEV on OVMF_CODE.fd -- Add Provides for bundled OpenSSL - -* Wed Jul 18 2018 Paolo Bonzini - 20180529gitee3198e672e2-4 -- Enable IPv6 - -* Thu Jul 12 2018 Fedora Release Engineering - 20180529gitee3198e672e2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Jun 20 2018 Paolo Bonzini - 20180529gitee3198e672e2-2 -- Backport two bug fixes from RHEL: connect again virtio-rng devices, and - connect consoles unconditionally in OVMF (ARM firmware already did it) - -* Tue May 29 2018 Paolo Bonzini - 20180529gitee3198e672e2-1 -- Rebase to ee3198e672e2 - -* Tue May 01 2018 Cole Robinson - 20171011git92d07e4-7 -- Bump release for new build - -* Fri Mar 30 2018 Patrick Uiterwijk - 20171011git92d07e4-6 -- Add qemu-ovmf-secureboot (qosb) -- Generate pre-enrolled Secure Boot OVMF VARS files - -* Wed Mar 07 2018 Paolo Bonzini - 20171011git92d07e4-5 -- Fix GCC 8 compilation -- Replace dosfstools and mtools with qemu-img vvfat - -* Wed Feb 07 2018 Fedora Release Engineering - 20171011git92d07e4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Fri Jan 19 2018 Paolo Bonzini - 20170209git296153c5-3 -- Add OpenSSL patches from Fedora -- Enable TLS_MODE - -* Fri Nov 17 2017 Paolo Bonzini - 20170209git296153c5-2 -- Backport patches 19-21 from RHEL -- Add patches 22-24 to fix SEV slowness -- Add fedora conditionals - -* Tue Nov 14 2017 Paolo Bonzini - 20171011git92d07e4-1 -- Import source and patches from RHEL version -- Update OpenSSL to 1.1.0e -- Refresh 0099-Tweak-the-tools_def-to-support-cross-compiling.patch - -* Mon Nov 13 2017 Paolo Bonzini - 20170209git296153c5-6 -- Allow non-cross builds -- Install /usr/share/OVMF and /usr/share/AAVMF - -* Wed Aug 02 2017 Fedora Release Engineering - 20170209git296153c5-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 20170209git296153c5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Mar 15 2017 Cole Robinson - 20170209git296153c5-3 -- Ship ovmf-ia32 package (bz 1424722) - -* Thu Feb 16 2017 Cole Robinson - 20170209git296153c5-2 -- Update EnrollDefaultKeys patch (bz #1398743) - -* Mon Feb 13 2017 Paolo Bonzini - 20170209git296153c5-1 -- Rebase to git master -- New patch 0010 fixes failure to build from source. - -* Fri Feb 10 2017 Fedora Release Engineering - 20161105git3b25ca8-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Sun Nov 06 2016 Cole Robinson - 20161105git3b25ca8-1 -- Rebase to git master - -* Fri Sep 9 2016 Tom Callaway - 20160418gita8c39ba-5 -- replace legally problematic openssl source with "hobbled" tarball - -* Thu Jul 21 2016 Gerd Hoffmann - 20160418gita8c39ba-4 -- Also build for armv7. - -* Tue Jul 19 2016 Gerd Hoffmann 20160418gita8c39ba-3 -- Update EnrollDefaultKeys patch. - -* Fri Jul 8 2016 Paolo Bonzini - 20160418gita8c39ba-2 -- Distribute edk2-ovmf on aarch64 - -* Sat May 21 2016 Cole Robinson - 20160418gita8c39ba-1 -- Distribute edk2-aarch64 on x86 (bz #1338027) - -* Mon Apr 18 2016 Gerd Hoffmann 20160418gita8c39ba-0 -- Update to latest git. -- Add firmware builds (FatPkg is free now). - -* Mon Feb 15 2016 Cole Robinson 20151127svn18975-3 -- Fix FTBFS gcc warning (bz 1307439) - -* Wed Feb 03 2016 Fedora Release Engineering - 20151127svn18975-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Nov 27 2015 Paolo Bonzini - 20151127svn18975-1 -- Rebase to 20151127svn18975-1 -- Linker script renamed to GccBase.lds - -* Wed Jun 17 2015 Fedora Release Engineering - 20150519svn17469-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 19 2015 Paolo Bonzini - 20150519svn17469-1 -- Rebase to 20150519svn17469-1 -- edk2-remove-tree-check.patch now upstream - -* Sat May 02 2015 Kalev Lember - 20140724svn2670-6 -- Rebuilt for GCC 5 C++11 ABI change - -* Sat Aug 16 2014 Fedora Release Engineering - 20140724svn2670-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Thu Jul 24 2014 Paolo Bonzini - 20140724svn2670-1 -- Rebase to 20140724svn2670-1 - -* Tue Jun 24 2014 Paolo Bonzini - 20140624svn2649-1 -- Use standalone .tar.xz from buildtools repo - -* Tue Jun 24 2014 Paolo Bonzini - 20140328svn15376-4 -- Install BuildTools/BaseEnv - -* Mon Jun 23 2014 Paolo Bonzini - 20140328svn15376-3 -- Rebase to get GCC48 configuration -- Package EDK_TOOLS_PATH as /usr/share/edk2 -- Package "build" and LzmaF86Compress too, as well as the new - tools Ecc and TianoCompress. - -* Sat Jun 07 2014 Fedora Release Engineering - 20131114svn14844-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Thu Nov 14 2013 Paolo Bonzini - 20131114svn14844-1 -- Upgrade to r14844. -- Remove upstreamed parts of patch 1. - -* Fri Nov 8 2013 Paolo Bonzini - 20130515svn14365-7 -- Make BaseTools compile on ARM. - -* Fri Aug 30 2013 Paolo Bonzini - 20130515svn14365-6 -- Revert previous change; firmware packages should be noarch, and building - BaseTools twice is simply wrong. - -* Mon Aug 19 2013 Kay Sievers - 20130515svn14365-5 -- Add sub-package with EFI shell - -* Sat Aug 03 2013 Fedora Release Engineering - 20130515svn14365-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Thu May 23 2013 Dan Horák 20130515svn14365-3 -- set ExclusiveArch - -* Thu May 16 2013 Paolo Bonzini 20130515svn14365-2 -- Fix edk2-tools-python Requires - -* Wed May 15 2013 Paolo Bonzini 20130515svn14365-1 -- Split edk2-tools-doc and edk2-tools-python -- Fix Python BuildRequires -- Remove FatBinPkg at package creation time. -- Use fully versioned dependency. -- Add comment on how to generate the sources. - -* Thu May 2 2013 Paolo Bonzini 20130502.g732d199-1 -- Create. diff --git a/SPECS-EXTENDED/edk2/hobble-openssl b/SPECS-EXTENDED/edk2/hobble-openssl deleted file mode 100755 index 9a23ca6f4ca..00000000000 --- a/SPECS-EXTENDED/edk2/hobble-openssl +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -# Quit out if anything fails. -set -e - -# Clean out patent-or-otherwise-encumbered code. -# MDC-2: 4,908,861 13/03/2007 - expired, we do not remove it but do not enable it anyway -# IDEA: 5,214,703 07/01/2012 - expired, we do not remove it anymore -# RC5: 5,724,428 01/11/2015 - expired, we do not remove it anymore -# EC: ????????? ??/??/2020 -# SRP: ????????? ??/??/2017 - expired, we do not remove it anymore - -# Remove assembler portions of IDEA, MDC2, and RC5. -# (find crypto/rc5/asm -type f | xargs -r rm -fv) - -for c in `find crypto/bn -name "*gf2m.c"`; do - echo Destroying $c - > $c -done - -for c in `find crypto/ec -name "ec2*.c" -o -name "ec_curve.c"`; do - echo Destroying $c - > $c -done - -for c in `find test -name "ectest.c"`; do - echo Destroying $c - > $c -done - -for h in `find crypto ssl apps test -name "*.h"` ; do - echo Removing EC2M references from $h - cat $h | \ - awk 'BEGIN {ech=1;} \ - /^#[ \t]*ifndef.*NO_EC2M/ {ech--; next;} \ - /^#[ \t]*if/ {if(ech < 1) ech--;} \ - {if(ech>0) {;print $0};} \ - /^#[ \t]*endif/ {if(ech < 1) ech++;}' > $h.hobbled && \ - mv $h.hobbled $h -done diff --git a/SPECS-EXTENDED/edk2/openssl-patch-to-tarball.sh b/SPECS-EXTENDED/edk2/openssl-patch-to-tarball.sh deleted file mode 100644 index 5b327caac1e..00000000000 --- a/SPECS-EXTENDED/edk2/openssl-patch-to-tarball.sh +++ /dev/null @@ -1,63 +0,0 @@ -#! /bin/sh - -: << \EOF - For importing the hobbled OpenSSL tarball from Fedora, the following - steps are necessary. Note that both the "sources" file format and the - pkgs.fedoraproject.org directory structure have changed, accommodating - SHA512 checksums. - - # in a separate directory - fedpkg clone -a openssl - cd openssl - fedpkg switch-branch master - gitk -- sources - - # the commit that added the 1.1.0h hobbled tarball is 6eb8f620273 - # subject "update to upstream version 1.1.0h" - git checkout 6eb8f620273 - - # fetch the hobbled tarball and verify the checksum - ( - set -e - while read HASH_TYPE FN EQ HASH; do - # remove leading and trailing parens - FN="${FN#(*}" - FN="${FN%*)}" - wget \ - http://pkgs.fedoraproject.org/repo/pkgs/openssl/$FN/sha512/$HASH/$FN - done openssl-${openssl_version}-hobbled.tar.xz - cd tianocore-openssl-${openssl_version} - git init . - git config core.whitespace cr-at-eol - git config am.keepcr true - git am - git archive --format=tar --prefix=tianocore-edk2-${edk2_githash}/ \ - HEAD CryptoPkg/Library/OpensslLib/ | \ - xz -9ev >&3) < $1 -rm -rf tianocore-openssl-${openssl_version} diff --git a/SPECS-EXTENDED/edk2/update-tarball.sh b/SPECS-EXTENDED/edk2/update-tarball.sh deleted file mode 100644 index e414329fbd3..00000000000 --- a/SPECS-EXTENDED/edk2/update-tarball.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -user="tianocore" -repo="edk2" -branch="master" - -uri="https://github.com/${user}/${repo}" -api="${uri/github.com/api.github.com/repos}" -tar="${uri/github.com/codeload.github.com}/legacy.tar.gz" - -if test $# -ge 1; then - hash=$1 - short=$1 -else - hash=$(curl -s "${api}/git/refs/heads/${branch}" | grep '"sha"' | cut -d'"' -f4) - if test "$hash" = ""; then - echo "# failed to fetch $branch hash" - exit 1 - fi - short=$(echo $hash | sed -e 's/^\(.......\).*/\1/') -fi - -if test $# = 2; then - date=$2 -else - date=$(curl -s "${api}/git/commits/$hash" | awk ' - /"committer"/ { c=1 } - /"date"/ { if (c) { print } } - ' | cut -d'"' -f4) - date="${date%T*}" - date="${date//-/}" -fi - -name="${repo}-${date}-${short}.tar.xz" - -if test -f "$name"; then - echo "# exists: $name" - exit 1 -fi - -echo -echo "# specfile update: version $date, release $short" -sed -i.old \ - -e "s/\(%global edk2_date[ \t]\+\)\(.*\)/\1$date/" \ - -e "s/\(%global edk2_githash[ \t]\+\)\(.*\)/\1$short/" \ - edk2.spec -diff -u edk2.spec.old edk2.spec - -echo -echo "# cleanup ..." -rm -vf ${repo}-*.tar* -echo "# fetching $name ..." -curl "$tar/$hash" | zcat | xz -9e > "$name" -exit 0 diff --git a/SPECS-EXTENDED/future/future-python39.patch b/SPECS-EXTENDED/future/future-python39.patch deleted file mode 100644 index 4524cb0c093..00000000000 --- a/SPECS-EXTENDED/future/future-python39.patch +++ /dev/null @@ -1,65 +0,0 @@ -From edda349a2d4fffa6c7f277483ccb40a66c0795b9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Mon, 10 Feb 2020 23:17:28 +0100 -Subject: [PATCH] Test fixes for Python 3.9 - -Fixes https://github.com/PythonCharmers/python-future/issues/540 -Fixes https://github.com/PythonCharmers/python-future/issues/541 ---- - src/future/moves/_dummy_thread.py | 2 +- - src/future/standard_library/__init__.py | 2 +- - tests/test_future/test_standard_library.py | 1 - - tests/test_future/test_urllib_toplevel.py | 2 -- - 4 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/src/future/moves/_dummy_thread.py b/src/future/moves/_dummy_thread.py -index 688d249b..cc2fc891 100644 ---- a/src/future/moves/_dummy_thread.py -+++ b/src/future/moves/_dummy_thread.py -@@ -2,7 +2,7 @@ - from future.utils import PY3 - - if PY3: -- from _dummy_thread import * -+ from _thread import * - else: - __future_module__ = True - from dummy_thread import * -diff --git a/src/future/standard_library/__init__.py b/src/future/standard_library/__init__.py -index cff02f95..3e8da8a6 100644 ---- a/src/future/standard_library/__init__.py -+++ b/src/future/standard_library/__init__.py -@@ -125,7 +125,7 @@ - # 'Tkinter': 'tkinter', - '_winreg': 'winreg', - 'thread': '_thread', -- 'dummy_thread': '_dummy_thread', -+ 'dummy_thread': '_thread', - # 'anydbm': 'dbm', # causes infinite import loop - # 'whichdb': 'dbm', # causes infinite import loop - # anydbm and whichdb are handled by fix_imports2 -diff --git a/tests/test_future/test_standard_library.py b/tests/test_future/test_standard_library.py -index 3ac5d2d7..8ab27a27 100644 ---- a/tests/test_future/test_standard_library.py -+++ b/tests/test_future/test_standard_library.py -@@ -422,7 +422,6 @@ def test_urllib_imports_install_hooks(self): - - def test_underscore_prefixed_modules(self): - import _thread -- import _dummy_thread - import _markupbase - self.assertTrue(True) - -diff --git a/tests/test_future/test_urllib_toplevel.py b/tests/test_future/test_urllib_toplevel.py -index 11e77201..25f4ca82 100644 ---- a/tests/test_future/test_urllib_toplevel.py -+++ b/tests/test_future/test_urllib_toplevel.py -@@ -781,8 +781,6 @@ def test_unquoting(self): - "%s" % result) - self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, None) - self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, ()) -- with support.check_warnings(('', BytesWarning), quiet=True): -- self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, bytes(b'')) - - def test_unquoting_badpercent(self): - # Test unquoting on bad percent-escapes diff --git a/SPECS-EXTENDED/future/future.signatures.json b/SPECS-EXTENDED/future/future.signatures.json deleted file mode 100644 index 6838f335ac4..00000000000 --- a/SPECS-EXTENDED/future/future.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "future-0.18.2.tar.gz": "b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" - } -} \ No newline at end of file diff --git a/SPECS-EXTENDED/future/future.spec b/SPECS-EXTENDED/future/future.spec deleted file mode 100644 index ca11acc437d..00000000000 --- a/SPECS-EXTENDED/future/future.spec +++ /dev/null @@ -1,412 +0,0 @@ -Vendor: Microsoft Corporation -Distribution: Mariner -%global with_python3 1 - -%global _description \ -future is the missing compatibility layer between Python 2 and \ -Python 3. It allows you to use a single, clean Python 3.x-compatible \ -codebase to support both Python 2 and Python 3 with minimal overhead. \ -\ -It provides ``future`` and ``past`` packages with backports and forward \ -ports of features from Python 3 and 2. It also comes with ``futurize`` and \ -``pasteurize``, customized 2to3-based scripts that helps you to convert \ -either Py2 or Py3 code easily to support both Python 2 and 3 in a single \ -clean Py3-style codebase, module by module. - -Name: future -Summary: Easy, clean, reliable Python 2/3 compatibility -Version: 0.18.2 -Release: 6%{?dist} -License: MIT -URL: http://python-future.org/ -Source0: https://files.pythonhosted.org/packages/source/f/%{name}/%{name}-%{version}.tar.gz -BuildArch: noarch - -# https://github.com/PythonCharmers/python-future/issues/165 -Patch0: %{name}-skip_tests_with_connection_errors.patch - -# Python 3.9 support -# https://github.com/PythonCharmers/python-future/pull/544 -Patch1: %{name}-python39.patch - -%if 0%{?with_python3_other} -BuildRequires: python%{python3_other_pkgversion}-devel -%endif - -%description -%{_description} - -%if 0%{?with_python2} -%package -n python2-%{name} -Summary: Easy, clean, reliable Python 2/3 compatibility -%{?python_provide:%python_provide python2-%{name}} -%if 0%{?el6} -BuildRequires: python-argparse, python-unittest2, python-importlib -Requires: python-importlib -Requires: python-argparse -%endif - -BuildRequires: python2-devel -BuildRequires: python2-setuptools -BuildRequires: python2-numpy -BuildRequires: python2-requests -BuildRequires: python2-pytest -Provides: future = 0:%{version}-%{release} - -%description -n python2-%{name} -%{_description} -%endif - -%if 0%{?with_python3} -%package -n python%{python3_pkgversion}-%{name} -Summary: Easy, clean, reliable Python 2/3 compatibility -%{?python_provide:%python_provide python%{python3_pkgversion}-%{name}} -BuildRequires: python%{python3_pkgversion}-devel -BuildRequires: python%{python3_pkgversion}-setuptools -BuildRequires: python%{python3_pkgversion}-numpy -BuildRequires: python%{python3_pkgversion}-requests -BuildRequires: python%{python3_pkgversion}-pytest -Provides: future-python3 = 0:%{version}-%{release} - -Obsoletes: python2-%{name} < 0:%{version}-%{release} -Obsoletes: %{name}-python2 < 0:%{version}-%{release} -Provides: future = 0:%{version}-%{release} - -%if 0%{?rhel} && 0%{?rhel} < 8 -Obsoletes: python34-%{name} < 0:%{version}-%{release} -%endif - -%description -n python%{python3_pkgversion}-%{name} -%{_description} -%endif -# with_python3 - -%if 0%{?with_python3_other} -%package -n python%{python3_other_pkgversion}-%{name} -Summary: Easy, clean, reliable Python 2/3 compatibility -%{?python_provide:%python_provide python%{python3_other_pkgversion}-%{name}} -BuildRequires: python%{python3_other_pkgversion}-devel -BuildRequires: python%{python3_other_pkgversion}-setuptools -BuildRequires: python%{python3_other_pkgversion}-numpy -BuildRequires: python%{python3_other_pkgversion}-requests -BuildRequires: python%{python3_other_pkgversion}-pytest -Provides: future-python%{python3_other_pkgversion} = 0:%{version}-%{release} - -%description -n python%{python3_other_pkgversion}-%{name} -%{_description} -%endif - -%prep -%setup -qc -n future-%{version} - -pushd future-%{version} -%patch0 -p0 -%patch1 -p1 -popd - -%if 0%{?with_python2} -cp -a future-%{version} python2 -find python2 -name '*.py' | xargs pathfix.py -pn -i "%{__python2}" -%endif - -%if 0%{?with_python3} -cp -a future-%{version} python3 -find python3 -name '*.py' | xargs pathfix.py -pn -i "%{__python3}" -%endif -# with_python3 - -%if 0%{?with_python3_other} -cp -a future-%{version} python%{python3_other_pkgversion} -find python%{python3_other_pkgversion} -name '*.py' | xargs pathfix.py -pn -i "%{__python3}" -%endif - -%build -%if 0%{?with_python2} -pushd python2 -%py2_build -popd -%endif - -%if 0%{?with_python3} -pushd python3 -%py3_build -popd -%endif -# with_python3 - -%if 0%{?with_python3_other} -pushd python%{python3_other_pkgversion} -%py3_other_build -popd -%endif - -%install - -%if 0%{?with_python3} -pushd python3 -%py3_install -mv $RPM_BUILD_ROOT%{_bindir}/futurize $RPM_BUILD_ROOT%{_bindir}/futurize-%{python3_version} -mv $RPM_BUILD_ROOT%{_bindir}/pasteurize $RPM_BUILD_ROOT%{_bindir}/pasteurize-%{python3_version} -ln -sf ./futurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/futurize-3 -ln -sf ./pasteurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/pasteurize-3 - -ln -sf ./futurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/futurize -ln -sf ./pasteurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/pasteurize - -sed -i -e '/^#!\//, 1d' $RPM_BUILD_ROOT%{python3_sitelib}/future/backports/test/pystone.py -popd - -chmod a+x $RPM_BUILD_ROOT%{python3_sitelib}/future/backports/test/pystone.py -%endif - -%if 0%{?with_python3_other} -pushd python%{python3_other_pkgversion} -%py3_other_install -mv $RPM_BUILD_ROOT%{_bindir}/futurize $RPM_BUILD_ROOT%{_bindir}/futurize-%{python3_other_version} -mv $RPM_BUILD_ROOT%{_bindir}/pasteurize $RPM_BUILD_ROOT%{_bindir}/pasteurize-%{python3_other_version} -sed -i -e '/^#!\//, 1d' $RPM_BUILD_ROOT%{python3_other_sitelib}/future/backports/test/pystone.py -popd - -chmod a+x $RPM_BUILD_ROOT%{python3_other_sitelib}/future/backports/test/pystone.py -%endif - -%if 0%{?with_python2} -pushd python2 -%py2_install -cp -pr $RPM_BUILD_ROOT%{_bindir}/futurize $RPM_BUILD_ROOT%{_bindir}/futurize-%{python2_version} -cp -pr $RPM_BUILD_ROOT%{_bindir}/pasteurize $RPM_BUILD_ROOT%{_bindir}/pasteurize-%{python2_version} -ln -sf ./futurize-%{python2_version} $RPM_BUILD_ROOT%{_bindir}/futurize-2 -ln -sf ./pasteurize-%{python2_version} $RPM_BUILD_ROOT%{_bindir}/pasteurize-2 -sed -i -e '/^#!\//, 1d' $RPM_BUILD_ROOT%{python2_sitelib}/future/backports/test/pystone.py -popd - -chmod a+x $RPM_BUILD_ROOT%{python2_sitelib}/future/backports/test/pystone.py -%endif - -## This packages ships PEM certificates in future/backports/test directory. -## It's for testing purpose, i guess. Ignore them. -%check -%if 0%{?with_python2} -pushd python2 -PYTHONPATH=$PWD/build/lib py.test-%{python2_version} -popd -%endif - -# Bugs -# https://github.com/PythonCharmers/python-future/issues/474 -# https://github.com/PythonCharmers/python-future/issues/508 -%if 0%{?with_python3} -pushd python3 -%if 0%{?python3_version_nodots} > 37 -PYTHONPATH=$PWD/build/lib py.test-%{python3_version} -k "not test_pow and not test_urllib2" -%endif -%if 0%{?python3_version_nodots} <= 37 -PYTHONPATH=$PWD/build/lib py.test-%{python3_version} -%endif -popd -%endif -# with_python3 - -%if 0%{?with_python3_other} -pushd python%{python3_other_pkgversion} -PYTHONPATH=$PWD/build/lib py.test-%{python3_other_version} -popd -%endif -# with_python3 - -%if 0%{?with_python2} -%files -n python2-%{name} -%doc python2/README.rst -%license python2/LICENSE.txt -%{_bindir}/futurize -%{_bindir}/futurize-2* -%{_bindir}/pasteurize -%{_bindir}/pasteurize-2* -%{python2_sitelib}/future/ -%{python2_sitelib}/past/ -%{python2_sitelib}/libfuturize/ -%{python2_sitelib}/libpasteurize/ -%{python2_sitelib}/tkinter/ -%{python2_sitelib}/_dummy_thread/ -%{python2_sitelib}/_markupbase/ -%{python2_sitelib}/_thread/ -%{python2_sitelib}/builtins/ -%{python2_sitelib}/copyreg/ -%{python2_sitelib}/html/ -%{python2_sitelib}/http/ -%{python2_sitelib}/queue/ -%{python2_sitelib}/reprlib/ -%{python2_sitelib}/socketserver/ -%{python2_sitelib}/winreg/ -%{python2_sitelib}/xmlrpc/ -%{python2_sitelib}/*.egg-info -%endif - -%if 0%{?with_python3} -%files -n python%{python3_pkgversion}-%{name} -%license python3/LICENSE.txt -%doc python3/README.rst -%{_bindir}/futurize-3 -%{_bindir}/pasteurize-3 - -%{_bindir}/futurize -%{_bindir}/pasteurize - -%{_bindir}/futurize-%{python3_version} -%{_bindir}/pasteurize-%{python3_version} -%{python3_sitelib}/future/ -%{python3_sitelib}/past/ -%{python3_sitelib}/libfuturize/ -%{python3_sitelib}/libpasteurize/ -%{python3_sitelib}/*.egg-info -%endif - -%if 0%{?with_python3_other} -%files -n python%{python3_other_pkgversion}-%{name} -%license python3/LICENSE.txt -%doc python3/README.rst -%{_bindir}/futurize-%{python3_other_version} -%{_bindir}/pasteurize-%{python3_other_version} -%{python3_other_sitelib}/future/ -%{python3_other_sitelib}/past/ -%{python3_other_sitelib}/libfuturize/ -%{python3_other_sitelib}/libpasteurize/ -%{python3_other_sitelib}/*.egg-info -%endif - - -%changelog -* Thu Feb 04 2021 Joe Schmitt - 0.18.2-6 -- Initial CBL-Mariner import from Fedora 32 (license: MIT). -- Remove Fedora version check for python version - -* Tue Feb 11 2020 Antonio Trande - 0.18.2-5 -- Fix Python 3.9 builds - -* Tue Jan 28 2020 Fedora Release Engineering - 0.18.2-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Jan 24 2020 Antonio Trande - 0.18.2-3 -- Fix Python2 executable on Fedora 30 - -* Fri Jan 24 2020 Antonio Trande - 0.18.2-2 -- Build Python2 version on Fedora 30 - -* Fri Jan 24 2020 Antonio Trande - 0.18.2-1 -- Release 0.18.2 - -* Sat Oct 12 2019 Antonio Trande - 0.18.0-2 -- Use python3_version_nodots macro - -* Sat Oct 12 2019 Antonio Trande - 0.18.0-1 -- Release 0.18.0 - -* Thu Oct 03 2019 Miro Hrončok - 0.17.1-0.5.20190506git23989c4 -- Rebuilt for Python 3.8.0rc1 (#1748018) - -* Sun Aug 18 2019 Miro Hrončok - 0.17.1-0.4.20190506git23989c4 -- Rebuilt for Python 3.8 - -* Thu Jul 25 2019 Fedora Release Engineering - 0.17.1-0.3.20190506git23989c4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Tue Jul 23 2019 Antonio Trande - 0.17.1-0.2.20190506git23989c4 -- Bump to a pre-release 0.17.1, commit #23989c4 -- Unversioned commands point to Python3 on Fedora -- Obsolete Python2 version on Fedora - -* Tue Apr 09 2019 Antonio Trande - 0.17.1-0.1.20190313gitc423752 -- Bump to a pre-release 0.17.1 (fix rhbz#1698160, upstream bug #488) - -* Thu Jan 31 2019 Fedora Release Engineering - 0.17.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Fri Oct 26 2018 Antonio Trande - 0.17.0-1 -- Release 0.17.0 - -* Wed Oct 24 2018 Antonio Trande - 0.17.0-0.1.20181019gitbee0f3b -- Bump to a pre-release 0.17.0 - -* Wed Oct 24 2018 Antonio Trande - 0.16.0-13.20181019gitbee0f3b -- Update to the commit #bee0f3b -- Perform all Python3 tests - -* Fri Sep 21 2018 Antonio Trande - 0.16.0-12.20180917gitaf02ef6 -- Update to the commit #af02ef6 - -* Sun Aug 26 2018 Antonio Trande - 0.16.0-11 -- Prepare SPEC file for deprecation of Python2 on fedora 30+ -- Prepare SPEC file for Python3-modules packaging on epel7 - -* Fri Jul 13 2018 Fedora Release Engineering - 0.16.0-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Tue Jun 19 2018 Miro Hrončok - 0.16.0-9 -- Rebuilt for Python 3.7 - -* Wed Feb 07 2018 Fedora Release Engineering - 0.16.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Sun Jan 14 2018 Antonio Trande - 0.16.0-7 -- Use versioned Python2 packages - -* Fri Dec 15 2017 Antonio Trande - 0.16.0-6 -- Python3 built on epel7 - -* Wed Jul 26 2017 Fedora Release Engineering - 0.16.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Feb 10 2017 Fedora Release Engineering - 0.16.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Dec 19 2016 Miro Hrončok - 0.16.0-3 -- Rebuild for Python 3.6 - -* Tue Dec 13 2016 Antonio Trande - 0.16.0-2 -- BR Python2 dependencies unversioned on epel6 - -* Tue Dec 13 2016 Antonio Trande - 0.16.0-1 -- Update to 0.16.0 - -* Wed Aug 17 2016 Antonio Trande - 0.15.2-10 -- Rebuild for Python 3.5.2 - -* Tue Jul 19 2016 Fedora Release Engineering - 0.15.2-9 -- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages - -* Wed Feb 03 2016 Fedora Release Engineering - 0.15.2-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Jan 29 2016 Antonio Trande - 0.15.2-7 -- Renamed Python2 package - -* Thu Dec 10 2015 Antonio Trande - 0.15.2-6 -- SPEC file adapted to recent guidelines for Python - -* Fri Nov 13 2015 Antonio Trande 0.15.2-5 -- Rebuild - -* Fri Nov 13 2015 Antonio Trande 0.15.2-4 -- Python3 tests temporarily disabled with Python35 - -* Tue Nov 10 2015 Fedora Release Engineering -- 0.15.2-3 - Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 - -* Mon Sep 14 2015 Antonio Trande 0.15.2-2 -- Patch0 updated - -* Fri Sep 11 2015 Antonio Trande 0.15.2-1 -- Update to 0.15.2 - -* Wed Sep 02 2015 Antonio Trande 0.15.0-4 -- Added patch to exclude failed tests (patch0) - -* Wed Aug 26 2015 Antonio Trande 0.15.0-3 -- Added python-provides macro - -* Thu Jul 30 2015 Antonio Trande 0.15.0-2 -- Fixed Python3 packaging on Fedora -- Removed configparser backport (patch1) - -* Tue Jul 28 2015 Antonio Trande 0.15.0-1 -- Initial build diff --git a/SPECS-EXTENDED/mtools/mtools.signatures.json b/SPECS-EXTENDED/mtools/mtools.signatures.json deleted file mode 100644 index cd3f89ff0e4..00000000000 --- a/SPECS-EXTENDED/mtools/mtools.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "mtools-4.0.26.tar.gz": "b1adb6973d52b3b70b16047e682f96ef1b669d6b16894c9056a55f407e71cd0f" - } -} \ No newline at end of file diff --git a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md index 839fdc61bc4..8eddd22aa55 100644 --- a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md +++ b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md @@ -5,7 +5,7 @@ The CBL-Mariner SPEC files originated from a variety of sources with varying lic | CentOS | [MIT](https://www.centos.org/legal/#licensing-policy) | crash-ptdump-command
delve
fstrm
nodejs-nodemon
rhnlib
rt-setup
rt-tests
rtctl
tuned | | Ceph source | [LGPL2.1](https://github.com/ceph/ceph/blob/master/COPYING-LGPL2.1) | ceph | | Debian | [MIT](https://opensource.org/licenses/MIT) | prometheus-process-exporter | -| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
amtk
amtterm
annobin
ansible-freeipa
archivemount
argparse-manpage
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
bluez
bmake
bogofilter
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
cairomm
calamares
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cgdcbxd
chan
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cldr-emoji-annotation
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
containernetworking-plugins
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
dpkg
driverctl
dropwatch
drpm
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
evemu
execstack
exempi
exiv2
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fapolicyd
fdk-aac-free
fdupes
fence-virt
fetchmail
fftw
filebench
fio
fipscheck
firewalld
fish
flac
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontpackages
foomatic-db
freeglut
freeipmi
freeradius
freetds
fribidi
fros
frr
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fxload
gavl
gconf-editor
GConf2
gcovr
gcr
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
ghc-srpm-macros
giflib
gl-manpages
glew
glm
glog
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
indent
infinipath-psm
iniparser
intel-cmt-cat
intel-ipsec-mb
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
kata-containers
kde-filesystem
kde-settings
kexec-tools
keybinder3
keycloak-httpd-client-install
kf5
kf5-kconfig
kf5-kcoreaddons
kf5-ki18n
kf5-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libcli
libcmis
libcmpiutil
libcomps
libcroco
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbi-drivers
libdbusmenu
libdc1394
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libewf
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
liblangtag
libldb
libldm
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtranslit
libucil
libunicap
libuninameslist
liburing
libusbmuxd
libuser
libutempter
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpx
libwacom
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
linuxptp
lksctp-tools
lldpd
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunit
lua-rpm-macros
lua-term
luajit
luksmeta
lutok
lv2
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
multilib-rpm-config
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
neon
netavark
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvmetcli
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-migrate-parsetree
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-ppx-derivers
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-stdio
ocaml-topkg
ocaml-tyxml
ocaml-uuidm
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
omping
opa
opal
open-vm-tools
openblas
opencc
opencl-filesystem
opencl-headers
opencryptoki
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
opus
opusfile
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus
prometheus-node-exporter
ps_mem
psacct
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-argcomplete
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-cached_property
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-package-handling
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fields
python-filelock
python-fixtures
python-flake8
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-markdown
python-mccabe
python-memcached
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paramiko
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-process-tests
python-productmd
python-ptyprocess
python-pycares
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-redis
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rpm-generators
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-should_dsl
python-simpleline
python-slip
python-sniffio
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-typing-extensions
python-uamqp
python-unittest2
python-uritemplate
python-urwid
python-varlink
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xmltodict
python-yubico
python-zipp
python-zmq
python3-mallard-ducktype
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt5-qtbase
qt5-qtconnectivity
qt5-qtdeclarative
qt5-qtsensors
qt5-qtsvg
qt5-qttools
qt5-rpm-macros
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
redland
resource-agents
rest
rhash
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-thread_order
rusers
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
SDL
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
sendmail
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stunnel
subscription-manager
suitesparse
SuperLU
supermin
switcheroo-control
symlinks
sympy
sysfsutils
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
tpm-quote-tools
tpm-tools
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
unicode-emoji
unicode-ucd
unique3
units
upower
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vitess
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xrestop
xterm
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zopfli
zziplib | +| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
amtk
amtterm
annobin
ansible-freeipa
archivemount
argparse-manpage
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
bluez
bmake
bogofilter
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
cairomm
calamares
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cgdcbxd
chan
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cldr-emoji-annotation
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
containernetworking-plugins
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
dpkg
driverctl
dropwatch
drpm
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
evemu
execstack
exempi
exiv2
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fapolicyd
fdk-aac-free
fdupes
fence-virt
fetchmail
fftw
filebench
fio
fipscheck
firewalld
fish
flac
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontpackages
foomatic-db
freeglut
freeipmi
freeradius
freetds
fribidi
fros
frr
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fxload
gavl
gconf-editor
GConf2
gcovr
gcr
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
ghc-srpm-macros
giflib
gl-manpages
glew
glm
glog
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
indent
infinipath-psm
iniparser
intel-cmt-cat
intel-ipsec-mb
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
kata-containers
kde-filesystem
kde-settings
kexec-tools
keybinder3
keycloak-httpd-client-install
kf5
kf5-kconfig
kf5-kcoreaddons
kf5-ki18n
kf5-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libcli
libcmis
libcmpiutil
libcomps
libcroco
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbi-drivers
libdbusmenu
libdc1394
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libewf
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
liblangtag
libldb
libldm
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtranslit
libucil
libunicap
libuninameslist
liburing
libusbmuxd
libuser
libutempter
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpx
libwacom
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
linuxptp
lksctp-tools
lldpd
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunit
lua-rpm-macros
lua-term
luajit
luksmeta
lutok
lv2
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
multilib-rpm-config
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
neon
netavark
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvmetcli
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-migrate-parsetree
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-ppx-derivers
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-stdio
ocaml-topkg
ocaml-tyxml
ocaml-uuidm
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
omping
opa
opal
open-vm-tools
openblas
opencc
opencl-filesystem
opencl-headers
opencryptoki
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
opus
opusfile
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus
prometheus-node-exporter
ps_mem
psacct
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-argcomplete
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-cached_property
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-package-handling
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fields
python-filelock
python-fixtures
python-flake8
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-markdown
python-mccabe
python-memcached
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paramiko
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-process-tests
python-productmd
python-ptyprocess
python-pycares
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-redis
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rpm-generators
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-should_dsl
python-simpleline
python-slip
python-sniffio
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-typing-extensions
python-uamqp
python-unittest2
python-uritemplate
python-urwid
python-varlink
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xmltodict
python-yubico
python-zipp
python-zmq
python3-mallard-ducktype
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt5-qtbase
qt5-qtconnectivity
qt5-qtdeclarative
qt5-qtsensors
qt5-qtsvg
qt5-qttools
qt5-rpm-macros
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
redland
resource-agents
rest
rhash
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-thread_order
rusers
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
SDL
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
sendmail
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stunnel
subscription-manager
suitesparse
SuperLU
supermin
switcheroo-control
symlinks
sympy
sysfsutils
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
tpm-quote-tools
tpm-tools
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
unicode-emoji
unicode-ucd
unique3
units
upower
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vitess
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xrestop
xterm
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zopfli
zziplib | | Fedora (Copyright Remi Collet) | [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode) | libmemcached-awesome
librabbitmq | | Magnus Edenhill Open Source | [Magnus Edenhill Open Source BSD License](https://github.com/jemalloc/jemalloc/blob/dev/COPYING) | librdkafka | | Microsoft | [Microsoft MIT License](/LICENSES-AND-NOTICES/LICENSE.md) | application-gateway-kubernetes-ingress
asc
azcopy
azure-iot-sdk-c
azure-storage-cpp
bazel
blobfuse
blobfuse2
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
coredns-1.8.0
coredns-1.8.4
coredns-1.8.6
coredns-1.9.3
csi-driver-lvm
dcos-cli
debugedit
dejavu-fonts
distroless-packages
doxygen
dtc
elixir
espeak-ng
espeakup
flannel
fluent-bit
freefont
gflags
gh
go-md2man
grpc
grub2-efi-binary-signed
GSL
gtk-update-icon-cache
helm
hvloader
installkernel
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
keda
keras
kernel-azure-signed
kernel-hci-signed
kernel-signed
KeysInUse-OpenSSL
kpatch
kube-vip-cloud-provider
kubernetes-1.18.14
kubernetes-1.18.17
kubernetes-1.19.7
kubernetes-1.19.9
kubernetes-1.20.2
kubernetes-1.20.5
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libuv
libxml++
livepatch-5.15.102.1-1.cm2
livepatch-5.15.102.1-3.cm2
livepatch-5.15.107.1-1.cm2
livepatch-5.15.110.1-1.cm2
livepatch-5.15.111.1-1.cm2
livepatch-5.15.112.1-1.cm2
livepatch-5.15.112.1-2.cm2
livepatch-5.15.94.1-1.cm2
livepatch-5.15.94.1-1.cm2-signed
livepatch-5.15.95.1-1.cm2
livepatch-5.15.98.1-1.cm2
livepatching
lld
local-path-provisioner
lsb-release
ltp
lttng-consume
mariner-release
mariner-repos
mariner-rpm-macros
maven3
mm-common
moby-buildx
moby-cli
moby-compose
moby-containerd
moby-containerd-cc
moby-engine
moby-runc
msgpack
ncompress
nlohmann-json
nmap
nmi
node-problem-detector
ntopng
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-execnet
python-google-pasta
python-libclang
python-logutils
python-nocasedict
python-opt-einsum
python-pecan
python-remoto
python-repoze-lru
python-routes
python-rsa
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-tensorflow-estimator
python-yamlloader
R
rabbitmq-server
reaper
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-async
rubygem-async-http
rubygem-async-io
rubygem-async-pool
rubygem-aws-eventstream
rubygem-aws-partitions
rubygem-aws-sdk-core
rubygem-aws-sdk-kms
rubygem-aws-sdk-s3
rubygem-aws-sdk-sqs
rubygem-aws-sigv4
rubygem-bigdecimal
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-console
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-patron
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-fluent-config-regexp-type
rubygem-fluent-logger
rubygem-fluent-plugin-elasticsearch
rubygem-fluent-plugin-kafka
rubygem-fluent-plugin-prometheus
rubygem-fluent-plugin-prometheus_pushgateway
rubygem-fluent-plugin-record-modifier
rubygem-fluent-plugin-rewrite-tag-filter
rubygem-fluent-plugin-s3
rubygem-fluent-plugin-systemd
rubygem-fluent-plugin-td
rubygem-fluent-plugin-webhdfs
rubygem-fluent-plugin-windows-exporter
rubygem-fluentd
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser.rb
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-td
rubygem-td-client
rubygem-td-logger
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
sdbus-cpp
sgx-backwards-compatability
shim
shim-unsigned
shim-unsigned-aarch64
shim-unsigned-x64
skopeo
span-lite
sriov-network-device-plugin
swupdate
SymCrypt
SymCrypt-OpenSSL
tensorflow
terraform
tinyxml2
toml11
tracelogging
umoci
usrsctp
vala
verity-read-only-root
vnstat
zstd | diff --git a/SPECS/LICENSES-AND-NOTICES/data/licenses.json b/SPECS/LICENSES-AND-NOTICES/data/licenses.json index 6012b594a70..9adfc445114 100644 --- a/SPECS/LICENSES-AND-NOTICES/data/licenses.json +++ b/SPECS/LICENSES-AND-NOTICES/data/licenses.json @@ -1691,6 +1691,7 @@ "python-oslo-i18n", "python-oslo-sphinx", "python-paramiko", + "python-pefile", "python-pexpect", "python-pkgconfig", "python-platformdirs", @@ -1786,6 +1787,7 @@ "python-uritemplate", "python-urwid", "python-varlink", + "python-virt-firmware", "python-voluptuous", "python-waitress", "python-webencodings", diff --git a/SPECS-EXTENDED/edk2/0016-BaseTools-do-not-build-BrotliCompress-RH-only.patch b/SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch similarity index 56% rename from SPECS-EXTENDED/edk2/0016-BaseTools-do-not-build-BrotliCompress-RH-only.patch rename to SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch index 8c7eb44b3d8..2d76fab81dc 100644 --- a/SPECS-EXTENDED/edk2/0016-BaseTools-do-not-build-BrotliCompress-RH-only.patch +++ b/SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch @@ -1,7 +1,12 @@ -From cab35d13e43ef37e746befaa1f3c8200edf4e420 Mon Sep 17 00:00:00 2001 +From e1e3402a5bf94f2e4a5b67f9587b20ceb4a109ac Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Thu, 4 Jun 2020 13:34:12 +0200 -Subject: [PATCH] BaseTools: do not build BrotliCompress (RH only) +Subject: [PATCH 01/14] BaseTools: do not build BrotliCompress (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- no change Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: @@ -16,16 +21,16 @@ submodules (RH only"). Do not attempt to build BrotliCompress. Signed-off-by: Laszlo Ersek +(cherry picked from commit db8ccca337e2c5722c1d408d2541cf653d3371a2) --- BaseTools/Source/C/GNUmakefile | 1 - - MdeModulePkg/MdeModulePkg.dec | 1 - - 2 files changed, 2 deletions(-) + 1 file changed, 1 deletion(-) diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile -index df4eb64ea9..52777eaff1 100644 +index 5275f657efe8..39d719975309 100644 --- a/BaseTools/Source/C/GNUmakefile +++ b/BaseTools/Source/C/GNUmakefile -@@ -45,7 +45,6 @@ all: makerootdir subdirs +@@ -51,7 +51,6 @@ all: makerootdir subdirs LIBRARIES = Common VFRAUTOGEN = VfrCompile/VfrLexer.h APPLICATIONS = \ @@ -33,15 +38,6 @@ index df4eb64ea9..52777eaff1 100644 VfrCompile \ EfiRom \ GenFfs \ -diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec -index e562bed57e..7367adbaa3 100644 ---- a/MdeModulePkg/MdeModulePkg.dec -+++ b/MdeModulePkg/MdeModulePkg.dec -@@ -25,7 +25,6 @@ - Include - - [Includes.Common.Private] -- Library/BrotliCustomDecompressLib/brotli/c/include - - [LibraryClasses] - ## @libraryclass Defines a set of methods to reset whole system. +-- +2.39.2 + diff --git a/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch b/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch new file mode 100644 index 00000000000..a6f8f6b683d --- /dev/null +++ b/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch @@ -0,0 +1,50 @@ +From 7115ded03e80aa8f359a9e45979715a8dc47257c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 4 Jun 2020 13:39:08 +0200 +Subject: [PATCH 02/14] MdeModulePkg: remove package-private Brotli include + path (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- no change + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- New patch. + +Originating from upstream commit 58802e02c41b +("MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule", +2020-04-16), "MdeModulePkg/MdeModulePkg.dec" contains a package-internal +include path into a Brotli submodule. + +The edk2 build system requires such include paths to resolve successfully, +regardless of the firmware platform being built. Because +BrotliCustomDecompressLib is not consumed by any OvmfPkg or ArmVirtPkg +platforms, and we've removed the submodule earlier in this patch set, +remove the include path too. + +Signed-off-by: Laszlo Ersek +(cherry picked from commit e05e0de713c4a2b8adb6ff9809611f222bfe50ed) +--- + MdeModulePkg/MdeModulePkg.dec | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec +index e8058c8bfaec..f33312fb3510 100644 +--- a/MdeModulePkg/MdeModulePkg.dec ++++ b/MdeModulePkg/MdeModulePkg.dec +@@ -25,9 +25,6 @@ [Defines] + [Includes] + Include + +-[Includes.Common.Private] +- Library/BrotliCustomDecompressLib/brotli/c/include +- + [LibraryClasses] + ## @libraryclass Defines a set of methods to reset whole system. + ResetSystemLib|Include/Library/ResetSystemLib.h +-- +2.39.2 + diff --git a/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch b/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch new file mode 100644 index 00000000000..9e92fd6c64c --- /dev/null +++ b/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch @@ -0,0 +1,180 @@ +From 84149154c873d3521bf0848d8473f2c09f3ccca0 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 25 Feb 2014 22:40:01 +0100 +Subject: [PATCH 03/14] MdeModulePkg: TerminalDxe: set xterm resolution on mode + change (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Resolve harmless conflict in "MdeModulePkg/MdeModulePkg.dec", + originating from new upstream commits + - 45bc28172fbf ("MdeModulePkg.dec: Change PCDs for status code.", + 2020-06-18), + - 0785c619a58a ("MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe Resizable + BAR Capability", 2021-01-04), + - ef23012e5439 ("MdeModulePkg: Change default value of + PcdPcieResizableBarSupport to FALSE", 2021-01-14). + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- Resolve trivial conflict in "MdeModulePkg/MdeModulePkg.dec", arising + from upstream commit 166830d8f7ca ("MdeModulePkg/dec: add + PcdTcgPfpMeasurementRevision PCD", 2020-01-06). + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- Conflict in "MdeModulePkg/MdeModulePkg.dec" due to upstream commits + - 1103ba946aee ("MdeModulePkg: Add Capsule On Disk related definition.", + 2019-06-26), + - 1c7b3eb84631 ("MdeModulePkg/DxeIpl: Introduce PCD + PcdUse5LevelPageTable", 2019-08-09), + with easy manual resolution. + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- no change + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no change + +Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: + +- Refresh downstream-only commit 2909e025db68 against "MdeModulePkg.dec" + context change from upstream commits e043f7895b83 ("MdeModulePkg: Add + PCD PcdPteMemoryEncryptionAddressOrMask", 2017-02-27) and 76081dfcc5b2 + ("MdeModulePkg: Add PROMPT&HELP string of pcd to UNI file", 2017-03-03). + +Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: + +- refresh commit 519b9751573e against various context changes + +The + + CSI Ps ; Ps ; Ps t + +escape sequence serves for window manipulation. We can use the + + CSI 8 ; ; t + +sequence to adapt eg. the xterm window size to the selected console mode. + +Reference: +Contributed-under: TianoCore Contribution Agreement 1.0 +Signed-off-by: Laszlo Ersek +(cherry picked from commit 2909e025db6878723b49644a8a0cf160d07e6444) +(cherry picked from commit b9c5c901f25e48d68eef6e78a4abca00e153f574) +(cherry picked from commit b7f6115b745de8cbc5214b6ede33c9a8558beb90) +(cherry picked from commit 67415982afdc77922aa37496c981adeb4351acdb) +(cherry picked from commit cfccb98d13e955beb0b93b4a75a973f30c273ffc) +(cherry picked from commit a11602f5e2ef930be5b693ddfd0c789a1bd4c60c) +(cherry picked from commit bc2266f20de5db1636e09a07e4a72c8dbf505f5a) +--- + MdeModulePkg/MdeModulePkg.dec | 4 +++ + .../Console/TerminalDxe/TerminalDxe.inf | 2 ++ + .../Console/TerminalDxe/TerminalConOut.c | 29 +++++++++++++++++++ + 3 files changed, 35 insertions(+) + +diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec +index f33312fb3510..020f62fcc668 100644 +--- a/MdeModulePkg/MdeModulePkg.dec ++++ b/MdeModulePkg/MdeModulePkg.dec +@@ -2102,6 +2102,10 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] + # @Prompt The shared bit mask when Intel Tdx is enabled. + gEfiMdeModulePkgTokenSpaceGuid.PcdTdxSharedBitMask|0x0|UINT64|0x10000025 + ++ ## Controls whether TerminalDxe outputs an XTerm resize sequence on terminal ++ # mode change. ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE|BOOLEAN|0x00010080 ++ + [PcdsPatchableInModule] + ## Specify memory size with page number for PEI code when + # Loading Module at Fixed Address feature is enabled. +diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +index b2a8aeba8510..eff625346539 100644 +--- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf ++++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +@@ -55,6 +55,7 @@ [LibraryClasses] + DebugLib + PcdLib + BaseLib ++ PrintLib + + [Guids] + ## SOMETIMES_PRODUCES ## Variable:L"ConInDev" +@@ -87,6 +88,7 @@ [Protocols] + [Pcd] + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType ## SOMETIMES_CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## CONSUMES + + # [Event] + # # Relative timer event set by UnicodeToEfiKey(), used to be one 2 seconds input timeout. +diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c +index 7809869e7d49..496849458db4 100644 +--- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c ++++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c +@@ -7,6 +7,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent + + **/ + ++#include ++ + #include "Terminal.h" + + // +@@ -80,6 +82,15 @@ CHAR16 mSetCursorPositionString[] = { ESC, '[', '0', '0', ';', '0', '0', 'H', 0 + CHAR16 mCursorForwardString[] = { ESC, '[', '0', '0', 'C', 0 }; + CHAR16 mCursorBackwardString[] = { ESC, '[', '0', '0', 'D', 0 }; + ++// ++// Note that this is an ASCII format string, taking two INT32 arguments: ++// rows, columns. ++// ++// A %d (INT32) format specification can expand to at most 11 characters. ++// ++CHAR8 mResizeTextAreaFormatString[] = "\x1B[8;%d;%dt"; ++#define RESIZE_SEQ_SIZE (sizeof mResizeTextAreaFormatString + 2 * (11 - 2)) ++ + // + // Body of the ConOut functions + // +@@ -498,6 +509,24 @@ TerminalConOutSetMode ( + return EFI_DEVICE_ERROR; + } + ++ if (PcdGetBool (PcdResizeXterm)) { ++ CHAR16 ResizeSequence[RESIZE_SEQ_SIZE]; ++ ++ UnicodeSPrintAsciiFormat ( ++ ResizeSequence, ++ sizeof ResizeSequence, ++ mResizeTextAreaFormatString, ++ (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows, ++ (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns ++ ); ++ TerminalDevice->OutputEscChar = TRUE; ++ Status = This->OutputString (This, ResizeSequence); ++ TerminalDevice->OutputEscChar = FALSE; ++ if (EFI_ERROR (Status)) { ++ return EFI_DEVICE_ERROR; ++ } ++ } ++ + This->Mode->Mode = (INT32)ModeNumber; + + Status = This->ClearScreen (This); +-- +2.39.2 + diff --git a/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch b/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch new file mode 100644 index 00000000000..5262382f974 --- /dev/null +++ b/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch @@ -0,0 +1,219 @@ +From defcdb8fe170e58cb0b0de8ddd2784bcc2dd67d7 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 14 Oct 2015 15:59:06 +0200 +Subject: [PATCH 04/14] OvmfPkg: take PcdResizeXterm from the QEMU command line + (RH only) + +edk2-stable202205 rebase + +- re-add UPDATE_BOOLEAN_PCD_FROM_FW_CFG +- add microvm, cloudhw and inteltdx + +edk2-stable202108 rebase + +- resolve conflict in OvmfPkg/PlatformPei/PlatformPei.inf + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been + introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit + to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. + + We've always patched all those DSC/FDF files in OvmfPkg down-stream that + made sense at least in theory on QEMU. (For example, we've always + patched "OvmfPkgIa32.dsc" and "OvmfPkgIa32.fdf", even though we never + build or ship the pure IA32 firmware platform.) Follow suit with + "AmdSevX64.dsc". + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- Resolve contextual conflict in the DSC files, from upstream commit + b0ed7ebdebd1 ("OvmfPkg: set fixed FlashNvStorage base addresses with -D + SMM_REQUIRE", 2020-03-12). + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- no change + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- no change + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no change + +Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: + +- refresh downstream-only commit 8abc2a6ddad2 against context differences + in the DSC files from upstream commit 5e167d7e784c + ("OvmfPkg/PlatformPei: don't allocate reserved mem varstore if + SMM_REQUIRE", 2017-03-12). + +Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: + +- no changes + +Contributed-under: TianoCore Contribution Agreement 1.0 +Signed-off-by: Laszlo Ersek +(cherry picked from commit 6fa0c4d67c0bb8bde2ddd6db41c19eb0c40b2721) +(cherry picked from commit 8abc2a6ddad25af7e88dc0cf57d55dfb75fbf92d) +(cherry picked from commit b311932d3841c017a0f0fec553edcac365cc2038) +(cherry picked from commit 61914fb81cf624c9028d015533b400b2794e52d3) +(cherry picked from commit 2ebf3cc2ae99275d63bb6efd3c22dec76251a853) +(cherry picked from commit f9b73437b9b231773c1a20e0c516168817a930a2) +(cherry picked from commit 2cc462ee963d0be119bc97bfc9c70d292a40516f) +(cherry picked from commit 51e0de961029af84b5bdbfddcc9762b1819d500f) +--- + OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + + OvmfPkg/CloudHv/CloudHvX64.dsc | 1 + + OvmfPkg/IntelTdx/IntelTdxX64.dsc | 1 + + OvmfPkg/Microvm/MicrovmX64.dsc | 1 + + OvmfPkg/OvmfPkgIa32.dsc | 1 + + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + + OvmfPkg/OvmfPkgX64.dsc | 1 + + OvmfPkg/PlatformPei/PlatformPei.inf | 1 + + OvmfPkg/PlatformPei/Platform.c | 13 +++++++++++++ + 9 files changed, 21 insertions(+) + +diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc +index 1cebd6b4bcc2..0bec51d5eeac 100644 +--- a/OvmfPkg/AmdSev/AmdSevX64.dsc ++++ b/OvmfPkg/AmdSev/AmdSevX64.dsc +@@ -477,6 +477,7 @@ [PcdsFixedAtBuild] + [PcdsDynamicDefault] + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 +diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc +index fda7d2b9e52f..97a74cfb07e4 100644 +--- a/OvmfPkg/CloudHv/CloudHvX64.dsc ++++ b/OvmfPkg/CloudHv/CloudHvX64.dsc +@@ -587,6 +587,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + !if $(SMM_REQUIRE) == FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 +diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc +index 95b9594ddce0..bf4bf4cb1d4c 100644 +--- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc ++++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc +@@ -485,6 +485,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 +diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc +index 0d65d21e651c..f123ca853085 100644 +--- a/OvmfPkg/Microvm/MicrovmX64.dsc ++++ b/OvmfPkg/Microvm/MicrovmX64.dsc +@@ -585,6 +585,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 +diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc +index 22dc29330d2d..9242e7714036 100644 +--- a/OvmfPkg/OvmfPkgIa32.dsc ++++ b/OvmfPkg/OvmfPkgIa32.dsc +@@ -606,6 +606,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + !if $(SMM_REQUIRE) == FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 +diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index 6b539814bdb0..43d40ddc9c46 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -613,6 +613,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + !if $(SMM_REQUIRE) == FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 +diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc +index e3c64456dfef..231e5e7e4d1c 100644 +--- a/OvmfPkg/OvmfPkgX64.dsc ++++ b/OvmfPkg/OvmfPkgX64.dsc +@@ -636,6 +636,7 @@ [PcdsDynamicDefault] + # ($(SMM_REQUIRE) == FALSE) + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE + !if $(SMM_REQUIRE) == FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 +diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/PlatformPei.inf +index 1fadadeb5565..3e28e1596d32 100644 +--- a/OvmfPkg/PlatformPei/PlatformPei.inf ++++ b/OvmfPkg/PlatformPei/PlatformPei.inf +@@ -99,6 +99,7 @@ [Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode + gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable + gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack +diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c +index 148240342b4b..d324ae95f8f5 100644 +--- a/OvmfPkg/PlatformPei/Platform.c ++++ b/OvmfPkg/PlatformPei/Platform.c +@@ -41,6 +41,18 @@ + + #include "Platform.h" + ++#define UPDATE_BOOLEAN_PCD_FROM_FW_CFG(TokenName) \ ++ do { \ ++ BOOLEAN Setting; \ ++ RETURN_STATUS PcdStatus; \ ++ \ ++ if (!RETURN_ERROR (QemuFwCfgParseBool ( \ ++ "opt/ovmf/" #TokenName, &Setting))) { \ ++ PcdStatus = PcdSetBoolS (TokenName, Setting); \ ++ ASSERT_RETURN_ERROR (PcdStatus); \ ++ } \ ++ } while (0) ++ + EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { + { + EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, +@@ -385,6 +397,7 @@ InitializePlatform ( + MemTypeInfoInitialization (PlatformInfoHob); + MemMapInitialization (PlatformInfoHob); + NoexecDxeInitialization (PlatformInfoHob); ++ UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdResizeXterm); + } + + InstallClearCacheCallback (); +-- +2.39.2 + diff --git a/SPECS-EXTENDED/edk2/0010-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch b/SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch similarity index 51% rename from SPECS-EXTENDED/edk2/0010-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch rename to SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch index 68439885896..b553de6a209 100644 --- a/SPECS-EXTENDED/edk2/0010-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch +++ b/SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch @@ -1,15 +1,68 @@ -From 4de2ee915d9f3eea6d32cd010ab856ac176f3983 Mon Sep 17 00:00:00 2001 +From 2d09cde35ac031aabf7a1dc09c8c8a5e65917ae8 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Sun, 26 Jul 2015 08:02:50 +0000 -Subject: [PATCH] ArmVirtPkg: take PcdResizeXterm from the QEMU command line - (RH only) +Subject: [PATCH 05/14] ArmVirtPkg: take PcdResizeXterm from the QEMU command + line (RH only) -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: -- Adapt commit 6b97969096a3 to the fact that upstream has deprecated such - setter functions for dynamic PCDs that don't return a status code (such - as PcdSetBool()). Employ PcdSetBoolS(), and assert that it succeeds -- - there's really no circumstance in this case when it could fail. +- no change + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- Resolve leading context divergence in "ArmVirtPkg/ArmVirtQemu.dsc", + arising from upstream commits: + + - 82662a3b5f56 ("ArmVirtPkg/PlatformPeiLib: discover the TPM base + address from the DT", 2020-03-04) + + - ddd34a818315 ("ArmVirtPkg/ArmVirtQemu: enable TPM2 support in the PEI + phase", 2020-03-04) + + - cdc3fa54184a ("ArmVirtPkg: control PXEv4 / PXEv6 boot support from the + QEMU command line", 2020-04-28) + +- Rework the downstream patch quite a bit, paralleling the upstream work + done for in commit + range 64ab457d1f21..cdc3fa54184a: + + - Refresh copyright year in TerminalPcdProducerLib.{inf,c}. Also replace + open-coded BSDL with "SPDX-License-Identifier: BSD-2-Clause-Patent". + + - Simplify LIBRARY_CLASS: this lib instance is meant to be consumed only + via NULL class resolution (basically: as a plugin), so use NULL for + LIBRARY_CLASS, not "TerminalPcdProducerLib|DXE_DRIVER". + + - Sort the [Packages] section alphabetically in the INF file. + + - Replace the open-coded GetNamedFwCfgBoolean() function with a call to + QemuFwCfgParseBool(), from QemuFwCfgSimpleParserLib. + + - Add the SOMETIMES_PRODUCES usage comment in the [Pcd] section of the + INF file. + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- no change + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- no change + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no change Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: @@ -18,31 +71,44 @@ Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: ("ArmVirtPkg/PlatformHasAcpiDtDxe: allow guest level ACPI disable override", 2017-03-29). +Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: + +- Adapt commit 6b97969096a3 to the fact that upstream has deprecated such + setter functions for dynamic PCDs that don't return a status code (such + as PcdSetBool()). Employ PcdSetBoolS(), and assert that it succeeds -- + there's really no circumstance in this case when it could fail. + Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek (cherry picked from commit d4564d39dfdbf74e762af43314005a2c026cb262) -Signed-off-by: Paolo Bonzini +(cherry picked from commit c9081ebe3bcd28e5cce4bf58bd8d4fca12f9af7c) +(cherry picked from commit 8e92730c8e1cdb642b3b3e680e643ff774a90c65) +(cherry picked from commit 9448b6b46267d8d807fac0c648e693171bb34806) +(cherry picked from commit 232fcf06f6b3048b7c2ebd6931f23186b3852f04) +(cherry picked from commit 8338545260fbb423f796d5196faaaf8ff6e1ed99) +(cherry picked from commit a5f7a57bf390f1f340ff1d1f1884a73716817ef1) --- - ArmVirtPkg/ArmVirtQemu.dsc | 6 +- - .../TerminalPcdProducerLib.c | 87 +++++++++++++++++++ - .../TerminalPcdProducerLib.inf | 41 +++++++++ - 3 files changed, 133 insertions(+), 1 deletion(-) - create mode 100644 ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c + ArmVirtPkg/ArmVirtQemu.dsc | 7 +++- + .../TerminalPcdProducerLib.inf | 33 ++++++++++++++++++ + .../TerminalPcdProducerLib.c | 34 +++++++++++++++++++ + 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf + create mode 100644 ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc -index 2405636af6..24c6ea2e64 100644 +index 72a0cacab4a8..7a3be7e8592c 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc -@@ -249,6 +249,7 @@ - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 - gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640 - gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 +@@ -304,6 +304,8 @@ [PcdsPatchableInModule] + gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress|0x0 + !endif + + gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE ++ + [PcdsDynamicHii] + gUefiOvmfPkgTokenSpaceGuid.PcdForceNoAcpi|L"ForceNoAcpi"|gOvmfVariableGuid|0x0|FALSE|NV,BS - # - # SMBIOS entry point version -@@ -374,7 +375,10 @@ +@@ -418,7 +420,10 @@ [Components.common] MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf @@ -54,84 +120,70 @@ index 2405636af6..24c6ea2e64 100644 MdeModulePkg/Universal/SerialDxe/SerialDxe.inf MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf +diff --git a/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf +new file mode 100644 +index 000000000000..a51dbd1670a8 +--- /dev/null ++++ b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf +@@ -0,0 +1,33 @@ ++## @file ++# Plugin library for setting up dynamic PCDs for TerminalDxe, from fw_cfg ++# ++# Copyright (C) 2015-2020, Red Hat, Inc. ++# Copyright (c) 2014, Linaro Ltd. All rights reserved.
++# ++# SPDX-License-Identifier: BSD-2-Clause-Patent ++## ++ ++[Defines] ++ INF_VERSION = 0x00010005 ++ BASE_NAME = TerminalPcdProducerLib ++ FILE_GUID = 4a0c5ed7-8c42-4c01-8f4c-7bf258316a96 ++ MODULE_TYPE = BASE ++ VERSION_STRING = 1.0 ++ LIBRARY_CLASS = NULL ++ CONSTRUCTOR = TerminalPcdProducerLibConstructor ++ ++[Sources] ++ TerminalPcdProducerLib.c ++ ++[Packages] ++ MdeModulePkg/MdeModulePkg.dec ++ MdePkg/MdePkg.dec ++ OvmfPkg/OvmfPkg.dec ++ ++[LibraryClasses] ++ DebugLib ++ PcdLib ++ QemuFwCfgSimpleParserLib ++ ++[Pcd] ++ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## SOMETIMES_PRODUCES diff --git a/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c new file mode 100644 -index 0000000000..814ad48199 +index 000000000000..bfd3a6a535f9 --- /dev/null +++ b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c -@@ -0,0 +1,87 @@ +@@ -0,0 +1,34 @@ +/** @file +* Plugin library for setting up dynamic PCDs for TerminalDxe, from fw_cfg +* -+* Copyright (C) 2015-2016, Red Hat, Inc. ++* Copyright (C) 2015-2020, Red Hat, Inc. +* Copyright (c) 2014, Linaro Ltd. All rights reserved.
+* -+* This program and the accompanying materials are licensed and made available -+* under the terms and conditions of the BSD License which accompanies this -+* distribution. The full text of the license may be found at -+* http://opensource.org/licenses/bsd-license.php -+* -+* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR -+* IMPLIED. -+* ++* SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include -+#include -+ -+STATIC -+RETURN_STATUS -+GetNamedFwCfgBoolean ( -+ IN CONST CHAR8 *FwCfgFileName, -+ OUT BOOLEAN *Setting -+ ) -+{ -+ RETURN_STATUS Status; -+ FIRMWARE_CONFIG_ITEM FwCfgItem; -+ UINTN FwCfgSize; -+ UINT8 Value[3]; -+ -+ Status = QemuFwCfgFindFile (FwCfgFileName, &FwCfgItem, &FwCfgSize); -+ if (RETURN_ERROR (Status)) { -+ return Status; -+ } -+ if (FwCfgSize > sizeof Value) { -+ return RETURN_BAD_BUFFER_SIZE; -+ } -+ QemuFwCfgSelectItem (FwCfgItem); -+ QemuFwCfgReadBytes (FwCfgSize, Value); -+ -+ if ((FwCfgSize == 1) || -+ (FwCfgSize == 2 && Value[1] == '\n') || -+ (FwCfgSize == 3 && Value[1] == '\r' && Value[2] == '\n')) { -+ switch (Value[0]) { -+ case '0': -+ case 'n': -+ case 'N': -+ *Setting = FALSE; -+ return RETURN_SUCCESS; -+ -+ case '1': -+ case 'y': -+ case 'Y': -+ *Setting = TRUE; -+ return RETURN_SUCCESS; -+ -+ default: -+ break; -+ } -+ } -+ return RETURN_PROTOCOL_ERROR; -+} ++#include + +#define UPDATE_BOOLEAN_PCD_FROM_FW_CFG(TokenName) \ + do { \ + BOOLEAN Setting; \ + RETURN_STATUS PcdStatus; \ + \ -+ if (!RETURN_ERROR (GetNamedFwCfgBoolean ( \ ++ if (!RETURN_ERROR (QemuFwCfgParseBool ( \ + "opt/org.tianocore.edk2.aavmf/" #TokenName, &Setting))) { \ + PcdStatus = PcdSetBoolS (TokenName, Setting); \ + ASSERT_RETURN_ERROR (PcdStatus); \ @@ -147,50 +199,6 @@ index 0000000000..814ad48199 + UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdResizeXterm); + return RETURN_SUCCESS; +} -diff --git a/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf -new file mode 100644 -index 0000000000..fecb37bcdf ---- /dev/null -+++ b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf -@@ -0,0 +1,41 @@ -+## @file -+# Plugin library for setting up dynamic PCDs for TerminalDxe, from fw_cfg -+# -+# Copyright (C) 2015-2016, Red Hat, Inc. -+# Copyright (c) 2014, Linaro Ltd. All rights reserved.
-+# -+# This program and the accompanying materials are licensed and made available -+# under the terms and conditions of the BSD License which accompanies this -+# distribution. The full text of the license may be found at -+# http://opensource.org/licenses/bsd-license.php -+# -+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR -+# IMPLIED. -+# -+## -+ -+[Defines] -+ INF_VERSION = 0x00010005 -+ BASE_NAME = TerminalPcdProducerLib -+ FILE_GUID = 4a0c5ed7-8c42-4c01-8f4c-7bf258316a96 -+ MODULE_TYPE = BASE -+ VERSION_STRING = 1.0 -+ LIBRARY_CLASS = TerminalPcdProducerLib|DXE_DRIVER -+ CONSTRUCTOR = TerminalPcdProducerLibConstructor -+ -+[Sources] -+ TerminalPcdProducerLib.c -+ -+[Packages] -+ MdePkg/MdePkg.dec -+ OvmfPkg/OvmfPkg.dec -+ MdeModulePkg/MdeModulePkg.dec -+ -+[LibraryClasses] -+ DebugLib -+ PcdLib -+ QemuFwCfgLib -+ -+[Pcd] -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm +-- +2.39.2 + diff --git a/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch b/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch new file mode 100644 index 00000000000..e4dfc5f37f1 --- /dev/null +++ b/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch @@ -0,0 +1,121 @@ +From 9070eb8deb0a973e9dd8f96b70955c7d3abca074 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 21 Nov 2017 00:57:45 +0100 +Subject: [PATCH 06/14] OvmfPkg: enable DEBUG_VERBOSE (RHEL only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been + introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit + to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. + +- Remove obsolete commit message tags related to downstream patch + management: Message-id, Patchwork-id, O-Subject, Acked-by, From + (RHBZ#1846481). + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- context difference from upstream commit 46bb81200742 ("OvmfPkg: Make + SOURCE_DEBUG_ENABLE actually need to be set to TRUE", 2019-10-22) + resolved automatically + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- no change + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- no change + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no changes + +Bugzilla: 1488247 + +Set the DEBUG_VERBOSE bit (0x00400000) in the log mask. We want detailed +debug messages, and code in OvmfPkg logs many messages on the +DEBUG_VERBOSE level. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Paolo Bonzini +(this patch was previously applied as commit 78d3ed73172b5738e32d2b0bc03f7984b9584117) +(cherry picked from commit 7aeeaabc9871f657e65d2b99d81011b4964a1ce9) +(cherry picked from commit a0617a6be1a80966099ddceb010f89202a79ee76) +(cherry picked from commit 759bd3f591e2db699bdef4c7ea4e97c908e7f027) +(cherry picked from commit 7e6d5dc4078c64be6d55d8fc3317c59a91507a50) +(cherry picked from commit 3cb92f9ba18ac79911bd5258ff4f949cc617ae89) +(cherry picked from commit 5ecc18badaabe774d9d0806b027ab63a30c6a2d7) +--- + OvmfPkg/AmdSev/AmdSevX64.dsc | 2 +- + OvmfPkg/OvmfPkgIa32.dsc | 2 +- + OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- + OvmfPkg/OvmfPkgX64.dsc | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc +index 0bec51d5eeac..ae3f9c75c4a4 100644 +--- a/OvmfPkg/AmdSev/AmdSevX64.dsc ++++ b/OvmfPkg/AmdSev/AmdSevX64.dsc +@@ -429,7 +429,7 @@ [PcdsFixedAtBuild] + # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may + # // significantly impact boot performance + # DEBUG_ERROR 0x80000000 // Error +- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F + + !if $(SOURCE_DEBUG_ENABLE) == TRUE + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 +diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc +index 9242e7714036..bb3b0c1c96f3 100644 +--- a/OvmfPkg/OvmfPkgIa32.dsc ++++ b/OvmfPkg/OvmfPkgIa32.dsc +@@ -546,7 +546,7 @@ [PcdsFixedAtBuild] + # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may + # // significantly impact boot performance + # DEBUG_ERROR 0x80000000 // Error +- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F + + !if $(SOURCE_DEBUG_ENABLE) == TRUE + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 +diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index 43d40ddc9c46..19b968bd945d 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -551,7 +551,7 @@ [PcdsFixedAtBuild] + # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may + # // significantly impact boot performance + # DEBUG_ERROR 0x80000000 // Error +- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F + + !if $(SOURCE_DEBUG_ENABLE) == TRUE + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 +diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc +index 231e5e7e4d1c..876f2374a2cc 100644 +--- a/OvmfPkg/OvmfPkgX64.dsc ++++ b/OvmfPkg/OvmfPkgX64.dsc +@@ -572,7 +572,7 @@ [PcdsFixedAtBuild] + # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may + # // significantly impact boot performance + # DEBUG_ERROR 0x80000000 // Error +- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F + + !if $(SOURCE_DEBUG_ENABLE) == TRUE + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 +-- +2.39.2 + diff --git a/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch b/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch new file mode 100644 index 00000000000..e2390b98d42 --- /dev/null +++ b/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch @@ -0,0 +1,173 @@ +From ea0ec39c85e21daa5b4f31884ee1e4a198c78fcd Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 21 Nov 2017 00:57:46 +0100 +Subject: [PATCH 07/14] OvmfPkg: silence DEBUG_VERBOSE (0x00400000) in + QemuVideoDxe/QemuRamfbDxe (RH) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been + introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit + to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. + +- Remove obsolete commit message tags related to downstream patch + management: Message-id, Patchwork-id, O-Subject, Acked-by, From + (RHBZ#1846481). + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- no change + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- Due to upstream commit 4b04d9d73604 ("OvmfPkg: Don't build in + QemuVideoDxe when we have CSM", 2019-06-26), the contexts of + "QemuVideoDxe.inf" / "QemuRamfbDxe.inf" have changed in the DSC files. + Resolve the conflict manually. + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- Upstream commit 1d25ff51af5c ("OvmfPkg: add QemuRamfbDxe", 2018-06-14) + introduced another GOP driver that consumes FrameBufferBltLib, and + thereby produces a large number of (mostly useless) debug messages at + the DEBUG_VERBOSE level. Extend the patch to suppress those messages in + both QemuVideoDxe and QemuRamfbDxe; update the subject accordingly. + QemuRamfbDxe itself doesn't log anything at the VERBOSE level (see also + the original commit message at the bottom of this downstream patch). + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no changes + +Bugzilla: 1488247 + +In commit 5b2291f9567a ("OvmfPkg: QemuVideoDxe uses +MdeModulePkg/FrameBufferLib"), QemuVideoDxe was rebased to +FrameBufferBltLib. + +The FrameBufferBltLib instance added in commit b1ca386074bd +("MdeModulePkg: Add FrameBufferBltLib library instance") logs many +messages on the VERBOSE level; for example, a normal boot with OVMF can +produce 500+ "VideoFill" messages, dependent on the progress bar, when the +VERBOSE bit is set in PcdDebugPrintErrorLevel. + +QemuVideoDxe itself doesn't log anything at the VERBOSE level, so we lose +none of its messages this way. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Paolo Bonzini +(this patch was previously applied as commit 9b0d031dee7e823f6717bab73e422fbc6f0a6c52) +(cherry picked from commit 9122d5f2e8d8d289064d1e1700cb61964d9931f3) +(cherry picked from commit 7eb3be1d4ccafc26c11fe5afb95cc12b250ce6f0) +(cherry picked from commit bd650684712fb840dbcda5d6eaee065bd9e91fa1) +(cherry picked from commit b06b87f8ffd4fed4ef7eacb13689a9b6d111f850) +(cherry picked from commit c8c3f893e7c3710afe45c46839e97954871536e4) +(cherry picked from commit 1355849ad97c1e4a5c430597a377165a5cc118f7) +--- + OvmfPkg/AmdSev/AmdSevX64.dsc | 10 ++++++++-- + OvmfPkg/OvmfPkgIa32.dsc | 10 ++++++++-- + OvmfPkg/OvmfPkgIa32X64.dsc | 10 ++++++++-- + OvmfPkg/OvmfPkgX64.dsc | 10 ++++++++-- + 4 files changed, 32 insertions(+), 8 deletions(-) + +diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc +index ae3f9c75c4a4..c7d7add60d44 100644 +--- a/OvmfPkg/AmdSev/AmdSevX64.dsc ++++ b/OvmfPkg/AmdSev/AmdSevX64.dsc +@@ -682,8 +682,14 @@ [Components] + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf + +- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + + # +diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc +index bb3b0c1c96f3..30b843d2287a 100644 +--- a/OvmfPkg/OvmfPkgIa32.dsc ++++ b/OvmfPkg/OvmfPkgIa32.dsc +@@ -851,9 +851,15 @@ [Components] + MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf + + !ifndef $(CSM_ENABLE) +- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf ++ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + !endif +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + + # +diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index 19b968bd945d..2327c5c29611 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -864,9 +864,15 @@ [Components.X64] + MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf + + !ifndef $(CSM_ENABLE) +- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf ++ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + !endif +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + + # +diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc +index 876f2374a2cc..49b914c29f35 100644 +--- a/OvmfPkg/OvmfPkgX64.dsc ++++ b/OvmfPkg/OvmfPkgX64.dsc +@@ -937,9 +937,15 @@ [Components] + MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf + + !ifndef $(CSM_ENABLE) +- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf ++ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + !endif +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + + # +-- +2.39.2 + diff --git a/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch b/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch new file mode 100644 index 00000000000..2c3a40872d9 --- /dev/null +++ b/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch @@ -0,0 +1,97 @@ +From a7f8d385ac55fce62cc5a9a1608e4d085801e6f3 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 27 Jan 2016 03:05:18 +0100 +Subject: [PATCH 08/14] ArmVirtPkg: silence DEBUG_VERBOSE (0x00400000) in + QemuRamfbDxe (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- no change + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- no change + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- The previous version of this patch (downstream commit 76b4ac28e975) + caused a regression (RHBZ#1714446), which was fixed up in downstream + commit 5a216abaa737 ("ArmVirtPkg: silence DEBUG_VERBOSE masking + ~0x00400000 in QemuRamfbDxe (RH only)", 2019-08-05). + + Squash the fixup into the original patch. Fuse the commit messages. + (Acked-by tags are not preserved, lest we confuse ourselves while + reviewing this rebase.) + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- new patch, due to upstream commit c64688f36a8b ("ArmVirtPkg: add + QemuRamfbDxe", 2018-06-14) + +QemuRamfbDxe uses FrameBufferLib. The FrameBufferBltLib instance added in +commit b1ca386074bd ("MdeModulePkg: Add FrameBufferBltLib library +instance") logs many messages on the VERBOSE level; for example, a normal +boot with ArmVirtQemu[Kernel] can produce 500+ "VideoFill" messages, +dependent on the progress bar, when the VERBOSE bit is set in +PcdDebugPrintErrorLevel. + +Clear the VERBOSE bit without touching other bits -- those other bits +differ between the "silent" and "verbose" builds, so we can't set them as +constants. + +QemuRamfbDxe itself doesn't log anything at the VERBOSE level, so we lose +none of its messages, with the VERBOSE bit clear. + +Signed-off-by: Laszlo Ersek +(cherry picked from commit 76b4ac28e975bd63c25db903a1d42c47b38cc756) +Reported-by: Andrew Jones +Suggested-by: Laszlo Ersek +Signed-off-by: Philippe Mathieu-Daude +(cherry picked from commit 5a216abaa737195327235e37563b18a6bf2a74dc) +Signed-off-by: Laszlo Ersek +(cherry picked from commit e5b8152bced2364a1ded0926dbba4d65e23e3f84) +(cherry picked from commit e7f57f154439c1c18ea5030b01f8d7bc492698b2) +--- + ArmVirtPkg/ArmVirtQemu.dsc | 5 ++++- + ArmVirtPkg/ArmVirtQemuKernel.dsc | 5 ++++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc +index 7a3be7e8592c..865172c5d56b 100644 +--- a/ArmVirtPkg/ArmVirtQemu.dsc ++++ b/ArmVirtPkg/ArmVirtQemu.dsc +@@ -546,7 +546,10 @@ [Components.common] + # + # Video support + # +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|($(DEBUG_PRINT_ERROR_LEVEL)) & 0xFFBFFFFF ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + OvmfPkg/PlatformDxe/Platform.inf + +diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc +index 3cb9120e4e10..02877284bfa3 100644 +--- a/ArmVirtPkg/ArmVirtQemuKernel.dsc ++++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc +@@ -444,7 +444,10 @@ [Components.common] + # + # Video support + # +- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|($(DEBUG_PRINT_ERROR_LEVEL)) & 0xFFBFFFFF ++ } + OvmfPkg/VirtioGpuDxe/VirtioGpu.inf + OvmfPkg/PlatformDxe/Platform.inf + +-- +2.39.2 + diff --git a/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch b/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch new file mode 100644 index 00000000000..f4cbed4cc86 --- /dev/null +++ b/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch @@ -0,0 +1,96 @@ +From 08c466269cf4728e954d61c1801b0eb6ca4175ff Mon Sep 17 00:00:00 2001 +From: Philippe Mathieu-Daude +Date: Thu, 1 Aug 2019 20:43:48 +0200 +Subject: [PATCH 09/14] OvmfPkg: QemuRamfbDxe: Do not report DXE failure on + Aarch64 silent builds (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- no change + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- no change + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- We have to carry this downstream-only patch -- committed originally as + aaaedc1e2cfd -- indefinitely. + +- To avoid confusion, remove the tags from the commit message that had + been added by the downstream maintainer scripts, such as: Message-id, + Patchwork-id, O-Subject, Acked-by. These remain available on the + original downstream commit. The Bugzilla line is preserved, as it + doesn't relate to a specific posting, but to the problem. + +Bugzilla: 1714446 + +To suppress an error message on the silent build when ramfb is +not configured, change QemuRamfbDxe to return EFI_SUCCESS even +when it fails. +Some memory is wasted (driver stays resident without +any good use), but it is mostly harmless, as the memory +is released by the OS after ExitBootServices(). + +Suggested-by: Laszlo Ersek +Signed-off-by: Philippe Mathieu-Daude +(cherry picked from commit aaaedc1e2cfd55ef003fb1b5a37c73a196b26dc7) +Signed-off-by: Laszlo Ersek +(cherry picked from commit aa2b66b18a62d652bdbefae7b5732297294306ca) +(cherry picked from commit deb3451034326b75fd760aba47a5171493ff055e) +--- + OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf | 1 + + OvmfPkg/QemuRamfbDxe/QemuRamfb.c | 15 +++++++++++++++ + 2 files changed, 16 insertions(+) + +diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf +index e3890b8c202f..6ffee5acb24c 100644 +--- a/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf ++++ b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf +@@ -29,6 +29,7 @@ [LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib ++ DebugPrintErrorLevelLib + DevicePathLib + FrameBufferBltLib + MemoryAllocationLib +diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c +index f5113fbc78a6..0295986fe0f1 100644 +--- a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c ++++ b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -259,6 +260,20 @@ InitializeQemuRamfb ( + + Status = QemuFwCfgFindFile ("etc/ramfb", &mRamfbFwCfgItem, &FwCfgSize); + if (EFI_ERROR (Status)) { ++ #if defined (MDE_CPU_AARCH64) ++ // ++ // RHBZ#1714446 ++ // If no ramfb device was configured, this platform DXE driver should ++ // returns EFI_NOT_FOUND, so the DXE Core can unload it. However, even ++ // using a silent build, an error message is issued to the guest console. ++ // Since this confuse users, return success and stay resident. The wasted ++ // guest RAM still gets freed later after ExitBootServices(). ++ // ++ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { ++ return EFI_SUCCESS; ++ } ++ ++ #endif + return EFI_NOT_FOUND; + } + +-- +2.39.2 + diff --git a/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch b/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch new file mode 100644 index 00000000000..5d90a04a454 --- /dev/null +++ b/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch @@ -0,0 +1,131 @@ +From ce8bf8cbb5ad81677c2b632b98f527a1d9fda3b1 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 21 Nov 2017 00:57:47 +0100 +Subject: [PATCH 10/14] OvmfPkg: silence EFI_D_VERBOSE (0x00400000) in + NvmExpressDxe (RH only) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been + introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit + to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. + +- Remove obsolete commit message tags related to downstream patch + management: Message-id, Patchwork-id, O-Subject, Acked-by, From + (RHBZ#1846481). + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- no change + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- no change + +Notes about the RHEL-8.0/20180508-ee3198e672e2 -> +RHEL-8.1/20190308-89910a39dcfd rebase: + +- no change + +Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> +RHEL-8.0/20180508-ee3198e672e2 rebase: + +- reorder the rebase changelog in the commit message so that it reads like + a blog: place more recent entries near the top +- no changes to the patch body + +Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: + +- no changes + +Bugzilla: 1488247 + +NvmExpressDxe logs all BlockIo read & write calls on the EFI_D_VERBOSE +level. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Paolo Bonzini +(this patch was previously applied as commit 5f432837b9c60c2929b13dda1a1b488d5c3a6d2f) +(cherry picked from commit 33e00146eb878588ad1395d7b1ae38f401729da4) +(cherry picked from commit bd10cabcfcb1bc9a32b05062f4ee3792e27bc2d8) +(cherry picked from commit 5a27af700f49e00608f232f618dedd7bf5e9b3e6) +(cherry picked from commit 58bba429b9ec7b78109940ef945d0dc93f3cd958) +(cherry picked from commit b8d0ebded8c2cf5b266c807519e2d8ccfd66fee6) +(cherry picked from commit ed89844b47f46cfe911f1bf2bda40e537a908502) +--- + OvmfPkg/AmdSev/AmdSevX64.dsc | 5 ++++- + OvmfPkg/OvmfPkgIa32.dsc | 5 ++++- + OvmfPkg/OvmfPkgIa32X64.dsc | 5 ++++- + OvmfPkg/OvmfPkgX64.dsc | 5 ++++- + 4 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc +index c7d7add60d44..2ea6fad2018a 100644 +--- a/OvmfPkg/AmdSev/AmdSevX64.dsc ++++ b/OvmfPkg/AmdSev/AmdSevX64.dsc +@@ -676,7 +676,10 @@ [Components] + OvmfPkg/SataControllerDxe/SataControllerDxe.inf + MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf +- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf ++ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf +diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc +index 30b843d2287a..db1cde0a3b03 100644 +--- a/OvmfPkg/OvmfPkgIa32.dsc ++++ b/OvmfPkg/OvmfPkgIa32.dsc +@@ -844,7 +844,10 @@ [Components] + OvmfPkg/SataControllerDxe/SataControllerDxe.inf + MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf +- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf ++ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf +diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index 2327c5c29611..938eaba74ad4 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -857,7 +857,10 @@ [Components.X64] + OvmfPkg/SataControllerDxe/SataControllerDxe.inf + MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf +- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf ++ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf +diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc +index 49b914c29f35..91fbe83bfac1 100644 +--- a/OvmfPkg/OvmfPkgX64.dsc ++++ b/OvmfPkg/OvmfPkgX64.dsc +@@ -930,7 +930,10 @@ [Components] + OvmfPkg/SataControllerDxe/SataControllerDxe.inf + MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf +- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf ++ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { ++ ++ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F ++ } + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf +-- +2.39.2 + diff --git a/SPECS/edk2/0011-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch b/SPECS/edk2/0011-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch new file mode 100644 index 00000000000..ad2ed6712e7 --- /dev/null +++ b/SPECS/edk2/0011-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch @@ -0,0 +1,181 @@ +From 586d6536227c0fd176a1567b9a59345de348d472 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 16 Nov 2019 17:11:27 +0100 +Subject: [PATCH 11/14] CryptoPkg/OpensslLib: list RHEL8-specific OpenSSL files + in the INFs (RH) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1938257 + +- Recreate the patch based on downstream commits: + + - 56c4bb81b311 ("CryptoPkg/OpensslLib: list RHEL8-specific OpenSSL files + in the INFs (RH)", 2020-06-05), + - e81751a1c303 ("CryptoPkg/OpensslLib: Upgrade OpenSSL to 1.1.1g", + 2020-11-23), + - 3e3fe5e62079 ("redhat: bump OpenSSL dist-git submodule to 1.1.1g+ / + RHEL-8.4", 2020-11-23). + + (1) At e81751a1c303, downstream edk2 was in sync with upstream edk2 + consuming OpenSSL 1.1.1g (upstream edk2 commit 8c30327debb2 + ("CryptoPkg/OpensslLib: Upgrade OpenSSL to 1.1.1g", 2020-07-25)). + + Since commit 8c30327debb2, upstream edk2 modified the OpensslLib INF + files, namely + + - CryptoPkg/Library/OpensslLib/OpensslLib.inf + - CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf + + in the following commits only: + + - be01087e0780 ("CryptoPkg/Library: Remove the redundant build + option", 2020-08-12), which did not affect the source file list at + all, + + - b5701a4c7a0f ("CryptoPkg: OpensslLib: Use RngLib to generate + entropy in rand_pool", 2020-09-18), which replaced some of the + *edk2-specific* "rand_pool_noise" source files with an RngLib + dependency. + + This means that the list of required, actual OpenSSL source files + has not changed in upstream edk2 since our downstream edk2 commit + e81751a1c303. + + (2) At commit 3e3fe5e62079 (the direct child of e81751a1c303), + downstream edk2's OpenSSL dependency was satisfied with RHEL-8 + OpenSSL at dist-git commit bdd048e929dc ("Two fixes that will be + shipped in RHEL-8.3.0.z", 2020-10-23). + + Since commit bdd048e929dc, RHEL-8 OpenSSL dist-git advanced + (fast-forwarded) to commit a75722161d20 ("Update to version 1.1.1k", + 2021-05-25), which is the current head of the rhel-8.5.0 branch. + (See also .) + + At both dist-git bdd048e929dc and dist-git a75722161d20, I built the + respective RHEL-8 OpenSSL *source* RPM, and prepped the respective + source tree, with "rpmbuild -bp". Subsequently I compared the + prepped source trees recursively. + + - The following files disappeared: + + - 29 backup files created by "patch", + + - the assembly generator perl script called + "ecp_nistz256-avx2.pl", which is not used during the build. + + - The following new files appeared: + + - 18 files directly or indirectly under the "test" subdirectory, + which are not used during the build, + + - 5 backup files created by "patch", + + - 2 DCL scripts used when building OpenSSL on OpenVMS. + + This means that the total list of RHEL-8 OpenSSL source files has + not changed in RHEL-8 OpenSSL dist-git since our downstream edk2 + commit 3e3fe5e62079. + + As a result, copy the "RHEL8-specific OpenSSL file list" sections + verbatim from the INF files, at downstream commit e81751a1c303. (I used + the "git checkout -p e81751a1c303 -- Library/OpensslLib/OpensslLib.inf + CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf" command.) + +Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> +RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: + +- "OpensslLib.inf": + + - Automatic leading context refresh against upstream commit c72ca4666886 + ("CryptoPkg/OpensslLib: Add "sort" keyword to header file parsing + loop", 2020-03-10). + + - Manual trailing context refresh against upstream commit b49a6c8f80d9 + ("CryptoPkg/OpensslLib: improve INF file consistency", 2019-12-02). + +- "OpensslLibCrypto.inf": + + - Automatic leading context refresh against upstream commits + 8906f076de35 ("CryptoPkg/OpensslLib: Add missing header files in INF + file", 2019-08-16) and 9f4fbd56d430 ("CryptoPkg/OpensslLib: Update + process_files.pl to generate .h files", 2019-10-30). + +Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> +RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: + +- new patch + +The downstream changes in RHEL8's OpenSSL package, for example in +"openssl-1.1.1-evp-kdf.patch", introduce new files, and even move some +preexistent code into those new files. In order to avoid undefined +references in link editing, we have to list the new files. + +Note: "process_files.pl" is not re-run at this time manually, because + +(a) "process_files.pl" would pollute the file list (and some of the + auto-generated header files) with RHEL8-specific FIPS artifacts, which + are explicitly unwanted in edk2, + +(b) The RHEL OpenSSL maintainer, Tomas Mraz, identified this specific set + of files in , + and will help with future changes too. + +Signed-off-by: Laszlo Ersek +(cherry picked from commit 57bd3f146590df8757865d8f2cdd1db3cf3f4d40) +(cherry picked from commit 56c4bb81b311dfcee6a34c81d3e4feeda7f88995) +--- + CryptoPkg/Library/OpensslLib/OpensslLib.inf | 12 ++++++++++++ + CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf | 12 ++++++++++++ + 2 files changed, 24 insertions(+) + +diff --git a/CryptoPkg/Library/OpensslLib/OpensslLib.inf b/CryptoPkg/Library/OpensslLib/OpensslLib.inf +index 60c6c24b0a67..7e78255467b1 100644 +--- a/CryptoPkg/Library/OpensslLib/OpensslLib.inf ++++ b/CryptoPkg/Library/OpensslLib/OpensslLib.inf +@@ -575,6 +575,18 @@ [Sources] + $(OPENSSL_PATH)/ssl/statem/statem.h + $(OPENSSL_PATH)/ssl/statem/statem_local.h + # Autogenerated files list ends here ++# RHEL8-specific OpenSSL file list starts here ++ $(OPENSSL_PATH)/crypto/bn/rsa_sup_mul.c ++ $(OPENSSL_PATH)/crypto/evp/kdf_lib.c ++ $(OPENSSL_PATH)/crypto/evp/pkey_kdf.c ++ $(OPENSSL_PATH)/crypto/kdf/kbkdf.c ++ $(OPENSSL_PATH)/crypto/kdf/kdf_local.h ++ $(OPENSSL_PATH)/crypto/kdf/kdf_util.c ++ $(OPENSSL_PATH)/crypto/kdf/krb5kdf.c ++ $(OPENSSL_PATH)/crypto/kdf/pbkdf2.c ++ $(OPENSSL_PATH)/crypto/kdf/sshkdf.c ++ $(OPENSSL_PATH)/crypto/kdf/sskdf.c ++# RHEL8-specific OpenSSL file list ends here + buildinf.h + ossl_store.c + rand_pool.c +diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf +index c4eaea888c1a..1c551cb0990c 100644 +--- a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf ++++ b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf +@@ -525,6 +525,18 @@ [Sources] + $(OPENSSL_PATH)/crypto/x509v3/standard_exts.h + $(OPENSSL_PATH)/crypto/x509v3/v3_admis.h + # Autogenerated files list ends here ++# RHEL8-specific OpenSSL file list starts here ++ $(OPENSSL_PATH)/crypto/bn/rsa_sup_mul.c ++ $(OPENSSL_PATH)/crypto/evp/kdf_lib.c ++ $(OPENSSL_PATH)/crypto/evp/pkey_kdf.c ++ $(OPENSSL_PATH)/crypto/kdf/kbkdf.c ++ $(OPENSSL_PATH)/crypto/kdf/kdf_local.h ++ $(OPENSSL_PATH)/crypto/kdf/kdf_util.c ++ $(OPENSSL_PATH)/crypto/kdf/krb5kdf.c ++ $(OPENSSL_PATH)/crypto/kdf/pbkdf2.c ++ $(OPENSSL_PATH)/crypto/kdf/sshkdf.c ++ $(OPENSSL_PATH)/crypto/kdf/sskdf.c ++# RHEL8-specific OpenSSL file list ends here + buildinf.h + ossl_store.c + rand_pool.c +-- +2.39.2 + diff --git a/SPECS/edk2/0012-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch b/SPECS/edk2/0012-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch new file mode 100644 index 00000000000..631e7a88a80 --- /dev/null +++ b/SPECS/edk2/0012-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch @@ -0,0 +1,84 @@ +From b748f55a0018d1766e46d27eedf7806c95d90075 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 24 Jun 2020 11:31:36 +0200 +Subject: [PATCH 12/14] OvmfPkg/QemuKernelLoaderFsDxe: suppress error on no + "-kernel" in silent aa64 build (RH) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Remove obsolete commit message tags related to downstream patch + management: Message-id, Patchwork-id, O-Subject, Acked-by, From, + RH-Acked-by, RH-Author (RHBZ#1846481). + +Bugzilla: 1844682 + +If the "-kernel" QEMU option is not used, then QemuKernelLoaderFsDxe +should return EFI_NOT_FOUND, so that the DXE Core can unload it. However, +the associated error message, logged by the DXE Core to the serial +console, is not desired in the silent edk2-aarch64 build, given that the +absence of "-kernel" is nothing out of the ordinary. Therefore, return +success and stay resident. The wasted guest RAM still gets freed after +ExitBootServices(). + +(Inspired by RHEL-8.1.0 commit aaaedc1e2cfd.) + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +(cherry picked from commit 9adcdf493ebbd11efb74e2905ab5f6c8996e096d) +--- + .../QemuKernelLoaderFsDxe.inf | 1 + + .../QemuKernelLoaderFsDxe.c | 18 ++++++++++++++++++ + 2 files changed, 19 insertions(+) + +diff --git a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf +index 7b35adb8e034..e0331c6e2cbc 100644 +--- a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf ++++ b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf +@@ -28,6 +28,7 @@ [LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib ++ DebugPrintErrorLevelLib + DevicePathLib + MemoryAllocationLib + QemuFwCfgLib +diff --git a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c +index d4f3cd92255f..f007f8a6c233 100644 +--- a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c ++++ b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1081,6 +1082,23 @@ QemuKernelLoaderFsDxeEntrypoint ( + + if (KernelBlob->Data == NULL) { + Status = EFI_NOT_FOUND; ++ #if defined (MDE_CPU_AARCH64) ++ // ++ // RHBZ#1844682 ++ // ++ // If the "-kernel" QEMU option is not being used, this platform DXE driver ++ // should return EFI_NOT_FOUND, so that the DXE Core can unload it. ++ // However, the associated error message, logged by the DXE Core to the ++ // serial console, is not desired in the silent edk2-aarch64 build, given ++ // that the absence of "-kernel" is nothing out of the ordinary. Therefore, ++ // return success and stay resident. The wasted guest RAM still gets freed ++ // after ExitBootServices(). ++ // ++ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { ++ Status = EFI_SUCCESS; ++ } ++ ++ #endif + goto FreeBlobs; + } + +-- +2.39.2 + diff --git a/SPECS/edk2/0013-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch b/SPECS/edk2/0013-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch new file mode 100644 index 00000000000..7eb119b7df2 --- /dev/null +++ b/SPECS/edk2/0013-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch @@ -0,0 +1,82 @@ +From 8d5230a47e76ce2a10d722f1fb0349650c4287ed Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 24 Jun 2020 11:40:09 +0200 +Subject: [PATCH 13/14] SecurityPkg/Tcg2Dxe: suppress error on no swtpm in + silent aa64 build (RH) + +Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> +RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: + +- Remove obsolete commit message tags related to downstream patch + management: Message-id, Patchwork-id, O-Subject, Acked-by, From, + RH-Acked-by, RH-Author (RHBZ#1846481). + +Bugzilla: 1844682 + +If swtpm / vTPM2 is not being used, Tcg2Dxe should return EFI_UNSUPPORTED, +so that the DXE Core can unload it. However, the associated error message, +logged by the DXE Core to the serial console, is not desired in the silent +edk2-aarch64 build, given that the absence of swtpm / vTPM2 is nothing out +of the ordinary. Therefore, return success and stay resident. The wasted +guest RAM still gets freed after ExitBootServices(). + +(Inspired by RHEL-8.1.0 commit aaaedc1e2cfd.) + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +(cherry picked from commit cbce29f7749477e271f9764fed82de94724af5df) +--- + SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf | 1 + + SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+) + +diff --git a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf +index 7dc7a2683d71..3bc88339311e 100644 +--- a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf ++++ b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf +@@ -55,6 +55,7 @@ [LibraryClasses] + UefiRuntimeServicesTableLib + BaseMemoryLib + DebugLib ++ DebugPrintErrorLevelLib + Tpm2CommandLib + PrintLib + UefiLib +diff --git a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c +index f6ea8b2bbf18..681eb7e08b98 100644 +--- a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c ++++ b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c +@@ -28,6 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent + #include + + #include ++#include + #include + #include + #include +@@ -2691,6 +2692,22 @@ DriverEntry ( + CompareGuid (PcdGetPtr (PcdTpmInstanceGuid), &gEfiTpmDeviceInstanceTpm12Guid)) + { + DEBUG ((DEBUG_INFO, "No TPM2 instance required!\n")); ++#if defined (MDE_CPU_AARCH64) ++ // ++ // RHBZ#1844682 ++ // ++ // If swtpm / vTPM2 is not being used, this driver should return ++ // EFI_UNSUPPORTED, so that the DXE Core can unload it. However, the ++ // associated error message, logged by the DXE Core to the serial console, ++ // is not desired in the silent edk2-aarch64 build, given that the absence ++ // of swtpm / vTPM2 is nothing out of the ordinary. Therefore, return ++ // success and stay resident. The wasted guest RAM still gets freed after ++ // ExitBootServices(). ++ // ++ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { ++ return EFI_SUCCESS; ++ } ++#endif + return EFI_UNSUPPORTED; + } + +-- +2.39.2 + diff --git a/SPECS/edk2/0014-SecurityPkg-add-TIS-sanity-check-tpm2.patch b/SPECS/edk2/0014-SecurityPkg-add-TIS-sanity-check-tpm2.patch new file mode 100644 index 00000000000..a08011ad9c6 --- /dev/null +++ b/SPECS/edk2/0014-SecurityPkg-add-TIS-sanity-check-tpm2.patch @@ -0,0 +1,35 @@ +From cb0ffbcd86756a47696b6e24e19552d2bcc4238a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 26 Apr 2023 14:37:13 +0200 +Subject: [PATCH 14/16] SecurityPkg: add TIS sanity check (tpm2) + +The code blindly assumes a TIS interface is present in case both CRB and +FIFO checks fail. Check the InterfaceType for TIS instead and only +return Tpm2PtpInterfaceTis in case it matches, Tpm2PtpInterfaceMax +otherwise. + +Signed-off-by: Gerd Hoffmann +--- + SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c +index 1f9ac5ab5a30..eac9f0e29941 100644 +--- a/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c ++++ b/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2Ptp.c +@@ -464,7 +464,11 @@ Tpm2GetPtpInterface ( + return Tpm2PtpInterfaceFifo; + } + +- return Tpm2PtpInterfaceTis; ++ if (InterfaceId.Bits.InterfaceType == PTP_INTERFACE_IDENTIFIER_INTERFACE_TYPE_TIS) { ++ return Tpm2PtpInterfaceTis; ++ } ++ ++ return Tpm2PtpInterfaceMax; + } + + /** +-- +2.40.0 + diff --git a/SPECS/edk2/0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch b/SPECS/edk2/0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch new file mode 100644 index 00000000000..2030b7d929d --- /dev/null +++ b/SPECS/edk2/0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch @@ -0,0 +1,34 @@ +From 54ae30cea7731b9949b7e503401f732f1e95e930 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 26 Apr 2023 14:38:34 +0200 +Subject: [PATCH 15/16] SecurityPkg: add TIS sanity check (tpm12) + +The code blindly assumes a TIS interface is present in case both CRB and +FIFO checks fail. Check the InterfaceType for TIS instead and only +return PtpInterfaceTis in case it matches, PtpInterfaceMax otherwise. + +Signed-off-by: Gerd Hoffmann +--- + SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12Tis.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12Tis.c b/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12Tis.c +index 51f43591287a..d2b79a274084 100644 +--- a/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12Tis.c ++++ b/SecurityPkg/Library/Tpm12DeviceLibDTpm/Tpm12Tis.c +@@ -91,7 +91,11 @@ Tpm12GetPtpInterface ( + return PtpInterfaceFifo; + } + +- return PtpInterfaceTis; ++ if (InterfaceId.Bits.InterfaceType == PTP_INTERFACE_IDENTIFIER_INTERFACE_TYPE_TIS) { ++ return PtpInterfaceTis; ++ } ++ ++ return PtpInterfaceMax; + } + + /** +-- +2.40.0 + diff --git a/SPECS/edk2/0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch b/SPECS/edk2/0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch new file mode 100644 index 00000000000..318149a0a22 --- /dev/null +++ b/SPECS/edk2/0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch @@ -0,0 +1,66 @@ +From 51846ff74e3352151f99cfcfbe091c09f3ec8097 Mon Sep 17 00:00:00 2001 +From: Michael Brown +Date: Tue, 9 May 2023 12:09:30 +0000 +Subject: [PATCH 16/18] OvmfPkg: Clarify invariants for NestedInterruptTplLib + +NestedInterruptTplLib relies on CPU interrupts being disabled to +guarantee exclusive (and hence atomic) access to the shared state in +IsrState. Nothing in the calling interrupt handler should have +re-enabled interrupts before calling NestedInterruptRestoreTPL(), and +the loop in NestedInterruptRestoreTPL() itself maintains the invariant +that interrupts are disabled at the start of each iteration. + +Add assertions to clarify this invariant, and expand the comments +around the calls to RestoreTPL() and DisableInterrupts() to clarify +the expectations around enabling and disabling interrupts. + +Signed-off-by: Michael Brown +Acked-by: Laszlo Ersek +(cherry picked from commit ae0be176a83efebe9a8c13d2124151f7dd13443a) +--- + OvmfPkg/Library/NestedInterruptTplLib/Tpl.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c b/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c +index e19d98878eb7..e921a09c5599 100644 +--- a/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c ++++ b/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c +@@ -104,6 +104,7 @@ NestedInterruptRestoreTPL ( + // defer our call to RestoreTPL() to the in-progress outer instance + // of the same interrupt handler. + // ++ ASSERT (GetInterruptState () == FALSE); + if (InterruptedTPL == IsrState->InProgressRestoreTPL) { + // + // Trigger outer instance of this interrupt handler to perform the +@@ -153,6 +154,7 @@ NestedInterruptRestoreTPL ( + // + // Check shared state loop invariants. + // ++ ASSERT (GetInterruptState () == FALSE); + ASSERT (IsrState->InProgressRestoreTPL < InterruptedTPL); + ASSERT (IsrState->DeferredRestoreTPL == FALSE); + +@@ -167,13 +169,17 @@ NestedInterruptRestoreTPL ( + + // + // Call RestoreTPL() to allow event notifications to be +- // dispatched. This will implicitly re-enable interrupts. ++ // dispatched. This will implicitly re-enable interrupts (if ++ // InterruptedTPL is below TPL_HIGH_LEVEL), even though we are ++ // still inside the interrupt handler. + // + gBS->RestoreTPL (InterruptedTPL); + + // + // Re-disable interrupts after the call to RestoreTPL() to ensure +- // that we have exclusive access to the shared state. ++ // that we have exclusive access to the shared state. Interrupts ++ // will be re-enabled by the IRET or equivalent instruction when ++ // we subsequently return from the interrupt handler. + // + DisableInterrupts (); + +-- +2.40.1 + diff --git a/SPECS/edk2/0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch b/SPECS/edk2/0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch new file mode 100644 index 00000000000..a9323b90ed1 --- /dev/null +++ b/SPECS/edk2/0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch @@ -0,0 +1,75 @@ +From 7272c2fbe66941f0785be7ec437ed79ab9e35b80 Mon Sep 17 00:00:00 2001 +From: Michael Brown +Date: Tue, 9 May 2023 12:09:33 +0000 +Subject: [PATCH 17/18] OvmfPkg: Relax assertion that interrupts do not occur + at TPL_HIGH_LEVEL + +At TPL_HIGH_LEVEL, CPU interrupts are disabled (as per the UEFI +specification) and so we should never encounter a situation in which +an interrupt occurs at TPL_HIGH_LEVEL. The specification also +restricts usage of TPL_HIGH_LEVEL to the firmware itself. + +However, nothing actually prevents a UEFI application from calling +gBS->RaiseTPL(TPL_HIGH_LEVEL) and then violating the invariant by +enabling interrupts via the STI or equivalent instruction. Some +versions of the Microsoft Windows bootloader are known to do this. + +NestedInterruptTplLib maintains the invariant that interrupts are +disabled at TPL_HIGH_LEVEL (even when performing the dark art of +deliberately manipulating the stack so that IRET will return with +interrupts still disabled), but does not itself rely on external code +maintaining this invariant. + +Relax the assertion that the interrupted TPL is below TPL_HIGH_LEVEL +to an error message, to allow UEFI applications such as these versions +of the Microsoft Windows bootloader to continue to function. + +Debugged-by: Gerd Hoffmann +Debugged-by: Laszlo Ersek +Ref: https://bugzilla.redhat.com/show_bug.cgi?id=2189136 +Signed-off-by: Michael Brown +Acked-by: Laszlo Ersek +Reviewed-by: Gerd Hoffmann +(cherry picked from commit bee67e0c142af6599a85aa7640094816b8a24c4f) +--- + OvmfPkg/Library/NestedInterruptTplLib/Tpl.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c b/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c +index e921a09c5599..d56c12a44529 100644 +--- a/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c ++++ b/OvmfPkg/Library/NestedInterruptTplLib/Tpl.c +@@ -34,12 +34,27 @@ NestedInterruptRaiseTPL ( + + // + // Raise TPL and assert that we were called from within an interrupt +- // handler (i.e. with TPL below TPL_HIGH_LEVEL but with interrupts +- // disabled). ++ // handler (i.e. with interrupts already disabled before raising the ++ // TPL). + // + ASSERT (GetInterruptState () == FALSE); + InterruptedTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); +- ASSERT (InterruptedTPL < TPL_HIGH_LEVEL); ++ ++ // ++ // At TPL_HIGH_LEVEL, CPU interrupts are disabled (as per the UEFI ++ // specification) and so we should never encounter a situation in ++ // which InterruptedTPL==TPL_HIGH_LEVEL. The specification also ++ // restricts usage of TPL_HIGH_LEVEL to the firmware itself. ++ // ++ // However, nothing actually prevents a UEFI application from ++ // invalidly calling gBS->RaiseTPL(TPL_HIGH_LEVEL) and then ++ // violating the invariant by enabling interrupts via the STI or ++ // equivalent instruction. Some versions of the Microsoft Windows ++ // bootloader are known to do this. ++ // ++ if (InterruptedTPL >= TPL_HIGH_LEVEL) { ++ DEBUG ((DEBUG_ERROR, "ERROR: Interrupts enabled at TPL_HIGH_LEVEL!\n")); ++ } + + return InterruptedTPL; + } +-- +2.40.1 + diff --git a/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json b/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json new file mode 100644 index 00000000000..e709223313d --- /dev/null +++ b/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json @@ -0,0 +1,36 @@ +{ + "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2", + "format": "qcow2" + }, + "nvram-template": { + "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2", + "format": "qcow2" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "enrolled-keys", + "requires-smm", + "secure-boot", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/40-edk2-ovmf-ia32-sb-enrolled.json b/SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json similarity index 96% rename from SPECS-EXTENDED/edk2/40-edk2-ovmf-ia32-sb-enrolled.json rename to SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json index 08b95eeccc0..33f970d0a6e 100644 --- a/SPECS-EXTENDED/edk2/40-edk2-ovmf-ia32-sb-enrolled.json +++ b/SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json @@ -5,6 +5,7 @@ ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd", "format": "raw" diff --git a/SPECS-EXTENDED/edk2/40-edk2-ovmf-x64-sb-enrolled.json b/SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json similarity index 87% rename from SPECS-EXTENDED/edk2/40-edk2-ovmf-x64-sb-enrolled.json rename to SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json index 6c2225c6dc6..2ed45362c49 100644 --- a/SPECS-EXTENDED/edk2/40-edk2-ovmf-x64-sb-enrolled.json +++ b/SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json @@ -1,10 +1,11 @@ { - "description": "OVMF for x86_64, with SB+SMM, SB enabled, MS certs enrolled", + "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled", "interface-types": [ "uefi" ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd", "format": "raw" @@ -24,7 +25,6 @@ ], "features": [ "acpi-s3", - "amd-sev", "enrolled-keys", "requires-smm", "secure-boot", diff --git a/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json b/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json new file mode 100644 index 00000000000..655dd42ef14 --- /dev/null +++ b/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json @@ -0,0 +1,35 @@ +{ + "description": "OVMF with SB+SMM, empty varstore", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2", + "format": "qcow2" + }, + "nvram-template": { + "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.qcow2", + "format": "qcow2" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "requires-smm", + "secure-boot", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/50-edk2-ovmf-ia32-sb.json b/SPECS/edk2/40-edk2-ovmf-ia32-sb.json similarity index 96% rename from SPECS-EXTENDED/edk2/50-edk2-ovmf-ia32-sb.json rename to SPECS/edk2/40-edk2-ovmf-ia32-sb.json index df80f1ed5ec..1e80e588ac1 100644 --- a/SPECS-EXTENDED/edk2/50-edk2-ovmf-ia32-sb.json +++ b/SPECS/edk2/40-edk2-ovmf-ia32-sb.json @@ -5,6 +5,7 @@ ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd", "format": "raw" diff --git a/SPECS-EXTENDED/edk2/50-edk2-ovmf-x64-sb.json b/SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json similarity index 88% rename from SPECS-EXTENDED/edk2/50-edk2-ovmf-x64-sb.json rename to SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json index 99345cac2aa..06b3ece89af 100644 --- a/SPECS-EXTENDED/edk2/50-edk2-ovmf-x64-sb.json +++ b/SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json @@ -1,10 +1,11 @@ { - "description": "OVMF for x86_64, with SB+SMM, empty varstore", + "description": "OVMF with SB+SMM, empty varstore", "interface-types": [ "uefi" ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd", "format": "raw" @@ -24,7 +25,6 @@ ], "features": [ "acpi-s3", - "amd-sev", "requires-smm", "secure-boot", "verbose-dynamic" diff --git a/SPECS/edk2/50-edk2-aarch64-qcow2.json b/SPECS/edk2/50-edk2-aarch64-qcow2.json new file mode 100644 index 00000000000..79f64a11a3b --- /dev/null +++ b/SPECS/edk2/50-edk2-aarch64-qcow2.json @@ -0,0 +1,32 @@ +{ + "description": "UEFI firmware for ARM64 virtual machines", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.qcow2", + "format": "qcow2" + }, + "nvram-template": { + "filename": "/usr/share/edk2/aarch64/vars-template-pflash.qcow2", + "format": "qcow2" + } + }, + "targets": [ + { + "architecture": "aarch64", + "machines": [ + "virt-*" + ] + } + ], + "features": [ + + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/70-edk2-arm-verbose.json b/SPECS/edk2/50-edk2-arm-verbose.json similarity index 96% rename from SPECS-EXTENDED/edk2/70-edk2-arm-verbose.json rename to SPECS/edk2/50-edk2-arm-verbose.json index 9e2cb0d677d..52f9c2ce00d 100644 --- a/SPECS-EXTENDED/edk2/70-edk2-arm-verbose.json +++ b/SPECS/edk2/50-edk2-arm-verbose.json @@ -5,6 +5,7 @@ ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/arm/QEMU_EFI-pflash.raw", "format": "raw" diff --git a/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json b/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json new file mode 100644 index 00000000000..d64735f4770 --- /dev/null +++ b/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json @@ -0,0 +1,36 @@ +{ + "description": "OVMF without SB+SMM, empty varstore", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.qcow2", + "format": "qcow2" + }, + "nvram-template": { + "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.qcow2", + "format": "qcow2" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-i440fx-*", + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "amd-sev", + "amd-sev-es", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/60-edk2-ovmf-ia32.json b/SPECS/edk2/50-edk2-ovmf-ia32-nosb.json similarity index 87% rename from SPECS-EXTENDED/edk2/60-edk2-ovmf-ia32.json rename to SPECS/edk2/50-edk2-ovmf-ia32-nosb.json index d804b2ec7a5..544f824ced7 100644 --- a/SPECS-EXTENDED/edk2/60-edk2-ovmf-ia32.json +++ b/SPECS/edk2/50-edk2-ovmf-ia32-nosb.json @@ -1,10 +1,11 @@ { - "description": "OVMF for i386, without SB, without SMM, with empty varstore", + "description": "OVMF for i386, without SB+SMM, empty varstore", "interface-types": [ "uefi" ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.fd", "format": "raw" diff --git a/SPECS/edk2/50-edk2-ovmf-x64-microvm.json b/SPECS/edk2/50-edk2-ovmf-x64-microvm.json new file mode 100644 index 00000000000..3d5b393949f --- /dev/null +++ b/SPECS/edk2/50-edk2-ovmf-x64-microvm.json @@ -0,0 +1,22 @@ +{ + "description": "OVMF for microvm", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "memory", + "filename": "/usr/share/edk2/ovmf/MICROVM.fd" + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "microvm" + ] + } + ], + "features": [ + ], + "tags": [ + ] +} diff --git a/SPECS/edk2/51-edk2-aarch64-raw.json b/SPECS/edk2/51-edk2-aarch64-raw.json new file mode 100644 index 00000000000..cabbd396ea0 --- /dev/null +++ b/SPECS/edk2/51-edk2-aarch64-raw.json @@ -0,0 +1,32 @@ +{ + "description": "UEFI firmware for ARM64 virtual machines", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.raw", + "format": "raw" + }, + "nvram-template": { + "filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "aarch64", + "machines": [ + "virt-*" + ] + } + ], + "features": [ + + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/60-edk2-ovmf-x64.json b/SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json similarity index 85% rename from SPECS-EXTENDED/edk2/60-edk2-ovmf-x64.json rename to SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json index 355691bb5b5..050853e2b87 100644 --- a/SPECS-EXTENDED/edk2/60-edk2-ovmf-x64.json +++ b/SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json @@ -1,10 +1,11 @@ { - "description": "OVMF for x86_64, without SB, without SMM, with empty varstore", + "description": "OVMF without SB+SMM, empty varstore", "interface-types": [ "uefi" ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/ovmf/OVMF_CODE.fd", "format": "raw" @@ -26,6 +27,7 @@ "features": [ "acpi-s3", "amd-sev", + "amd-sev-es", "verbose-dynamic" ], "tags": [ diff --git a/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json b/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json new file mode 100644 index 00000000000..41731029671 --- /dev/null +++ b/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json @@ -0,0 +1,32 @@ +{ + "description": "UEFI firmware for ARM64 virtual machines, verbose logs", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode" : "split", + "executable": { + "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.qcow2", + "format": "qcow2" + }, + "nvram-template": { + "filename": "/usr/share/edk2/aarch64/vars-template-pflash.qcow2", + "format": "qcow2" + } + }, + "targets": [ + { + "architecture": "aarch64", + "machines": [ + "virt-*" + ] + } + ], + "features": [ + "verbose-static" + ], + "tags": [ + + ] +} diff --git a/SPECS-EXTENDED/edk2/70-edk2-aarch64-verbose.json b/SPECS/edk2/53-edk2-aarch64-verbose-raw.json similarity index 85% rename from SPECS-EXTENDED/edk2/70-edk2-aarch64-verbose.json rename to SPECS/edk2/53-edk2-aarch64-verbose-raw.json index a553dc1e593..ec69d198588 100644 --- a/SPECS-EXTENDED/edk2/70-edk2-aarch64-verbose.json +++ b/SPECS/edk2/53-edk2-aarch64-verbose-raw.json @@ -1,10 +1,11 @@ { - "description": "UEFI firmware for aarch64, verbose logs", + "description": "UEFI firmware for ARM64 virtual machines, verbose logs", "interface-types": [ "uefi" ], "mapping": { "device": "flash", + "mode" : "split", "executable": { "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw", "format": "raw" diff --git a/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json b/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json new file mode 100644 index 00000000000..9a561bc7eb2 --- /dev/null +++ b/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json @@ -0,0 +1,31 @@ +{ + "description": "OVMF with SEV-ES support", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode": "stateless", + "executable": { + "filename": "/usr/share/edk2/ovmf/OVMF.amdsev.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "amd-sev", + "amd-sev-es", + "amd-sev-snp", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json b/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json new file mode 100644 index 00000000000..44993ab1f3c --- /dev/null +++ b/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json @@ -0,0 +1,29 @@ +{ + "description": "OVMF with TDX support", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "mode": "stateless", + "executable": { + "filename": "/usr/share/edk2/ovmf/OVMF.inteltdx.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "intel-tdx", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/SPECS/edk2/DBXUpdate-20230509.ia32.bin b/SPECS/edk2/DBXUpdate-20230509.ia32.bin new file mode 100644 index 0000000000000000000000000000000000000000..6dbb7028d6d35cbfcc41ac1bf825fd85b6421dea GIT binary patch literal 7634 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 literal 0 HcmV?d00001 diff --git a/SPECS/edk2/DBXUpdate-20230509.x64.bin b/SPECS/edk2/DBXUpdate-20230509.x64.bin new file mode 100644 index 0000000000000000000000000000000000000000..e2f6b0259ae03528a2c84eacf0977f64bafef036 GIT binary patch literal 21170 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 1: + dstfile = names[1] + else: + dstfile = os.path.basename(srcfile) + print(f'# copy: {srcdir} / {srcfile} => {dstdir} / {dstfile}') + + src = srcdir + '/' + srcfile + dst = dstdir + '/' + dstfile + os.makedirs(os.path.dirname(dst), exist_ok = True) + shutil.copy(src, dst) + +def pad_file(dstdir, pad): + args = pad.split() + if len(args) < 2: + raise RuntimeError(f'missing arg for pad ({args})') + name = args[0] + size = args[1] + cmdline = [ + 'truncate', + '--size', size, + dstdir + '/' + name, + ] + print(f'# padding: {dstdir} / {name} => {size}') + subprocess.run(cmdline, check = True) + +# pylint: disable=too-many-branches +def build_one(cfg, build, jobs = None, silent = False, nologs = False): + b = cfg[build] + + cmdline = [ 'build' ] + cmdline += [ '-t', get_toolchain(cfg, build) ] + cmdline += [ '-p', b['conf'] ] + + if (b['conf'].startswith('OvmfPkg/') or + b['conf'].startswith('ArmVirtPkg/')): + cmdline += pcd_version(cfg, silent) + cmdline += pcd_release_date() + + if jobs: + cmdline += [ '-n', jobs ] + for arch in b['arch'].split(): + cmdline += [ '-a', arch ] + if 'opts' in b: + for name in b['opts'].split(): + section = 'opts.' + name + for opt in cfg[section]: + cmdline += [ '-D', opt + '=' + cfg[section][opt] ] + if 'pcds' in b: + for name in b['pcds'].split(): + section = 'pcds.' + name + for pcd in cfg[section]: + cmdline += [ '--pcd', pcd + '=' + cfg[section][pcd] ] + if 'tgts' in b: + tgts = b['tgts'].split() + else: + tgts = [ 'DEBUG' ] + for tgt in tgts: + desc = None + if 'desc' in b: + desc = b['desc'] + build_message(f'building: {b["conf"]} ({b["arch"]}, {tgt})', + f'description: {desc}', + silent = silent) + build_run(cmdline + [ '-b', tgt ], + b['conf'], + build + '.' + tgt, + silent, + nologs) + + if 'plat' in b: + # copy files + for cpy in b: + if not cpy.startswith('cpy'): + continue + build_copy(b['plat'], tgt, + get_toolchain(cfg, build), + b['dest'], b[cpy]) + # pad builds + for pad in b: + if not pad.startswith('pad'): + continue + pad_file(b['dest'], b[pad]) + +def build_basetools(silent = False, nologs = False): + build_message('building: BaseTools', silent = silent) + basedir = os.environ['EDK_TOOLS_PATH'] + cmdline = [ 'make', '-C', basedir ] + build_run(cmdline, 'BaseTools', 'build.basetools', silent, nologs) + +def binary_exists(name): + for pdir in os.environ['PATH'].split(':'): + if os.path.exists(pdir + '/' + name): + return True + return False + +def prepare_env(cfg, silent = False): + """ mimic Conf/BuildEnv.sh """ + workspace = os.getcwd() + packages = [ workspace, ] + path = os.environ['PATH'].split(':') + dirs = [ + 'BaseTools/Bin/Linux-x86_64', + 'BaseTools/BinWrappers/PosixLike' + ] + + if cfg.has_option('global', 'pkgs'): + for pkgdir in cfg['global']['pkgs'].split(): + packages.append(os.path.abspath(pkgdir)) + coredir = get_coredir(cfg) + if coredir != workspace: + packages.append(coredir) + + # add basetools to path + for pdir in dirs: + p = coredir + '/' + pdir + if not os.path.exists(p): + continue + if p in path: + continue + path.insert(0, p) + + # run edksetup if needed + toolsdef = coredir + '/Conf/tools_def.txt' + if not os.path.exists(toolsdef): + os.makedirs(os.path.dirname(toolsdef), exist_ok = True) + build_message('running BaseTools/BuildEnv', silent = silent) + cmdline = [ 'bash', 'BaseTools/BuildEnv' ] + subprocess.run(cmdline, cwd = coredir, check = True) + + # set variables + os.environ['PATH'] = ':'.join(path) + os.environ['PACKAGES_PATH'] = ':'.join(packages) + os.environ['WORKSPACE'] = workspace + os.environ['EDK_TOOLS_PATH'] = coredir + '/BaseTools' + os.environ['CONF_PATH'] = coredir + '/Conf' + os.environ['PYTHON_COMMAND'] = '/usr/bin/python3' + os.environ['PYTHONHASHSEED'] = '1' + + # for cross builds + if binary_exists('arm-linux-gnueabi-gcc'): + # ubuntu + os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnueabi-' + os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnueabi-' + elif binary_exists('arm-linux-gnu-gcc'): + # fedora + os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnu-' + os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnu-' + if binary_exists('loongarch64-linux-gnu-gcc'): + os.environ['GCC5_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-' + os.environ['GCC_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-' + + hostarch = os.uname().machine + if binary_exists('aarch64-linux-gnu-gcc') and hostarch != 'aarch64': + os.environ['GCC5_AARCH64_PREFIX'] = 'aarch64-linux-gnu-' + os.environ['GCC_AARCH64_PREFIX'] = 'aarch64-linux-gnu-' + if binary_exists('riscv64-linux-gnu-gcc') and hostarch != 'riscv64': + os.environ['GCC5_RISCV64_PREFIX'] = 'riscv64-linux-gnu-' + os.environ['GCC_RISCV64_PREFIX'] = 'riscv64-linux-gnu-' + if binary_exists('x86_64-linux-gnu-gcc') and hostarch != 'x86_64': + os.environ['GCC5_IA32_PREFIX'] = 'x86_64-linux-gnu-' + os.environ['GCC5_X64_PREFIX'] = 'x86_64-linux-gnu-' + os.environ['GCC5_BIN'] = 'x86_64-linux-gnu-' + os.environ['GCC_IA32_PREFIX'] = 'x86_64-linux-gnu-' + os.environ['GCC_X64_PREFIX'] = 'x86_64-linux-gnu-' + os.environ['GCC_BIN'] = 'x86_64-linux-gnu-' + +def build_list(cfg): + for build in cfg.sections(): + if not build.startswith('build.'): + continue + name = build.lstrip('build.') + desc = 'no description' + if 'desc' in cfg[build]: + desc = cfg[build]['desc'] + print(f'# {name:20s} - {desc}') + +def main(): + parser = argparse.ArgumentParser(prog = 'edk2-build', + description = 'edk2 build helper script') + parser.add_argument('-c', '--config', dest = 'configfile', + type = str, default = '.edk2.builds', metavar = 'FILE', + help = 'read configuration from FILE (default: .edk2.builds)') + parser.add_argument('-C', '--directory', dest = 'directory', type = str, + help = 'change to DIR before building', metavar = 'DIR') + parser.add_argument('-j', '--jobs', dest = 'jobs', type = str, + help = 'allow up to JOBS parallel build jobs', + metavar = 'JOBS') + parser.add_argument('-m', '--match', dest = 'match', type = str, + help = 'only run builds matching INCLUDE (substring)', + metavar = 'INCLUDE') + parser.add_argument('-x', '--exclude', dest = 'exclude', + type = str, action = 'append', + help = 'skip builds matching EXCLUDE (substring)', + metavar = 'EXCLUDE') + parser.add_argument('-l', '--list', dest = 'list', + action = 'store_true', default = False, + help = 'list build configs available') + parser.add_argument('--silent', dest = 'silent', + action = 'store_true', default = False, + help = 'write build output to logfiles, ' + 'write to console only on errors') + parser.add_argument('--no-logs', dest = 'nologs', + action = 'store_true', default = False, + help = 'do not write build log files (with --silent)') + parser.add_argument('--core', dest = 'core', type = str, metavar = 'DIR', + help = 'location of the core edk2 repository ' + '(i.e. where BuildTools are located)') + parser.add_argument('--pkg', '--package', dest = 'pkgs', + type = str, action = 'append', metavar = 'DIR', + help = 'location(s) of additional packages ' + '(can be specified multiple times)') + parser.add_argument('-t', '--toolchain', dest = 'toolchain', type = str, metavar = 'NAME', + help = 'tool chain to be used to build edk2') + parser.add_argument('--version-override', dest = 'version_override', + type = str, metavar = 'VERSION', + help = 'set firmware build version') + parser.add_argument('--release-date', dest = 'release_date', + type = str, metavar = 'DATE', + help = 'set firmware build release date (in MM/DD/YYYY format)') + options = parser.parse_args() + + if options.directory: + os.chdir(options.directory) + + if not os.path.exists(options.configfile): + print(f'config file "{options.configfile}" not found') + return 1 + + cfg = configparser.ConfigParser() + cfg.optionxform = str + cfg.read(options.configfile) + + if options.list: + build_list(cfg) + return 0 + + if not cfg.has_section('global'): + cfg.add_section('global') + if options.core: + cfg.set('global', 'core', options.core) + if options.pkgs: + cfg.set('global', 'pkgs', ' '.join(options.pkgs)) + if options.toolchain: + cfg.set('global', 'tool', options.toolchain) + + global version_override + global release_date + check_rebase() + if options.version_override: + version_override = options.version_override + if options.release_date: + release_date = options.release_date + + prepare_env(cfg, options.silent) + build_basetools(options.silent, options.nologs) + for build in cfg.sections(): + if not build.startswith('build.'): + continue + if options.match and options.match not in build: + print(f'# skipping "{build}" (not matching "{options.match}")') + continue + if options.exclude: + exclude = False + for item in options.exclude: + if item in build: + print(f'# skipping "{build}" (matching "{item}")') + exclude = True + if exclude: + continue + build_one(cfg, build, options.jobs, options.silent, options.nologs) + + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/SPECS/edk2/edk2.signatures.json b/SPECS/edk2/edk2.signatures.json new file mode 100644 index 00000000000..ed0a70b163c --- /dev/null +++ b/SPECS/edk2/edk2.signatures.json @@ -0,0 +1,32 @@ +{ + "Signatures": { + "30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json": "827c542dee2906d261c92c19f390637c1e653165d6a920c45651edd68e7fffd0", + "30-edk2-ovmf-ia32-sb-enrolled.json": "8ce4600fd84968adca9d037df9531d34ce455ad566d4691d256d370acc86120d", + "31-edk2-ovmf-2m-raw-x64-sb-enrolled.json": "e0237cf4909d129324953bd854caf79136065402a30d363f13e594fd0e493bcf", + "40-edk2-ovmf-4m-qcow2-x64-sb.json": "52ad30099a600dc9d03d60557a94e8c5459cd72124445109287ebf6971b879a1", + "40-edk2-ovmf-ia32-sb.json": "de562405d0f9a9400eb58239e10753455216196dface2631858bcf1a3c886ac7", + "41-edk2-ovmf-2m-raw-x64-sb.json": "c9c505b6308af28f29c16b4108f7f295408f975a47c94fb7aef523cb2a999d8e", + "50-edk2-aarch64-qcow2.json": "a62d1c8b3801a33d670863fd4824252f65b93b64af8e5fd8908e6e09d8d5db99", + "50-edk2-arm-verbose.json": "8805fce3e313705b7b43be6f2601776871c35bac0914fa05c34d09c929044253", + "50-edk2-ovmf-4m-qcow2-x64-nosb.json": "a97c1339a837d106ccb25132a68cdeaf13f2b7cff3d4c7411ce4457e75b68278", + "50-edk2-ovmf-ia32-nosb.json": "b360162bd55df3b1cb4bfa8d0b7c2b46a7c7b492aabf6d0d57c3dbf3d8c7fd10", + "50-edk2-ovmf-x64-microvm.json": "5136200cd26eff9387259b1ca0f352b64298283f990277ac7a1b7a94d87baa27", + "51-edk2-aarch64-raw.json": "7523b4dc263748fc8bee26e763aa94463222a8d2e8b738fdbde0d2b263ad562d", + "51-edk2-ovmf-2m-raw-x64-nosb.json": "59aec29aa157bb0f7e5242ff0de9932367d5314d9ce8159b97360b6d44da58f2", + "52-edk2-aarch64-verbose-qcow2.json": "132627485055270421667399465b06e954f85b8e6f14b2efa1d31aac1b83a6cb", + "53-edk2-aarch64-verbose-raw.json": "a03962c06b66b33d55ee8d62273dabe625f1525fd1a7769af2dc07e7889b2163", + "60-edk2-ovmf-x64-amdsev.json": "3ea01de7839cae41880cded64f964ed8d9b44e179527627aca6b24d6f8ead113", + "60-edk2-ovmf-x64-inteltdx.json": "64f2237fa30ff0ed63ed5f0ce73359cd2b9959b146bcce27581f11da235eab88", + "DBXUpdate-20230509.ia32.bin": "b073eb71894e933e22d935cf45bf8319543819998522785d967f51fd87c85f85", + "DBXUpdate-20230509.x64.bin": "3e56c3d9e5b12edbd9e4006413d87fba099de1eba33d2bea566e742166cb366a", + "edk2-build.fedora": "24510e0171266ba2ad0c05d0642713a06d2e1bf110cb621fa537badcce6a289e", + "edk2-build.fedora.platforms": "dd50f91d43adceedbab91358b67973983762f2410af33fedb3a03ccaf03197d8", + "edk2-build.py": "505f6bef60135c9d12a0f243bab08bff4e5d384d557e82ae30f476a31931d11c", + "edk2-f80f052277c8.tar.xz": "3a6c90d31390a847b27d1070c7420d7fbbdf8f8342305e51977790839c5dd663", + "edk2-platforms-54306d023e7d.tar.xz": "102ea5103c3522c5666209e4b933686678d4c4e3298f83e1b7dba418e69712e3", + "edk2-jansson-2.13.1.tar.bz2": "ee90a0f879d2b7b7159124ff22b937a2a9a8c36d3bb65d1da7dd3f04370a10bd", + "edk2-openssl-d00c3c5b8a9d6d3ea3dabfcafdf36afd61ba8bcc.tar.xz": "615de54b35787df151aea967a6fc3ff35e7b5aad2890b0df27ff60a8a582ac90", + "ovmf-whitepaper-c770f8c.txt": "842518adadaa837914dbb13a6628002fb7f7acca107c6d6f41815b399dc9f8b8", + "edk2-softfloat-20180726-gitb64af41.tar.xz": "c7f2172357ca3022621b9464fd92bf2b462256bda3e019bf9a669fa6b5aeea91" + } +} diff --git a/SPECS/edk2/edk2.spec b/SPECS/edk2/edk2.spec new file mode 100644 index 00000000000..d6467c27c21 --- /dev/null +++ b/SPECS/edk2/edk2.spec @@ -0,0 +1,1092 @@ +%bcond_with experimental +%bcond_with arm + +Vendor: Microsoft Corporation +Distribution: Mariner +## START: Set by rpmautospec +## (rpmautospec version 0.3.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 31; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec + +# https://fedoraproject.org/wiki/Changes/SetBuildFlagsBuildCheck +# breaks cross-building +%undefine _auto_set_build_flags + +# actual firmware builds support cross-compiling. edk2-tools +# in theory should build everywhere without much trouble, but +# in practice the edk2 build system barfs on archs it doesn't know +# (such as ppc), so lets limit things to the known-good ones. +# +# Can't build aarch64 due to a dependency on "nasm", which doesn't +# officially support the ARM64 architecture. See here: +# https://github.com/netwide-assembler/nasm/pull/3 +ExclusiveArch: x86_64 + +# edk2-stable202302 +%define GITDATE 20230301 +%define GITCOMMIT f80f052277c8 +%define TOOLCHAIN GCC5 +%define OPENSSL_VER 1.1.1k + +%define DBXDATE 20230509 + +%define build_ovmf 1 +%define build_aarch64 0 +%define build_riscv64 0 + +%global softfloat_version 20180726-gitb64af41 +%define disable_werror 1 + + +Name: edk2 +Version: %{GITDATE}git%{GITCOMMIT} +Release: 32%{?dist} +Summary: UEFI firmware for 64-bit virtual machines +License: BSD-2-Clause-Patent and OpenSSL and MIT +URL: http://www.tianocore.org + +# The source tarball is created using following commands: +# COMMIT=bb1bba3d7767 +# git archive --format=tar --prefix=edk2-$COMMIT/ $COMMIT \ +# | xz -9ev >/tmp/edk2-$COMMIT.tar.xz +Source0: https://src.fedoraproject.org/repo/pkgs/edk2/edk2-%{GITCOMMIT}.tar.xz/sha512/af802257f010b63d973dc909b57ee845b7734e8d494b081050ba1f197349663b081e1f2edc5244726e2479ff6d16d79d0a6fceb00f4840b59982f10b79facf66/edk2-%{GITCOMMIT}.tar.xz +Source1: ovmf-whitepaper-c770f8c.txt +Source2: edk2-openssl-d00c3c5b8a9d6d3ea3dabfcafdf36afd61ba8bcc.tar.xz +Source3: edk2-softfloat-%{softfloat_version}.tar.xz +Source4: edk2-platforms-54306d023e7d.tar.xz +Source5: edk2-jansson-2.13.1.tar.bz2 + +# json description files +Source10: 50-edk2-aarch64-qcow2.json +Source11: 51-edk2-aarch64-raw.json +Source12: 52-edk2-aarch64-verbose-qcow2.json +Source13: 53-edk2-aarch64-verbose-raw.json + +Source20: 50-edk2-arm-verbose.json + +Source30: 30-edk2-ovmf-ia32-sb-enrolled.json +Source31: 40-edk2-ovmf-ia32-sb.json +Source32: 50-edk2-ovmf-ia32-nosb.json + +Source40: 30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json +Source41: 31-edk2-ovmf-2m-raw-x64-sb-enrolled.json +Source42: 40-edk2-ovmf-4m-qcow2-x64-sb.json +Source43: 41-edk2-ovmf-2m-raw-x64-sb.json +Source44: 50-edk2-ovmf-x64-microvm.json +Source45: 50-edk2-ovmf-4m-qcow2-x64-nosb.json +Source46: 51-edk2-ovmf-2m-raw-x64-nosb.json +Source47: 60-edk2-ovmf-x64-amdsev.json +Source48: 60-edk2-ovmf-x64-inteltdx.json + +# https://gitlab.com/kraxel/edk2-build-config +Source80: edk2-build.py +Source81: edk2-build.fedora +Source82: edk2-build.fedora.platforms + +Source90: DBXUpdate-%{DBXDATE}.x64.bin +Source91: DBXUpdate-%{DBXDATE}.ia32.bin + +Patch0001: 0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch +Patch0002: 0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch +Patch0003: 0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch +Patch0004: 0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch +Patch0005: 0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch +Patch0006: 0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch +Patch0007: 0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch +Patch0008: 0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch +Patch0009: 0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch +Patch0010: 0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch +Patch0011: 0011-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch +Patch0012: 0012-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch +Patch0013: 0013-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch +Patch0014: 0014-SecurityPkg-add-TIS-sanity-check-tpm2.patch +Patch0015: 0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch +Patch0016: 0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch +Patch0017: 0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch + + +# python3-devel and libuuid-devel are required for building tools. +# python3-devel is also needed for varstore template generation and +# verification with "ovmf-vars-generator". +BuildRequires: python3-devel +BuildRequires: libuuid-devel +BuildRequires: iasl +BuildRequires: binutils gcc git gcc-c++ make +BuildRequires: qemu-img + +%if %{build_ovmf} +# Only OVMF includes 80x86 assembly files (*.nasm*). +BuildRequires: nasm + +# Only OVMF includes the Secure Boot feature, for which we need to separate out +# the UEFI shell. +BuildRequires: dosfstools +BuildRequires: mtools +BuildRequires: xorriso + +# For generating the variable store template with the default certificates +# enrolled. +BuildRequires: python3-virt-firmware >= 23.5 +BuildRequires: python3-virt-firmware-peutils >= 23.5 + +# For mkisofs. +BuildRequires: cdrkit + +# endif build_ovmf +%endif + + +%package ovmf +Summary: UEFI firmware for x86_64 virtual machines +BuildArch: noarch +Provides: OVMF = %{version}-%{release} +Obsoletes: OVMF < 20180508-100.gitee3198e672e2.el7 + +# OVMF includes the Secure Boot and IPv6 features; it has a builtin OpenSSL +# library. +Provides: bundled(openssl) = %{OPENSSL_VER} +License: BSD-2-Clause-Patent and OpenSSL + +# URL taken from the Maintainers.txt file. +URL: http://www.tianocore.org/ovmf/ + +%description ovmf +OVMF (Open Virtual Machine Firmware) is a project to enable UEFI support for +Virtual Machines. This package contains a sample 64-bit UEFI firmware for QEMU +and KVM. + + +%package aarch64 +Summary: UEFI firmware for aarch64 virtual machines +BuildArch: noarch +Provides: AAVMF = %{version}-%{release} +Obsoletes: AAVMF < 20180508-100.gitee3198e672e2.el7 + +# need libvirt version with qcow2 support +Conflicts: libvirt-daemon-driver-qemu < 9.2.0 + +# No Secure Boot for AAVMF yet, but we include OpenSSL for the IPv6 stack. +Provides: bundled(openssl) = %{OPENSSL_VER} +License: BSD-2-Clause-Patent and OpenSSL + +# URL taken from the Maintainers.txt file. +URL: https://github.com/tianocore/tianocore.github.io/wiki/ArmVirtPkg + +%description aarch64 +AAVMF (ARM Architecture Virtual Machine Firmware) is an EFI Development Kit II +platform that enables UEFI support for QEMU/KVM ARM Virtual Machines. This +package contains a 64-bit build. + + +%package tools +Summary: EFI Development Kit II Tools +License: BSD-2-Clause-Patent +URL: https://github.com/tianocore/tianocore.github.io/wiki/BaseTools +%description tools +This package provides tools that are needed to +build EFI executables and ROMs using the GNU tools. + +%package tools-doc +Summary: Documentation for EFI Development Kit II Tools +BuildArch: noarch +License: BSD-2-Clause-Patent +URL: https://github.com/tianocore/tianocore.github.io/wiki/BaseTools +%description tools-doc +This package documents the tools that are needed to +build EFI executables and ROMs using the GNU tools. + +%description +EDK II is a modern, feature-rich, cross-platform firmware development +environment for the UEFI and PI specifications. This package contains sample +64-bit UEFI firmware builds for QEMU and KVM. + + +%package ovmf-ia32 +Summary: Open Virtual Machine Firmware +License: BSD-2-Clause-Patent and OpenSSL +Provides: bundled(openssl) +BuildArch: noarch +%description ovmf-ia32 +EFI Development Kit II +Open Virtual Machine Firmware (ia32) + +%package ovmf-xen +Summary: Open Virtual Machine Firmware, Xen build +License: BSD-2-Clause-Patent and OpenSSL +Provides: bundled(openssl) +BuildArch: noarch +%description ovmf-xen +EFI Development Kit II +Open Virtual Machine Firmware (Xen build) + +%if %{with experimental} +%package ovmf-experimental +Summary: Open Virtual Machine Firmware, experimental builds +License: BSD-2-Clause-Patent and OpenSSL +Provides: bundled(openssl) +BuildArch: noarch +%description ovmf-experimental +EFI Development Kit II +Open Virtual Machine Firmware (experimental builds) +%endif + +%if %{with arm} +%package arm +Summary: ARM Virtual Machine Firmware +BuildArch: noarch +License: BSD-2-Clause-Patent and OpenSSL +%description arm +EFI Development Kit II +ARMv7 UEFI Firmware +%endif + +%if %{build_riscv64} +%package riscv64 +Summary: RISC-V Virtual Machine Firmware +BuildArch: noarch +License: BSD-2-Clause-Patent and OpenSSL +%description riscv64 +EFI Development Kit II +RISC-V UEFI Firmware +%endif + +%package ext4 +Summary: Ext4 filesystem driver +License: BSD-2-Clause-Patent and OpenSSL +BuildArch: noarch +%description ext4 +EFI Development Kit II +Ext4 filesystem driver + +%package tools-python +Summary: EFI Development Kit II Tools +Requires: python3 +BuildArch: noarch + +%description tools-python +This package provides tools that are needed to build EFI executables +and ROMs using the GNU tools. You do not need to install this package; +you probably want to install edk2-tools only. + + + +%prep +# We needs some special git config options that %%autosetup won't give us. +# We init the git dir ourselves, then tell %%autosetup not to blow it away. +%setup -q -n edk2-%{GITCOMMIT} +git init -q +git config core.whitespace cr-at-eol +git config am.keepcr true +# -T is passed to %%setup to not re-extract the archive +# -D is passed to %%setup to not delete the existing archive dir +%autosetup -T -D -n edk2-%{GITCOMMIT} -S git_am + +cp -a -- %{SOURCE1} . +tar -C CryptoPkg/Library/OpensslLib -a -f %{SOURCE2} -x +# extract softfloat into place +tar -xf %{SOURCE3} --strip-components=1 --directory ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/ +tar -xf %{SOURCE4} --strip-components=1 --wildcards "*/Drivers" "*/Features" "*/Platform" "*/Silicon" +tar -xf %{SOURCE5} --strip-components=1 --directory RedfishPkg/Library/JsonLib/jansson + +# Done by %setup, but we do not use it for the auxiliary tarballs +chmod -Rf a+rX,u+w,g-w,o-w . + +cp -a -- \ + %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} \ + %{SOURCE20} \ + %{SOURCE30} %{SOURCE31} %{SOURCE32} \ + %{SOURCE40} %{SOURCE41} %{SOURCE42} %{SOURCE43} %{SOURCE44} \ + %{SOURCE45} %{SOURCE46} %{SOURCE47} %{SOURCE48} \ + %{SOURCE80} %{SOURCE81} %{SOURCE82} \ + %{SOURCE90} %{SOURCE91} \ + . + +%build + +build_iso() { + dir="$1" + UEFI_SHELL_BINARY=${dir}/Shell.efi + ENROLLER_BINARY=${dir}/EnrollDefaultKeys.efi + UEFI_SHELL_IMAGE=uefi_shell.img + ISO_IMAGE=${dir}/UefiShell.iso + + UEFI_SHELL_BINARY_BNAME=$(basename -- "$UEFI_SHELL_BINARY") + UEFI_SHELL_SIZE=$(stat --format=%s -- "$UEFI_SHELL_BINARY") + ENROLLER_SIZE=$(stat --format=%s -- "$ENROLLER_BINARY") + + # add 1MB then 10% for metadata + UEFI_SHELL_IMAGE_KB=$(( + (UEFI_SHELL_SIZE + ENROLLER_SIZE + 1 * 1024 * 1024) * 11 / 10 / 1024 + )) + + # create non-partitioned FAT image + rm -f -- "$UEFI_SHELL_IMAGE" + mkdosfs -C "$UEFI_SHELL_IMAGE" -n UEFI_SHELL -- "$UEFI_SHELL_IMAGE_KB" + + # copy the shell binary into the FAT image + export MTOOLS_SKIP_CHECK=1 + mmd -i "$UEFI_SHELL_IMAGE" ::efi + mmd -i "$UEFI_SHELL_IMAGE" ::efi/boot + mcopy -i "$UEFI_SHELL_IMAGE" "$UEFI_SHELL_BINARY" ::efi/boot/bootx64.efi + mcopy -i "$UEFI_SHELL_IMAGE" "$ENROLLER_BINARY" :: + mdir -i "$UEFI_SHELL_IMAGE" -/ :: + + # build ISO with FAT image file as El Torito EFI boot image + mkisofs -input-charset ASCII -J -rational-rock \ + -e "$UEFI_SHELL_IMAGE" -no-emul-boot \ + -o "$ISO_IMAGE" "$UEFI_SHELL_IMAGE" +} + +export EXTRA_OPTFLAGS="%{optflags}" +export EXTRA_LDFLAGS="%{__global_ldflags}" +export RELEASE_DATE="$(echo %{GITDATE} | sed -e 's|\(....\)\(..\)\(..\)|\2/\3/\1|')" + +touch OvmfPkg/AmdSev/Grub/grub.efi # dummy + +%if %{build_ovmf} +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora --silent --release-date "$RELEASE_DATE" -m ovmf +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora.platforms --silent -m x64 +virt-fw-vars --input Fedora/ovmf/OVMF_VARS.fd \ + --output Fedora/ovmf/OVMF_VARS.secboot.fd \ + --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ + --enroll-redhat --secure-boot +virt-fw-vars --input Fedora/ovmf/OVMF_VARS_4M.fd \ + --output Fedora/ovmf/OVMF_VARS_4M.secboot.fd \ + --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ + --enroll-redhat --secure-boot +virt-fw-vars --input Fedora/ovmf-ia32/OVMF_VARS.fd \ + --output Fedora/ovmf-ia32/OVMF_VARS.secboot.fd \ + --set-dbx DBXUpdate-%{DBXDATE}.ia32.bin \ + --enroll-redhat --secure-boot +build_iso Fedora/ovmf +build_iso Fedora/ovmf-ia32 + +for raw in */ovmf/*_4M*.fd; do + qcow2="${raw%.fd}.qcow2" + qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2" + rm -f "$raw" +done + +# experimental stateless builds +virt-fw-vars --input Fedora/experimental/OVMF.stateless.fd \ + --output Fedora/experimental/OVMF.stateless.secboot.fd \ + --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ + --enroll-redhat --secure-boot + +for image in \ + Fedora/ovmf/OVMF_CODE.secboot.fd \ + Fedora/ovmf/OVMF_CODE_4M.secboot.qcow2 \ + Fedora/experimental/OVMF.stateless.secboot.fd \ +; do + pcr="${image}" + pcr="${pcr%.fd}" + pcr="${pcr%.qcow2}" + pcr="${pcr}.pcr" + python3 /usr/share/doc/python3-virt-firmware/experimental/measure.py \ + --image "$image" \ + --version "%{name}-%{version}-%{release}" \ + --no-shim \ + > "$pcr" +done +%endif + +%if %{build_aarch64} +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora --silent --release-date "$RELEASE_DATE" -m armvirt +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora.platforms --silent -m aa64 +for raw in */aarch64/*.raw; do + qcow2="${raw%.raw}.qcow2" + qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2" +done +%endif + +%if %{build_riscv64} +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora --silent --release-date "$RELEASE_DATE" -m riscv +./edk2-build.py %{?_smp_mflags} --config edk2-build.fedora.platforms --silent -m riscv +%endif + +%install + +cp -a OvmfPkg/License.txt License.OvmfPkg.txt +cp -a CryptoPkg/Library/OpensslLib/openssl/LICENSE LICENSE.openssl +mkdir -p %{buildroot}%{_datadir}/qemu/firmware + +# install the tools +mkdir -p %{buildroot}%{_bindir} \ + %{buildroot}%{_datadir}/%{name}/Conf \ + %{buildroot}%{_datadir}/%{name}/Scripts +install BaseTools/Source/C/bin/* \ + %{buildroot}%{_bindir} +install BaseTools/BinWrappers/PosixLike/LzmaF86Compress \ + %{buildroot}%{_bindir} +install BaseTools/BuildEnv \ + %{buildroot}%{_datadir}/%{name} +install BaseTools/Conf/*.template \ + %{buildroot}%{_datadir}/%{name}/Conf +install BaseTools/Scripts/GccBase.lds \ + %{buildroot}%{_datadir}/%{name}/Scripts + +# install firmware images +mkdir -p %{buildroot}%{_datadir}/%{name} +cp -av Fedora/* %{buildroot}%{_datadir}/%{name} +%if !%{with experimental} +rm -rf %{buildroot}%{_datadir}/%{name}/experimental +%endif + +%if %{build_ovmf} +# compat symlinks +mkdir -p %{buildroot}%{_datadir}/OVMF +ln -s ../%{name}/ovmf/OVMF_CODE.fd %{buildroot}%{_datadir}/OVMF/ +ln -s ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}%{_datadir}/OVMF/ +ln -s ../%{name}/ovmf/OVMF_VARS.fd %{buildroot}%{_datadir}/OVMF/ +ln -s ../%{name}/ovmf/OVMF_VARS.secboot.fd %{buildroot}%{_datadir}/OVMF/ +ln -s ../%{name}/ovmf/UefiShell.iso %{buildroot}%{_datadir}/OVMF/ +ln -s OVMF_CODE.fd %{buildroot}%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd + +# json description files +mkdir -p %{buildroot}%{_datadir}/qemu/firmware +install -m 0644 \ + 30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json \ + 31-edk2-ovmf-2m-raw-x64-sb-enrolled.json \ + 40-edk2-ovmf-4m-qcow2-x64-sb.json \ + 41-edk2-ovmf-2m-raw-x64-sb.json \ + 50-edk2-ovmf-4m-qcow2-x64-nosb.json \ + 51-edk2-ovmf-2m-raw-x64-nosb.json \ + 60-edk2-ovmf-x64-amdsev.json \ + 60-edk2-ovmf-x64-inteltdx.json \ + %{buildroot}%{_datadir}/qemu/firmware +install -m 0644 \ + 50-edk2-ovmf-x64-microvm.json \ + 30-edk2-ovmf-ia32-sb-enrolled.json \ + 40-edk2-ovmf-ia32-sb.json \ + 50-edk2-ovmf-ia32-nosb.json \ + %{buildroot}%{_datadir}/qemu/firmware +# endif build_ovmf +%endif + +%if %{build_aarch64} +# compat symlinks +mkdir -p %{buildroot}%{_datadir}/AAVMF +ln -s ../%{name}/aarch64/QEMU_EFI-pflash.raw \ + %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd +ln -s ../%{name}/aarch64/QEMU_EFI-silent-pflash.raw \ + %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.fd +ln -s ../%{name}/aarch64/vars-template-pflash.raw \ + %{buildroot}%{_datadir}/AAVMF/AAVMF_VARS.fd +ln -s ../%{name}/arm/QEMU_EFI-pflash.raw \ + %{buildroot}%{_datadir}/AAVMF/AAVMF32_CODE.fd + +# json description files +install -m 0644 \ + 50-edk2-aarch64-qcow2.json \ + 51-edk2-aarch64-raw.json \ + 52-edk2-aarch64-verbose-qcow2.json \ + 53-edk2-aarch64-verbose-raw.json \ + %{buildroot}%{_datadir}/qemu/firmware +install -m 0644 \ + 50-edk2-arm-verbose.json \ + %{buildroot}%{_datadir}/qemu/firmware +# endif build_aarch64 +%endif + +# edk2-tools-python install +cp -R BaseTools/Source/Python %{buildroot}%{_datadir}/%{name}/Python +for i in build BPDG Ecc GenDepex GenFds GenPatchPcdTable PatchPcdValue TargetTool Trim UPT; do +echo '#!/bin/sh +export PYTHONPATH=%{_datadir}/%{name}/Python +exec python3 '%{_datadir}/%{name}/Python/$i/$i.py' "$@"' > %{buildroot}%{_bindir}/$i + chmod +x %{buildroot}%{_bindir}/$i +done + +%if 0%{?py_byte_compile:1} +# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#manual-bytecompilation +%py_byte_compile %{python3} %{buildroot}%{_datadir}/edk2/Python +%endif + +%check +for file in %{buildroot}%{_datadir}/%{name}/*/*VARS.secboot.fd; do + test -f "$file" || continue + virt-fw-vars --input $file --print | grep "SecureBootEnable.*ON" || exit 1 +done + +%global common_files \ + %%license License.txt License.OvmfPkg.txt License-History.txt LICENSE.openssl \ + %%dir %%{_datadir}/%%{name}/ \ + %%dir %%{_datadir}/qemu \ + %%dir %%{_datadir}/qemu/firmware + +%if %{build_ovmf} +%files ovmf +%common_files +%doc OvmfPkg/README +%doc ovmf-whitepaper-c770f8c.txt +%dir %{_datadir}/OVMF/ +%{_datadir}/OVMF/OVMF_CODE.fd +%{_datadir}/OVMF/OVMF_CODE.secboot.fd +%{_datadir}/OVMF/OVMF_VARS.fd +%{_datadir}/OVMF/OVMF_VARS.secboot.fd +%{_datadir}/OVMF/UefiShell.iso +%dir %{_datadir}/%{name}/ovmf/ +%{_datadir}/%{name}/ovmf/OVMF_CODE.fd +%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd +%{_datadir}/%{name}/ovmf/OVMF_CODE.secboot.fd +%{_datadir}/%{name}/ovmf/OVMF_VARS.fd +%{_datadir}/%{name}/ovmf/OVMF_VARS.secboot.fd +%{_datadir}/%{name}/ovmf/OVMF.amdsev.fd +%{_datadir}/%{name}/ovmf/OVMF.inteltdx.fd +%{_datadir}/%{name}/ovmf/UefiShell.iso +%{_datadir}/%{name}/ovmf/Shell.efi +%{_datadir}/%{name}/ovmf/EnrollDefaultKeys.efi +%{_datadir}/qemu/firmware/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json +%{_datadir}/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json +%{_datadir}/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json +%{_datadir}/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json +%{_datadir}/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json +%{_datadir}/qemu/firmware/51-edk2-ovmf-2m-raw-x64-nosb.json +%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-amdsev.json +%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-inteltdx.json +%{_datadir}/%{name}/ovmf/MICROVM.fd +%{_datadir}/qemu/firmware/50-edk2-ovmf-x64-microvm.json +%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.qcow2 +%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.secboot.qcow2 +%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.qcow2 +%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.secboot.qcow2 +%{_datadir}/%{name}/ovmf/*.pcr +# endif build_ovmf +%endif + +%if %{build_aarch64} +%files aarch64 +%common_files +%dir %{_datadir}/AAVMF/ +%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd +%{_datadir}/AAVMF/AAVMF_CODE.fd +%{_datadir}/AAVMF/AAVMF_VARS.fd +%dir %{_datadir}/%{name}/aarch64/ +%{_datadir}/%{name}/aarch64/QEMU_EFI-pflash.* +%{_datadir}/%{name}/aarch64/QEMU_EFI-silent-pflash.* +%{_datadir}/%{name}/aarch64/vars-template-pflash.* +%{_datadir}/%{name}/aarch64/QEMU_EFI.fd +%{_datadir}/%{name}/aarch64/QEMU_EFI.silent.fd +%{_datadir}/%{name}/aarch64/QEMU_VARS.fd +%{_datadir}/%{name}/aarch64/BL32_AP_MM.fd +%{_datadir}/%{name}/aarch64/QEMU_EFI.kernel.fd +%{_datadir}/qemu/firmware/50-edk2-aarch64-qcow2.json +%{_datadir}/qemu/firmware/51-edk2-aarch64-raw.json +%{_datadir}/qemu/firmware/52-edk2-aarch64-verbose-qcow2.json +%{_datadir}/qemu/firmware/53-edk2-aarch64-verbose-raw.json +# endif build_aarch64 +%endif + +%files tools +%license License.txt +%license License-History.txt +%{_bindir}/DevicePath +%{_bindir}/EfiRom +%{_bindir}/GenCrc32 +%{_bindir}/GenFfs +%{_bindir}/GenFv +%{_bindir}/GenFw +%{_bindir}/GenSec +%{_bindir}/LzmaCompress +%{_bindir}/LzmaF86Compress +%{_bindir}/TianoCompress +%{_bindir}/VfrCompile +%{_bindir}/VolInfo +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/BuildEnv +%{_datadir}/%{name}/Conf +%{_datadir}/%{name}/Scripts + +%files tools-doc +%doc BaseTools/UserManuals/*.rtf + + +%if %{build_ovmf} +%files ovmf-ia32 +%common_files +%dir %{_datadir}/%{name}/ovmf-ia32 +%{_datadir}/%{name}/ovmf-ia32/EnrollDefaultKeys.efi +%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.fd +%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.secboot.fd +%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.fd +%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.secboot.fd +%{_datadir}/%{name}/ovmf-ia32/Shell.efi +%{_datadir}/%{name}/ovmf-ia32/UefiShell.iso +%{_datadir}/qemu/firmware/30-edk2-ovmf-ia32-sb-enrolled.json +%{_datadir}/qemu/firmware/40-edk2-ovmf-ia32-sb.json +%{_datadir}/qemu/firmware/50-edk2-ovmf-ia32-nosb.json + +%if %{with experimental} +%files ovmf-experimental +%common_files +%dir %{_datadir}/%{name}/experimental +%{_datadir}/%{name}/experimental/*.fd +%{_datadir}/%{name}/experimental/*.raw +%{_datadir}/%{name}/experimental/*.pcr +%endif + +%files ovmf-xen +%common_files +%dir %{_datadir}/%{name}/xen +%{_datadir}/%{name}/xen/*.fd +%endif + +%if %{with arm} +%files arm +%common_files +%dir %{_datadir}/AAVMF/ +%{_datadir}/AAVMF/AAVMF32_CODE.fd +%dir %{_datadir}/%{name}/arm +%{_datadir}/%{name}/arm/QEMU_EFI-pflash.raw +%{_datadir}/%{name}/arm/QEMU_EFI.fd +%{_datadir}/%{name}/arm/QEMU_VARS.fd +%{_datadir}/%{name}/arm/vars-template-pflash.raw +%{_datadir}/qemu/firmware/50-edk2-arm-verbose.json +%endif + +%if %{build_riscv64} +%files riscv64 +%common_files +%{_datadir}/%{name}/riscv/*.fd +%{_datadir}/%{name}/riscv/*.raw +%endif + +%files ext4 +%common_files +%dir %{_datadir}/%{name}/drivers +%{_datadir}/%{name}/drivers/ext4*.efi + + +%files tools-python +%{_bindir}/build +%{_bindir}/BPDG +%{_bindir}/Ecc +%{_bindir}/GenDepex +%{_bindir}/GenFds +%{_bindir}/GenPatchPcdTable +%{_bindir}/PatchPcdValue +%{_bindir}/TargetTool +%{_bindir}/Trim +%{_bindir}/UPT +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/Python + + +%changelog +* Fri May 26 2023 Vince Perri - 20230301gitf80f052277c8-32 +- License verified. +- Disable aarch64 and riscv64 builds. +- Disable ovmf-experimental and arm subpackages due to build error. +- Pass _smp_mflags to edk-build.py commands for parallel builds. +- Disable cross-compilation. +- Add --wildcards to fix tar command. +- Initial CBL-Mariner import from Fedora 39 (license: MIT). + +* Wed May 17 2023 Gerd Hoffmann - 20230301gitf80f052277c8-31 +- drop /ovmf-4m/, move 4M builds to /ovmf/ instead + +* Wed May 17 2023 Gerd Hoffmann - 20230301gitf80f052277c8-30 +- update build script + +* Tue May 16 2023 Gerd Hoffmann - 20230301gitf80f052277c8-29 +- json descriptors: explicitly set mode = split + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-28 +- switch DBXDATE to 20230509 + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-27 +- add 20230509 dbx update files + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-26 +- add json descriptor files for qcow2 images + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-25 +- drop ovmf 4m raw images + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-24 +- add ovmf 4m qcow2 images + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-23 +- require python3-virt-firmware v23.5 + +* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-22 +- update NestedInterruptTplLib patches + +* Fri May 05 2023 Gerd Hoffmann - 20230301gitf80f052277c8-21 +- drop ASSERT from NestedInterruptTplLib (rhbz#2183336). + +* Thu Apr 27 2023 Gerd Hoffmann - 20230301gitf80f052277c8-4 +- fix tpm detection. + +* Thu Apr 13 2023 Gerd Hoffmann - 20230301gitf80f052277c8-2 +- add StandaloneMM and ArmVirtQemuKernel builds. +- add json files for qcow2 images. +- update dbx files to 2023-03. + +* Mon Mar 06 2023 Gerd Hoffmann - 20230301gitf80f052277c8-1 +- update to edk2-stable202302 +- update dbx database to 20220812 +- add riscv64 sub-rpm + +* Fri Feb 17 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-14 +- add sub-package with xen build (resolves: rhbz#2170730) + +* Sat Feb 11 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-13 +- update openssl (CVE-2023-0286, CVE-2023-0215, CVE-2022-4450, CVE-2022-4304). + +* Wed Feb 08 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-12 +- cherry-pick aarch64 bugfixes. +- set firmware build release date. +- add ext4 sub-package. + +* Thu Jan 19 2023 Fedora Release Engineering - 20221117gitfff6d81270b5-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Jan 06 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-10 +- add experimental builds with strict nx checking. + +* Mon Jan 02 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-9 +- revert 'make files sparse again' (resolves: rhbz#2155673). +- pick up compiler + linker flags from rpm + +* Tue Dec 20 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-8 +- make files sparse again + +* Thu Dec 15 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-7 +- backport https://github.com/tianocore/edk2/pull/3770 + +* Mon Dec 12 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-6 +- fix ovmf platform config (revert broken commit). +- show version information in smbios (backport). + +* Mon Dec 05 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-5 +- rename *.json files to be more consistent. +- build script update + +* Fri Dec 02 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-4 +- apply dbx updates + +* Tue Nov 29 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-3 +- fix build script + +* Mon Nov 28 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-2 +- add workaround for broken grub + +* Tue Sep 20 2022 Gerd Hoffmann - 20220826gitba0e0e4c6a17-1 +- update edk2 to 2022-08 stable tag. +- update openssl bundle to rhel-8.7 level. +- add stdvga fix. +- add 4MB firmware builds. + +* Thu Aug 18 2022 Gerd Hoffmann - 20220526git16779ede2d36-5 +- comment out patch #4 (bug 2116534 workaround) +- comment out patch #12 (bug 2114858 workaround) + +* Thu Jul 21 2022 Fedora Release Engineering - 20220526git16779ede2d36-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Fri Jun 10 2022 Gerd Hoffmann - 20220526git16779ede2d36-3 +- swap stack fix patch. + +* Wed Jun 08 2022 Gerd Hoffmann - 20220526git16779ede2d36-2 +- fix PcdResizeXterm patch. +- minor specfile cleanup. +- add 0021-OvmfPkg-Sec-fix-stack-switch.patch +- Resolves rhbz#2093745 + +* Tue May 31 2022 Gerd Hoffmann - 20220526git16779ede2d36-1 +- update to new edk2 stable tag (2022-05), refresh patches. +- add amdsev and inteltdx builds +- drop qosb + +* Tue Apr 19 2022 Gerd Hoffmann - 20220221gitb24306f15daa-4 +- switch to virt-firmware for secure boot key enrollment +- Stop builds on armv7 too (iasl missing). + +* Thu Apr 07 2022 Gerd Hoffmann - 20220221gitb24306f15daa-3 +- Fix TPM build options. +- Stop builds on i686 (iasl missing). +- Resolves rhbz#2072827 + +* Wed Mar 23 2022 Gerd Hoffmann - 20220221gitb24306f15daa-1 +- Update to edk2-stable202202 + +* Thu Jan 20 2022 Fedora Release Engineering - 20211126gitbb1bba3d7767-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Dec 6 2021 Gerd Hoffmann - 20211126gitbb1bba3d7767-1 +- Update to edk2-stable202111 +- Resolves rhbz#1978966 +- Resolves rhbz#2026744 + +* Mon Dec 6 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-5 +- Drop glibc strcmp workaround + +* Mon Nov 29 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-4 +- Drop customized splash screen boot logo +- Temporary workaround for suspected glibc strcmp bug breaking builds in koji + +* Wed Sep 1 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-3 +- Fix qemu packaging conditionals for ELN builds + +* Wed Jul 21 2021 Fedora Release Engineering - 20210527gite1999b264f1f-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jul 20 2021 Cole Robinson - 20210527gite1999b264f1f-1 +- Update to git snapshot +- Sync with c9s packaging + +* Mon Jun 14 2021 Jiri Kucera - 20200801stable-5 +- Replace genisoimage with xorriso + +* Tue Jan 26 2021 Fedora Release Engineering - 20200801stable-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Dec 03 2020 Cole Robinson - 20200801stable-3 +- Really fix TPM breakage (bz 1897367) + +* Tue Nov 24 2020 Cole Robinson - 20200801stable-2 +- Fix openssl usage, unbreak TPM (bz 1897367) + +* Wed Sep 16 2020 Cole Robinson - 20200801stable-1 +- Update to edk2 stable 202008 + +* Sat Sep 12 2020 Peter Robinson - 20200201stable-6 +- Tweaks for aarch64/ARMv7 builds +- Minor cleanups + +* Tue Aug 04 2020 Cole Robinson - 20200201stable-5 +- Fix build failures on rawhide + +* Sat Aug 01 2020 Fedora Release Engineering - 20200201stable-4 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 20200201stable-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 20200201stable-2 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Mon Apr 13 2020 Cole Robinson - 20200201stable-1 +- Update to stable-202002 + +* Tue Jan 28 2020 Fedora Release Engineering - 20190501stable-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Sep 06 2019 Patrick Uiterwijk - 20190501stable-4 +- Updated HTTP_BOOT option to new upstream value + +* Wed Jul 24 2019 Fedora Release Engineering - 20190501stable-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon Jul 15 2019 Cole Robinson - 20190501stable-2 +- License is now BSD-2-Clause-Patent +- Re-enable secureboot enrollment +- Use qemu-ovmf-secureboot from git + +* Thu Jul 11 2019 Cole Robinson - 20190501stable-1 +- Update to stable-201905 +- Update to openssl-1.1.1b +- Ship VARS file for ovmf-ia32 (bug 1688596) +- Ship Fedora-variant JSON "firmware descriptor files" +- Resolves rhbz#1728652 + +* Mon Mar 18 2019 Cole Robinson - 20190308stable-1 +- Use YYYYMMDD versioning to fix upgrade path + +* Fri Mar 15 2019 Cole Robinson - 201903stable-1 +- Update to stable-201903 +- Update to openssl-1.1.0j +- Move to python3 deps + +* Thu Jan 31 2019 Fedora Release Engineering - 20180815gitcb5f4f45ce-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Nov 14 2018 Patrick Uiterwijk - 20180815gitcb5f4f45ce-5 +- Add -qosb dependency on python3 + +* Fri Nov 9 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-4 +- Fix network boot via grub (bz 1648476) + +* Wed Sep 12 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-3 +- Explicitly compile the scripts using py_byte_compile + +* Fri Aug 31 2018 Cole Robinson - 20180815gitcb5f4f45ce-2 +- Fix passing through RPM build flags (bz 1540244) + +* Tue Aug 21 2018 Cole Robinson - 20180815gitcb5f4f45ce-1 +- Update to edk2 git cb5f4f45ce, edk2-stable201808 +- Update to qemu-ovmf-secureboot-1.1.3 +- Enable TPM2 support + +* Mon Jul 23 2018 Paolo Bonzini - 20180529gitee3198e672e2-5 +- Fixes for AMD SEV on OVMF_CODE.fd +- Add Provides for bundled OpenSSL + +* Wed Jul 18 2018 Paolo Bonzini - 20180529gitee3198e672e2-4 +- Enable IPv6 + +* Thu Jul 12 2018 Fedora Release Engineering - 20180529gitee3198e672e2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jun 20 2018 Paolo Bonzini - 20180529gitee3198e672e2-2 +- Backport two bug fixes from RHEL: connect again virtio-rng devices, and + connect consoles unconditionally in OVMF (ARM firmware already did it) + +* Tue May 29 2018 Paolo Bonzini - 20180529gitee3198e672e2-1 +- Rebase to ee3198e672e2 + +* Tue May 01 2018 Cole Robinson - 20171011git92d07e4-7 +- Bump release for new build + +* Fri Mar 30 2018 Patrick Uiterwijk - 20171011git92d07e4-6 +- Add qemu-ovmf-secureboot (qosb) +- Generate pre-enrolled Secure Boot OVMF VARS files + +* Wed Mar 07 2018 Paolo Bonzini - 20171011git92d07e4-5 +- Fix GCC 8 compilation +- Replace dosfstools and mtools with qemu-img vvfat + +* Wed Feb 07 2018 Fedora Release Engineering - 20171011git92d07e4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Jan 19 2018 Paolo Bonzini - 20170209git296153c5-3 +- Add OpenSSL patches from Fedora +- Enable TLS_MODE + +* Fri Nov 17 2017 Paolo Bonzini - 20170209git296153c5-2 +- Backport patches 19-21 from RHEL +- Add patches 22-24 to fix SEV slowness +- Add fedora conditionals + +* Tue Nov 14 2017 Paolo Bonzini - 20171011git92d07e4-1 +- Import source and patches from RHEL version +- Update OpenSSL to 1.1.0e +- Refresh 0099-Tweak-the-tools_def-to-support-cross-compiling.patch + +* Mon Nov 13 2017 Paolo Bonzini - 20170209git296153c5-6 +- Allow non-cross builds +- Install /usr/share/OVMF and /usr/share/AAVMF + +* Wed Aug 02 2017 Fedora Release Engineering - 20170209git296153c5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 20170209git296153c5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Mar 15 2017 Cole Robinson - 20170209git296153c5-3 +- Ship ovmf-ia32 package (bz 1424722) + +* Thu Feb 16 2017 Cole Robinson - 20170209git296153c5-2 +- Update EnrollDefaultKeys patch (bz #1398743) + +* Mon Feb 13 2017 Paolo Bonzini - 20170209git296153c5-1 +- Rebase to git master +- New patch 0010 fixes failure to build from source. + +* Fri Feb 10 2017 Fedora Release Engineering - 20161105git3b25ca8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Sun Nov 06 2016 Cole Robinson - 20161105git3b25ca8-1 +- Rebase to git master + +* Fri Sep 9 2016 Tom Callaway - 20160418gita8c39ba-5 +- replace legally problematic openssl source with "hobbled" tarball + +* Thu Jul 21 2016 Gerd Hoffmann - 20160418gita8c39ba-4 +- Also build for armv7. + +* Tue Jul 19 2016 Gerd Hoffmann 20160418gita8c39ba-3 +- Update EnrollDefaultKeys patch. + +* Fri Jul 8 2016 Paolo Bonzini - 20160418gita8c39ba-2 +- Distribute edk2-ovmf on aarch64 + +* Sat May 21 2016 Cole Robinson - 20160418gita8c39ba-1 +- Distribute edk2-aarch64 on x86 (bz #1338027) + +* Mon Apr 18 2016 Gerd Hoffmann 20160418gita8c39ba-0 +- Update to latest git. +- Add firmware builds (FatPkg is free now). + +* Mon Feb 15 2016 Cole Robinson 20151127svn18975-3 +- Fix FTBFS gcc warning (bz 1307439) + +* Wed Feb 03 2016 Fedora Release Engineering - 20151127svn18975-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Nov 27 2015 Paolo Bonzini - 20151127svn18975-1 +- Rebase to 20151127svn18975-1 +- Linker script renamed to GccBase.lds + +* Wed Jun 17 2015 Fedora Release Engineering - 20150519svn17469-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 19 2015 Paolo Bonzini - 20150519svn17469-1 +- Rebase to 20150519svn17469-1 +- edk2-remove-tree-check.patch now upstream + +* Sat May 02 2015 Kalev Lember - 20140724svn2670-6 +- Rebuilt for GCC 5 C++11 ABI change + +* Sat Aug 16 2014 Fedora Release Engineering - 20140724svn2670-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jul 24 2014 Paolo Bonzini - 20140724svn2670-1 +- Rebase to 20140724svn2670-1 + +* Tue Jun 24 2014 Paolo Bonzini - 20140624svn2649-1 +- Use standalone .tar.xz from buildtools repo + +* Tue Jun 24 2014 Paolo Bonzini - 20140328svn15376-4 +- Install BuildTools/BaseEnv + +* Mon Jun 23 2014 Paolo Bonzini - 20140328svn15376-3 +- Rebase to get GCC48 configuration +- Package EDK_TOOLS_PATH as /usr/share/edk2 +- Package "build" and LzmaF86Compress too, as well as the new + tools Ecc and TianoCompress. + +* Sat Jun 07 2014 Fedora Release Engineering - 20131114svn14844-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Nov 14 2013 Paolo Bonzini - 20131114svn14844-1 +- Upgrade to r14844. +- Remove upstreamed parts of patch 1. + +* Fri Nov 8 2013 Paolo Bonzini - 20130515svn14365-7 +- Make BaseTools compile on ARM. + +* Fri Aug 30 2013 Paolo Bonzini - 20130515svn14365-6 +- Revert previous change; firmware packages should be noarch, and building + BaseTools twice is simply wrong. + +* Mon Aug 19 2013 Kay Sievers - 20130515svn14365-5 +- Add sub-package with EFI shell + +* Sat Aug 03 2013 Fedora Release Engineering - 20130515svn14365-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu May 23 2013 Dan Horák 20130515svn14365-3 +- set ExclusiveArch + +* Thu May 16 2013 Paolo Bonzini 20130515svn14365-2 +- Fix edk2-tools-python Requires + +* Wed May 15 2013 Paolo Bonzini 20130515svn14365-1 +- Split edk2-tools-doc and edk2-tools-python +- Fix Python BuildRequires +- Remove FatBinPkg at package creation time. +- Use fully versioned dependency. +- Add comment on how to generate the sources. + +* Thu May 2 2013 Paolo Bonzini 20130502.g732d199-1 +- Create. + diff --git a/SPECS-EXTENDED/edk2/ovmf-whitepaper-c770f8c.txt b/SPECS/edk2/ovmf-whitepaper-c770f8c.txt similarity index 100% rename from SPECS-EXTENDED/edk2/ovmf-whitepaper-c770f8c.txt rename to SPECS/edk2/ovmf-whitepaper-c770f8c.txt diff --git a/SPECS/future/future-fix_tests.patch b/SPECS/future/future-fix_tests.patch new file mode 100644 index 00000000000..59422c9c498 --- /dev/null +++ b/SPECS/future/future-fix_tests.patch @@ -0,0 +1,192 @@ +From c341d5497788923cc6ea0bd1358279f2147aa167 Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin +Date: Sun, 15 Nov 2020 13:01:39 +0300 +Subject: [PATCH 1/7] Add support Python 3.9 + +--- + src/future/backports/xmlrpc/client.py | 7 ++++--- + src/future/moves/_dummy_thread.py | 5 ++++- + src/future/standard_library/__init__.py | 2 +- + 3 files changed, 9 insertions(+), 5 deletions(-) + +diff --git a/src/future/backports/xmlrpc/client.py b/src/future/backports/xmlrpc/client.py +index b78e5bad..0bcd90c9 100644 +--- a/src/future/backports/xmlrpc/client.py ++++ b/src/future/backports/xmlrpc/client.py +@@ -134,10 +134,11 @@ + from future.builtins import bytes, dict, int, range, str + + import base64 +-# Py2.7 compatibility hack +-base64.encodebytes = base64.encodestring +-base64.decodebytes = base64.decodestring + import sys ++if sys.version_info < (3, 9): ++ # Py2.7 compatibility hack ++ base64.encodebytes = base64.encodestring ++ base64.decodebytes = base64.decodestring + import time + from datetime import datetime + from future.backports.http import client as http_client +diff --git a/src/future/moves/_dummy_thread.py b/src/future/moves/_dummy_thread.py +index 688d249b..e5dca348 100644 +--- a/src/future/moves/_dummy_thread.py ++++ b/src/future/moves/_dummy_thread.py +@@ -2,7 +2,10 @@ + from future.utils import PY3 + + if PY3: +- from _dummy_thread import * ++ try: ++ from _dummy_thread import * ++ except ImportError: ++ from _thread import * + else: + __future_module__ = True + from dummy_thread import * +diff --git a/src/future/standard_library/__init__.py b/src/future/standard_library/__init__.py +index cff02f95..41c4f36d 100644 +--- a/src/future/standard_library/__init__.py ++++ b/src/future/standard_library/__init__.py +@@ -125,7 +125,7 @@ + # 'Tkinter': 'tkinter', + '_winreg': 'winreg', + 'thread': '_thread', +- 'dummy_thread': '_dummy_thread', ++ 'dummy_thread': '_dummy_thread' if sys.version_info < (3, 9) else '_thread', + # 'anydbm': 'dbm', # causes infinite import loop + # 'whichdb': 'dbm', # causes infinite import loop + # anydbm and whichdb are handled by fix_imports2 +From 90e3e4d7146324bd88a5453ba17a43412174f013 Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin +Date: Sun, 15 Nov 2020 13:09:44 +0300 +Subject: [PATCH 3/7] Fix tests + +--- + tests/test_future/test_standard_library.py | 3 ++- + tests/test_future/test_urllib_toplevel.py | 5 +++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/tests/test_future/test_standard_library.py b/tests/test_future/test_standard_library.py +index 3ac5d2d7..820bf47a 100644 +--- a/tests/test_future/test_standard_library.py ++++ b/tests/test_future/test_standard_library.py +@@ -422,7 +422,8 @@ def test_urllib_imports_install_hooks(self): + + def test_underscore_prefixed_modules(self): + import _thread +- import _dummy_thread ++ if sys.version_info < (3, 9): ++ import _dummy_thread + import _markupbase + self.assertTrue(True) + +diff --git a/tests/test_future/test_urllib_toplevel.py b/tests/test_future/test_urllib_toplevel.py +index 11e77201..68bc4c96 100644 +--- a/tests/test_future/test_urllib_toplevel.py ++++ b/tests/test_future/test_urllib_toplevel.py +@@ -781,8 +781,9 @@ def test_unquoting(self): + "%s" % result) + self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, None) + self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, ()) +- with support.check_warnings(('', BytesWarning), quiet=True): +- self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, bytes(b'')) ++ if sys.version_info < (3, 9): ++ with support.check_warnings(('', BytesWarning), quiet=True): ++ self.assertRaises((TypeError, AttributeError), urllib_parse.unquote, bytes(b'')) + + def test_unquoting_badpercent(self): + # Test unquoting on bad percent-escapes +From 32641e1e8f22e326f8cb77dbcd8b2172ece797e2 Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin +Date: Sun, 15 Nov 2020 13:30:06 +0300 +Subject: [PATCH 5/7] Fix test_pow for Python 3.8+ + +--- + tests/test_future/test_builtins.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tests/test_future/test_builtins.py b/tests/test_future/test_builtins.py +index 3921a608..f5dbec64 100644 +--- a/tests/test_future/test_builtins.py ++++ b/tests/test_future/test_builtins.py +@@ -1304,7 +1304,8 @@ def test_pow(self): + self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j) + + # Raises TypeError in Python < v3.5, ValueError in v3.5: +- self.assertRaises((TypeError, ValueError), pow, -1, -2, 3) ++ if sys.version_info < (3, 8): ++ self.assertRaises((TypeError, ValueError), pow, -1, -2, 3) + self.assertRaises(ValueError, pow, 1, 2, 0) + + self.assertRaises(TypeError, pow) + +From e7a2f76afa12ac4201c25dac9f93197016a19a7c Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin +Date: Sun, 15 Nov 2020 13:53:28 +0300 +Subject: [PATCH 6/7] Fix test_ftp for Python 3.8+ + +--- + tests/test_future/test_urllib2.py | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/tests/test_future/test_urllib2.py b/tests/test_future/test_urllib2.py +index 2d69dad1..bd8e75c5 100644 +--- a/tests/test_future/test_urllib2.py ++++ b/tests/test_future/test_urllib2.py +@@ -691,10 +691,6 @@ def connect_ftp(self, user, passwd, host, port, dirs, + h = NullFTPHandler(data) + h.parent = MockOpener() + +- # MIME guessing works in Python 3.8! +- guessed_mime = None +- if sys.hexversion >= 0x03080000: +- guessed_mime = "image/gif" + for url, host, port, user, passwd, type_, dirs, filename, mimetype in [ + ("ftp://localhost/foo/bar/baz.html", + "localhost", ftplib.FTP_PORT, "", "", "I", +@@ -713,7 +709,10 @@ def connect_ftp(self, user, passwd, host, port, dirs, + ["foo", "bar"], "", None), + ("ftp://localhost/baz.gif;type=a", + "localhost", ftplib.FTP_PORT, "", "", "A", +- [], "baz.gif", guessed_mime), ++ [], "baz.gif", None), ++ ("ftp://localhost/baz.gif", ++ "localhost", ftplib.FTP_PORT, "", "", "I", ++ [], "baz.gif", "image/gif"), + ]: + req = Request(url) + req.timeout = None + +From 21ae5c76eb49edfff73d5a2319bf42ab0378da48 Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin +Date: Fri, 11 Jun 2021 22:03:18 +0300 +Subject: [PATCH 7/7] Fix tests + +--- + tests/test_future/test_urllib_toplevel.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/test_future/test_urllib_toplevel.py b/tests/test_future/test_urllib_toplevel.py +index 68bc4c96..923b2e8a 100644 +--- a/tests/test_future/test_urllib_toplevel.py ++++ b/tests/test_future/test_urllib_toplevel.py +@@ -120,7 +120,7 @@ def setUp(self): + finally: + f.close() + self.pathname = support.TESTFN +- self.returned_obj = urlopen("file:%s" % self.pathname) ++ self.returned_obj = urlopen("file:%s" % urllib_parse.quote(self.pathname)) + + def tearDown(self): + """Shut down the open object""" +@@ -167,7 +167,7 @@ def test_info(self): + self.assertIsInstance(self.returned_obj.info(), email_message.Message) + + def test_geturl(self): +- self.assertEqual(self.returned_obj.geturl(), self.pathname) ++ self.assertEqual(self.returned_obj.geturl(), urllib_parse.quote(self.pathname)) + + def test_getcode(self): + self.assertIsNone(self.returned_obj.getcode()) + diff --git a/SPECS/future/future-python311.patch b/SPECS/future/future-python311.patch new file mode 100644 index 00000000000..97becad4152 --- /dev/null +++ b/SPECS/future/future-python311.patch @@ -0,0 +1,31 @@ +--- a/tests/test_future/test_utils.orig.py 2019-10-31 01:56:12.000000000 +0100 ++++ b/tests/test_future/test_utils.py 2021-12-04 11:26:23.050523816 +0100 +@@ -150,7 +150,7 @@ + self.assertRaises(Timeout, raise_, Timeout()) + + if PY3: +- self.assertRaisesRegexp( ++ self.assertRaisesRegex( + TypeError, "class must derive from BaseException", + raise_, int) + +@@ -343,6 +343,8 @@ + File "/opt/python-future/tests/test_future/test_utils.py", line 328, in test_single_exception_stacktrace + raise CustomException('ERROR') + ''' ++ if sys.version_info >= (3, 11): ++ expected += ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' + if PY2: + expected += 'CustomException: ERROR\n' + else: +--- a/tests/test_future/test_urllib_toplevel.orig.py 2021-12-04 12:16:44.475424000 +0100 ++++ b/tests/test_future/test_urllib_toplevel.py 2021-12-04 12:37:15.282519570 +0100 +@@ -1198,7 +1198,7 @@ + + class Utility_Tests(unittest.TestCase): + """Testcase to test the various utility functions in the urllib.""" +- ++ @unittest.skipIf(sys.version_info >= (3, 11), "urllib.parse.splitpasswd() was removed from Python 3.11+") + def test_splitpasswd(self): + """Some of password examples are not sensible, but it is added to + confirming to RFC2617 and addressing issue4675. diff --git a/SPECS/future/future-python312.patch b/SPECS/future/future-python312.patch new file mode 100644 index 00000000000..e2633d6484e --- /dev/null +++ b/SPECS/future/future-python312.patch @@ -0,0 +1,70 @@ +From a6135542dffb6b1b8254d6daac779d119d4fc08c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= +Date: Wed, 17 May 2023 14:03:26 +0200 +Subject: [PATCH 1/2] Adjust tests to the repr changes in CPython + +--- + tests/test_future/test_backports.py | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/tests/test_future/test_backports.py b/tests/test_future/test_backports.py +index 63b1afea..5d46b115 100644 +--- a/tests/test_future/test_backports.py ++++ b/tests/test_future/test_backports.py +@@ -599,8 +599,12 @@ def test_yaml_linkage(self): + + def test_repr(self): + od = OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]) +- self.assertEqual(repr(od), +- "OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])") ++ if sys.version_info[0] == 3 and sys.version_info[1] >= 12: ++ self.assertEqual(repr(od), ++ "OrderedDict({'c': 1, 'b': 2, 'a': 3, 'd': 4, 'e': 5, 'f': 6})") ++ else: ++ self.assertEqual(repr(od), ++ "OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])") + self.assertEqual(eval(repr(od)), od) + self.assertEqual(repr(OrderedDict()), "OrderedDict()") + +@@ -608,8 +612,12 @@ def test_repr_recursive(self): + # See issue #9826 + od = OrderedDict.fromkeys('abc') + od['x'] = od +- self.assertEqual(repr(od), +- "OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])") ++ if sys.version_info[0] == 3 and sys.version_info[1] >= 12: ++ self.assertEqual(repr(od), ++ "OrderedDict({'a': None, 'b': None, 'c': None, 'x': ...})") ++ else: ++ self.assertEqual(repr(od), ++ "OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])") + + def test_setdefault(self): + pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)] + +From d7dc44e88b77fea57b9001421428cd7d95abb3bf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= +Date: Wed, 17 May 2023 14:42:09 +0200 +Subject: [PATCH 2/2] Adjust test to the change in CPython, parser now raises + SyntaxError instead of ValueError when source code contains null bytes + +--- + tests/test_future/test_builtins.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/test_future/test_builtins.py b/tests/test_future/test_builtins.py +index 3921a608..d41d1254 100644 +--- a/tests/test_future/test_builtins.py ++++ b/tests/test_future/test_builtins.py +@@ -523,8 +523,8 @@ def test_compile(self): + self.assertRaises(TypeError, compile) + self.assertRaises(ValueError, compile, 'print(42)\n', '', 'badmode') + self.assertRaises(ValueError, compile, 'print(42)\n', '', 'single', 0xff) +- # Raises TypeError in Python < v3.5, ValueError in v3.5: +- self.assertRaises((TypeError, ValueError), compile, chr(0), 'f', 'exec') ++ # Raises TypeError in Python < v3.5, ValueError in v3.5, SyntaxError in >= 3.12: ++ self.assertRaises((TypeError, ValueError, SyntaxError), compile, chr(0), 'f', 'exec') + self.assertRaises(TypeError, compile, 'pass', '?', 'exec', + mode='eval', source='0', filename='tmp') + compile('print("\xe5")\n', '', 'exec') + diff --git a/SPECS-EXTENDED/future/future-skip_tests_with_connection_errors.patch b/SPECS/future/future-skip_tests_with_connection_errors.patch similarity index 81% rename from SPECS-EXTENDED/future/future-skip_tests_with_connection_errors.patch rename to SPECS/future/future-skip_tests_with_connection_errors.patch index 3c1450fb995..6dc132b0dbe 100644 --- a/SPECS-EXTENDED/future/future-skip_tests_with_connection_errors.patch +++ b/SPECS/future/future-skip_tests_with_connection_errors.patch @@ -1,8 +1,8 @@ ##Skipping tests due to connection failures on Fedora build-system ##See https://github.com/PythonCharmers/python-future/issues/165 ---- tests/test_future/test_standard_library.orig.py 2014-11-21 12:52:03.000000000 +0100 -+++ tests/test_future/test_standard_library.py 2015-09-02 11:37:36.808826777 +0200 +--- a/tests/test_future/test_standard_library.orig.py 2014-11-21 12:52:03.000000000 +0100 ++++ b/tests/test_future/test_standard_library.py 2015-09-02 11:37:36.808826777 +0200 @@ -333,6 +333,7 @@ # pprint(r.read().decode('utf-8')) self.assertTrue(True) @@ -20,8 +20,8 @@ """ This site (python-future.org) uses plain http (as of 2014-09-23). ---- tests/test_future/test_requests.orig.py 2014-11-21 12:52:03.000000000 +0100 -+++ tests/test_future/test_requests.py 2015-09-02 11:39:01.509378296 +0200 +--- a/tests/test_future/test_requests.orig.py 2014-11-21 12:52:03.000000000 +0100 ++++ b/tests/test_future/test_requests.py 2015-09-02 11:39:01.509378296 +0200 @@ -57,6 +57,7 @@ This class tests whether the requests module conflicts with the standard library import hooks, as in issue #19. diff --git a/SPECS/future/future.signatures.json b/SPECS/future/future.signatures.json new file mode 100644 index 00000000000..5d81663ea28 --- /dev/null +++ b/SPECS/future/future.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "future-0.18.3.tar.gz": "a112143596b549a3fe4824ce5140fa5b5873fc6ab8782cfa8c6cdb332dcc29d4" + } +} \ No newline at end of file diff --git a/SPECS/future/future.spec b/SPECS/future/future.spec new file mode 100644 index 00000000000..1d173262574 --- /dev/null +++ b/SPECS/future/future.spec @@ -0,0 +1,296 @@ +Vendor: Microsoft Corporation +Distribution: Mariner +%global _pathfix pathfix%{python3_version}.py + +%global _description \ +future is the missing compatibility layer between Python 2 and \ +Python 3. It allows you to use a single, clean Python 3.x-compatible \ +codebase to support both Python 2 and Python 3 with minimal overhead. \ +\ +It provides ``future`` and ``past`` packages with backports and forward \ +ports of features from Python 3 and 2. It also comes with ``futurize`` and \ +``pasteurize``, customized 2to3-based scripts that helps you to convert \ +either Py2 or Py3 code easily to support both Python 2 and 3 in a single \ +clean Py3-style codebase, module by module. + +Name: future +Summary: Easy, clean, reliable Python 2/3 compatibility +Version: 0.18.3 +Release: 6%{?dist} +License: MIT +URL: http://python-future.org/ +Source0: https://github.com/PythonCharmers/python-future/archive/refs/tags/v%{version}/python-%{name}-%{version}.tar.gz#/%{name}-%{version}.tar.gz +BuildArch: noarch + +# https://github.com/PythonCharmers/python-future/issues/165 +Patch0: %{name}-skip_tests_with_connection_errors.patch + +Patch1: %{name}-fix_tests.patch + +%if 0%{?python3_version_nodots} >= 311 +# https://docs.python.org/3.11/whatsnew/3.11.html +Patch2: %{name}-python311.patch + +# https://github.com/PythonCharmers/python-future/pull/619 +Patch3: %{name}-python312.patch +%endif + +%description +%{_description} + +%package -n python%{python3_pkgversion}-%{name} +Summary: Easy, clean, reliable Python 2/3 compatibility +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: python%{python3_pkgversion}-numpy +BuildRequires: python%{python3_pkgversion}-requests +BuildRequires: python%{python3_pkgversion}-pytest +Provides: future-python3 = 0:%{version}-%{release} +Provides: future = 0:%{version}-%{release} +Provides: python3-%{name} = %{version}-%{release} + +Obsoletes: python2-%{name} < 0:%{version}-%{release} +Obsoletes: %{name}-python2 < 0:%{version}-%{release} +Obsoletes: python34-%{name} < 0:%{version}-%{release} + +%description -n python%{python3_pkgversion}-%{name} +%{_description} + +%prep +%setup -q -n python-future-%{version} + +%patch0 -p1 -b .backup +%patch1 -p1 -b .backup +%if 0%{?python3_version_nodots} >= 311 +%patch2 -p1 -b .backup +%patch3 -p1 -b .backup +%endif + +find . -name '*.py' | xargs %{_pathfix} -pn -i "%{__python3}" + +%build +%py3_build + +%install +%py3_install +mv $RPM_BUILD_ROOT%{_bindir}/futurize $RPM_BUILD_ROOT%{_bindir}/futurize-%{python3_version} +mv $RPM_BUILD_ROOT%{_bindir}/pasteurize $RPM_BUILD_ROOT%{_bindir}/pasteurize-%{python3_version} +ln -sf ./futurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/futurize-3 +ln -sf ./pasteurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/pasteurize-3 +ln -sf ./futurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/futurize +ln -sf ./pasteurize-%{python3_version} $RPM_BUILD_ROOT%{_bindir}/pasteurize +sed -i -e '/^#!\//, 1d' $RPM_BUILD_ROOT%{python3_sitelib}/future/backports/test/pystone.py +chmod a+x $RPM_BUILD_ROOT%{python3_sitelib}/future/backports/test/pystone.py + +## This packages ships PEM certificates in future/backports/test directory. +## It's for testing purpose, i guess. Ignore them. +%check + +# Bugs +# https://github.com/PythonCharmers/python-future/issues/508 +%if 0%{?python3_version_nodots} > 37 +PYTHONPATH=$PWD/build/lib py.test-%{python3_version} -k "not test_urllibnet and not test_single_exception_stacktrace" -q +%endif +%if 0%{?python3_version_nodots} <= 37 +PYTHONPATH=$PWD/build/lib py.test-%{python3_version} +%endif + +%files -n python%{python3_pkgversion}-%{name} +%license LICENSE.txt +%doc README.rst +%{_bindir}/futurize-3 +%{_bindir}/pasteurize-3 +%{_bindir}/futurize +%{_bindir}/pasteurize +%{_bindir}/futurize-%{python3_version} +%{_bindir}/pasteurize-%{python3_version} +%{python3_sitelib}/future/ +%{python3_sitelib}/past/ +%{python3_sitelib}/libfuturize/ +%{python3_sitelib}/libpasteurize/ +%{python3_sitelib}/*.egg-info + +%changelog +* Tue May 30 2023 Vince Perri - 0.18.2-6 +- License verified. +- Initial CBL-Mariner import from Fedora 39 (license: MIT). + +* Wed May 17 2023 Antonio Trande - 0.18.3-5 +- Patched for Python-3.12 (rhbz#2176017) + +* Thu Jan 19 2023 Fedora Release Engineering - 0.18.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Jan 17 2023 Antonio Trande - 0.18.3-3 +- Upload new source archive + +* Fri Jan 13 2023 Antonio Trande - 0.18.3-2 +- Add updated patch for fixing tests + +* Thu Jan 12 2023 Antonio Trande - 0.18.3-1 +- Release 0.18.3 + +* Tue Aug 09 2022 Antonio Trande - 0.18.2-16 +- Skip test_single_exception_stacktrace (upstream bug#608) (rhbz#2113233) + +* Thu Jul 21 2022 Fedora Release Engineering - 0.18.2-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 0.18.2-14 +- Rebuilt for Python 3.11 + +* Thu Jan 20 2022 Fedora Release Engineering - 0.18.2-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Dec 04 2021 Antonio Trande - 0.18.2-12 +- Remove Python2 build instructions +- Patched for Python 3.11 + +* Wed Jul 21 2021 Fedora Release Engineering - 0.18.2-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 0.18.2-10 +- Rebuilt for Python 3.10 + +* Tue Jan 26 2021 Fedora Release Engineering - 0.18.2-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Aug 10 2020 Antonio Trande - 0.18.2-8 +- Merge pull request #8 + +* Mon Jul 27 2020 Fedora Release Engineering - 0.18.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sun May 24 2020 Miro Hrončok - 0.18.2-6 +- Rebuilt for Python 3.9 + +* Tue Feb 11 2020 Antonio Trande - 0.18.2-5 +- Fix Python 3.9 builds + +* Tue Jan 28 2020 Fedora Release Engineering - 0.18.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jan 24 2020 Antonio Trande - 0.18.2-3 +- Fix Python2 executable on Fedora 30 + +* Fri Jan 24 2020 Antonio Trande - 0.18.2-2 +- Build Python2 version on Fedora 30 + +* Fri Jan 24 2020 Antonio Trande - 0.18.2-1 +- Release 0.18.2 + +* Sat Oct 12 2019 Antonio Trande - 0.18.0-2 +- Use python3_version_nodots macro + +* Sat Oct 12 2019 Antonio Trande - 0.18.0-1 +- Release 0.18.0 + +* Thu Oct 03 2019 Miro Hrončok - 0.17.1-0.5.20190506git23989c4 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Sun Aug 18 2019 Miro Hrončok - 0.17.1-0.4.20190506git23989c4 +- Rebuilt for Python 3.8 + +* Thu Jul 25 2019 Fedora Release Engineering - 0.17.1-0.3.20190506git23989c4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 23 2019 Antonio Trande - 0.17.1-0.2.20190506git23989c4 +- Bump to a pre-release 0.17.1, commit #23989c4 +- Unversioned commands point to Python3 on Fedora +- Obsolete Python2 version on Fedora + +* Tue Apr 09 2019 Antonio Trande - 0.17.1-0.1.20190313gitc423752 +- Bump to a pre-release 0.17.1 (fix rhbz#1698160, upstream bug #488) + +* Thu Jan 31 2019 Fedora Release Engineering - 0.17.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Oct 26 2018 Antonio Trande - 0.17.0-1 +- Release 0.17.0 + +* Wed Oct 24 2018 Antonio Trande - 0.17.0-0.1.20181019gitbee0f3b +- Bump to a pre-release 0.17.0 + +* Wed Oct 24 2018 Antonio Trande - 0.16.0-13.20181019gitbee0f3b +- Update to the commit #bee0f3b +- Perform all Python3 tests + +* Fri Sep 21 2018 Antonio Trande - 0.16.0-12.20180917gitaf02ef6 +- Update to the commit #af02ef6 + +* Sun Aug 26 2018 Antonio Trande - 0.16.0-11 +- Prepare SPEC file for deprecation of Python2 on fedora 30+ +- Prepare SPEC file for Python3-modules packaging on epel7 + +* Fri Jul 13 2018 Fedora Release Engineering - 0.16.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 0.16.0-9 +- Rebuilt for Python 3.7 + +* Wed Feb 07 2018 Fedora Release Engineering - 0.16.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sun Jan 14 2018 Antonio Trande - 0.16.0-7 +- Use versioned Python2 packages + +* Fri Dec 15 2017 Antonio Trande - 0.16.0-6 +- Python3 built on epel7 + +* Wed Jul 26 2017 Fedora Release Engineering - 0.16.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 0.16.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 19 2016 Miro Hrončok - 0.16.0-3 +- Rebuild for Python 3.6 + +* Tue Dec 13 2016 Antonio Trande - 0.16.0-2 +- BR Python2 dependencies unversioned on epel6 + +* Tue Dec 13 2016 Antonio Trande - 0.16.0-1 +- Update to 0.16.0 + +* Wed Aug 17 2016 Antonio Trande - 0.15.2-10 +- Rebuild for Python 3.5.2 + +* Tue Jul 19 2016 Fedora Release Engineering - 0.15.2-9 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Feb 03 2016 Fedora Release Engineering - 0.15.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jan 29 2016 Antonio Trande - 0.15.2-7 +- Renamed Python2 package + +* Thu Dec 10 2015 Antonio Trande - 0.15.2-6 +- SPEC file adapted to recent guidelines for Python + +* Fri Nov 13 2015 Antonio Trande 0.15.2-5 +- Rebuild + +* Fri Nov 13 2015 Antonio Trande 0.15.2-4 +- Python3 tests temporarily disabled with Python35 + +* Tue Nov 10 2015 Fedora Release Engineering +- 0.15.2-3 - Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Mon Sep 14 2015 Antonio Trande 0.15.2-2 +- Patch0 updated + +* Fri Sep 11 2015 Antonio Trande 0.15.2-1 +- Update to 0.15.2 + +* Wed Sep 02 2015 Antonio Trande 0.15.0-4 +- Added patch to exclude failed tests (patch0) + +* Wed Aug 26 2015 Antonio Trande 0.15.0-3 +- Added python-provides macro + +* Thu Jul 30 2015 Antonio Trande 0.15.0-2 +- Fixed Python3 packaging on Fedora +- Removed configparser backport (patch1) + +* Tue Jul 28 2015 Antonio Trande 0.15.0-1 +- Initial build diff --git a/SPECS-EXTENDED/mtools/mtools-3.9.6-config.patch b/SPECS/mtools/mtools-3.9.6-config.patch similarity index 100% rename from SPECS-EXTENDED/mtools/mtools-3.9.6-config.patch rename to SPECS/mtools/mtools-3.9.6-config.patch diff --git a/SPECS/mtools/mtools.signatures.json b/SPECS/mtools/mtools.signatures.json new file mode 100644 index 00000000000..079a1afbb77 --- /dev/null +++ b/SPECS/mtools/mtools.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "mtools-4.0.43.tar.gz": "8866666fa06906ee02c709f670ae6361c5ac2008251ed825c43d321c06775718" + } +} \ No newline at end of file diff --git a/SPECS-EXTENDED/mtools/mtools.spec b/SPECS/mtools/mtools.spec similarity index 80% rename from SPECS-EXTENDED/mtools/mtools.spec rename to SPECS/mtools/mtools.spec index bc09b0dfdb0..6eafa026b68 100644 --- a/SPECS-EXTENDED/mtools/mtools.spec +++ b/SPECS/mtools/mtools.spec @@ -2,15 +2,18 @@ Vendor: Microsoft Corporation Distribution: Mariner Summary: Programs for accessing MS-DOS disks without mounting the disks Name: mtools -Version: 4.0.26 +Version: 4.0.43 Release: 2%{?dist} License: GPLv3+ Source0: ftp://ftp.gnu.org/gnu/mtools/mtools-%{version}.tar.gz Url: https://www.gnu.org/software/mtools/ Patch0: mtools-3.9.6-config.patch -BuildRequires: gcc -BuildRequires: texinfo, autoconf +BuildRequires: make +BuildRequires: gcc +BuildRequires: texinfo +BuildRequires: autoconf +BuildRequires: automake %description Mtools is a collection of utilities for accessing MS-DOS files. @@ -27,12 +30,12 @@ Mtools should be installed if you need to use MS-DOS disks %build autoreconf -fiv %configure --disable-floppyd -make %{?_smp_mflags} +%make_build %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/etc $RPM_BUILD_ROOT/%{_infodir} -%makeinstall +%make_install install -m644 mtools.conf $RPM_BUILD_ROOT/etc gzip -9f $RPM_BUILD_ROOT/%{_infodir}/* @@ -54,8 +57,81 @@ ln -s mtools.5.gz %{buildroot}%{_mandir}/man5/mtools.conf.5.gz %{_infodir}/mtools.info* %changelog -* Fri Oct 15 2021 Pawel Winogrodzki - 4.0.26-2 -- Initial CBL-Mariner import from Fedora 32 (license: MIT). +* Fri Jun 02 2023 Vince Perri 4.0.43-2 +- License verified. +- Initial CBL-Mariner import from Fedora 39 (license: MIT). + +* Wed Mar 22 2023 Vojtech Trefny 4.0.43-1 +- Update to 4.0.43 + +* Thu Jan 19 2023 Fedora Release Engineering - 4.0.42-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Nov 11 2022 Vojtech Trefny - 4.0.42-2 +- Change license string to the SPDX format required by Fedora + +* Mon Oct 24 2022 Vojtech Trefny 4.0.42-1 +- Update to 4.0.42 + +* Tue Sep 20 2022 Vojtech Trefny 4.0.41-1 +- Update to 4.0.41 + +* Thu Jul 21 2022 Fedora Release Engineering - 4.0.40-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 06 2022 Vojtech Trefny 4.0.40-1 +- Update to 4.0.40 + +* Tue Apr 12 2022 Vojtech Trefny 4.0.39-1 +- Update to 4.0.39 + +* Mon Mar 07 2022 Vojtech Trefny 4.0.38-1 +- Update to 4.0.38 + +* Tue Feb 15 2022 Vojtech Trefny 4.0.37-3 +- Rebuilt for glibc flatpak dependency update + +* Thu Jan 20 2022 Fedora Release Engineering - 4.0.37-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 10 2022 Vojtech Trefny 4.0.37-1 +- Update to 4.0.37 + +* Mon Nov 22 2021 Vojtech Trefny 4.0.36-1 +- Update to 4.0.36 + +* Wed Nov 10 2021 Vojtech Trefny 4.0.35-2 +- Add dependency on glibc-gconv-extra (#2021637) + +* Sun Aug 08 2021 Vojtech Trefny 4.0.35-1 +- Update to 4.0.35 + +* Sun Jul 25 2021 Vojtech Trefny 4.0.34-1 +- Update to 4.0.34 + +* Thu Jul 22 2021 Fedora Release Engineering - 4.0.33-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Vojtech Trefny 4.0.33-1 +- Update to 4.0.33 + +* Wed Jul 14 2021 Vojtech Trefny 4.0.32-1 +- Update to 4.0.32 + +* Mon Jun 28 2021 Vojtech Trefny 4.0.31-1 +- Update to 4.0.31 + +* Fri Jun 18 2021 Vojtech Trefny 4.0.30-1 +- Update to 4.0.30 + +* Tue Jun 01 2021 Vojtech Trefny 4.0.29-1 +- Update to 4.0.29 + +* Mon Apr 19 2021 Vojtech Trefny 4.0.27-1 +- Update to 4.0.27 + +* Tue Jan 26 2021 Fedora Release Engineering - 4.0.26-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild * Mon Nov 30 2020 Vojtech Trefny 4.0.26-1 - Update to 4.0.26 @@ -63,6 +139,13 @@ ln -s mtools.5.gz %{buildroot}%{_mandir}/man5/mtools.conf.5.gz * Thu Oct 29 2020 Vojtech Trefny 4.0.25-1 - Update to 4.0.25 +* Tue Jul 28 2020 Fedora Release Engineering - 4.0.24-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 4.0.24-2 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Sun Mar 22 2020 Fedora Release Monitoring - 4.0.24-1 - Update to 4.0.24 (#1815863) diff --git a/SPECS/python-pefile/python-pefile.signatures.json b/SPECS/python-pefile/python-pefile.signatures.json new file mode 100644 index 00000000000..5f8dfcd7c46 --- /dev/null +++ b/SPECS/python-pefile/python-pefile.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "python-pefile-2023.2.7.tar.gz": "11cd7ed7082d5256e9741e8b98c654f061723fafb5b2719c01a0b4cc6f89e09d" + } +} diff --git a/SPECS/python-pefile/python-pefile.spec b/SPECS/python-pefile/python-pefile.spec new file mode 100644 index 00000000000..f4d99b94d4b --- /dev/null +++ b/SPECS/python-pefile/python-pefile.spec @@ -0,0 +1,216 @@ +Vendor: Microsoft Corporation +Distribution: Mariner +Name: python-pefile +Version: 2023.2.7 +Release: 3%{?dist} +Summary: Python module for working with Portable Executable files +License: MIT +URL: https://github.com/erocarrera/pefile + + +%global srcname pefile + +%global common_desc pefile is a multi-platform Python module to read and work with Portable\ +Executable (aka PE) files. Most of the information in the PE Header is \ +accessible, as well as all the sections, section's information and data.\ +pefile requires some basic understanding of the layout of a PE file. Armed \ +with it it's possible to explore nearly every single feature of the file.\ +Some of the tasks that pefile makes possible are:\ +* Modifying and writing back to the PE image\ +* Header Inspection\ +* Sections analysis\ +* Retrieving data\ +* Warnings for suspicious and malformed values\ +* Packer detection with PEiD’s signatures\ +* PEiD signature generation\ + + +#Source0: https://github.com/erocarrera/%%{srcname}/archive/v%%{version}/%%{srcname}-%%{version}.tar.gz +Source0: https://github.com/erocarrera/%{srcname}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz#/%{name}-%{version}.tar.gz +BuildArch: noarch + +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-setuptools + +# For the patch +# BuildRequires: git-core + +%description +%{common_desc} + +%package -n python%{python3_pkgversion}-%{srcname} +Summary: %{summary} +Provides: python3dist(%{srcname}) = %{version}-%{release} +Requires: python%{python3_pkgversion}-future + +%description -n python%{python3_pkgversion}-%{srcname} +%{common_desc} + + +%prep +%autosetup -n %{srcname}-%{version} +sed -i -e '/^#!\//, 1d' pefile.py + +%build +%py3_build + +%install +%py3_install + +# check +# regression tests in this package are based on binary blob of exe files - commercial and malware +# at this point (2019-09-20) not suitable to be in Fedora. +# More info on: +# https://github.com/erocarrera/pefile/issues/171 +# https://github.com/erocarrera/pefile/issues/82#issuecomment-192018385 +# %%{__python3} setup.py test + +%files -n python%{python3_pkgversion}-%{srcname} +%license LICENSE +%doc README* +%{python3_sitelib}/* + +%changelog +* Tue May 30 2023 Vince Perri - 2023.2.7-3 +- License verified. +- Initial CBL-Mariner import from Fedora 39 (license: MIT). + +* Sat Mar 11 2023 Fabio Valentini - 2023.2.7-2 +- Rebuild for https://pagure.io/releng/issue/11327 + +* Wed Feb 08 2023 Michal Ambroz - 2023.2.7-1 +- bump to version 2023.2.7 + +* Fri Jan 20 2023 Fedora Release Engineering - 2022.5.30-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Jul 22 2022 Fedora Release Engineering - 2022.5.30-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 23 2022 Michal Ambroz - 2022.5.30-1 +- bump to version 2022.5.30 + +* Mon Jun 13 2022 Python Maint - 2021.9.3-2 +- Rebuilt for Python 3.11 + +* Thu Feb 17 2022 Michal Ambroz - 2021.9.3-1 +- bump to version 2021.9.3 + +* Fri Jan 21 2022 Fedora Release Engineering - 2021.5.13-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 2021.5.13-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 2021.5.13-2 +- Rebuilt for Python 3.10 + +* Thu May 13 2021 Michal Ambroz - 2021.5.13-1 +- bump to version 2021.5.13 + +* Wed Jan 27 2021 Fedora Release Engineering - 2019.4.18-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 2019.4.18-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue May 26 2020 Miro Hrončok - 2019.4.18-3 +- Rebuilt for Python 3.9 + +* Thu Jan 30 2020 Fedora Release Engineering - 2019.4.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Sep 20 2019 Michal Ambroz - 2019.4.18-1 +- bump to version 2019.4.18 + +* Mon Aug 19 2019 Miro Hrončok - 2017.11.5-8 +- Rebuilt for Python 3.8 + +* Fri Jul 26 2019 Fedora Release Engineering - 2017.11.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 2017.11.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Oct 11 2018 Zbigniew Jędrzejewski-Szmek - 2017.11.5-5 +- Python2 binary package has been removed + See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal + +* Sat Jul 14 2018 Fedora Release Engineering - 2017.11.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 2017.11.5-3 +- Rebuilt for Python 3.7 + +* Fri Feb 09 2018 Fedora Release Engineering - 2017.11.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Nov 08 2017 Athmane Madjoudj - 2017.11.5-1 +- Update to 2017.11.5 (rhbz #1509751) + +* Sat Aug 05 2017 Athmane Madjoudj - 2017.8.1-1 +- Update to 2017.8.1 + +* Thu Jul 27 2017 Fedora Release Engineering - 2017.5.26-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 25 2017 Athmane Madjoudj - 2017.5.26-2 +- Fix requirement (rhbz #1474447) + +* Sat May 27 2017 Athmane Madjoudj - 2017.5.26-1 +- Update to 2017.5.26 +- Remove upstreamed patch + +* Sat Feb 11 2017 Fedora Release Engineering - 2016.3.28-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 19 2016 Miro Hrončok - 2016.3.28-2 +- Rebuild for Python 3.6 + +* Tue Nov 01 2016 Athmane Madjoudj - 2016.3.28-1 +- Update to 2016.3.28 +- Revamp the specfile +- Add patch to fix the build + +* Tue Jul 19 2016 Fedora Release Engineering - 1.2.10_139-5 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Thu Feb 04 2016 Fedora Release Engineering - 1.2.10_139-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jun 18 2015 Fedora Release Engineering - 1.2.10_139-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 1.2.10_139-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Jan 07 2014 Christopher Meng - 1.2.10_139-1 +- Update to 1.2.10_139 + +* Thu Aug 08 2013 Christopher Meng - 1.2.10_123-1 +- Update to 1.2.10_123 + +* Sun Aug 04 2013 Fedora Release Engineering - 1.2.10_63-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu Feb 14 2013 Fedora Release Engineering - 1.2.10_63-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jul 21 2012 Fedora Release Engineering - 1.2.10_63-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sat Jan 14 2012 Fedora Release Engineering - 1.2.10_63-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Feb 08 2011 Fedora Release Engineering - 1.2.10_63-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jul 22 2010 David Malcolm - 1.2.10_63-3 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Sun Jul 26 2009 Fedora Release Engineering - 1.2.10_63-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri May 8 2009 David Malcolm - 1.2.10_63-1 +- initial packaging + diff --git a/SPECS/python-virt-firmware/python-virt-firmware.signatures.json b/SPECS/python-virt-firmware/python-virt-firmware.signatures.json new file mode 100644 index 00000000000..3f560dc6d3e --- /dev/null +++ b/SPECS/python-virt-firmware/python-virt-firmware.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "python-virt-firmware-23.5.tar.gz": "4939452892d9cfda40c0adccd3b065f7b3b6f7aedaf75d5f021cd9db2a14c5d9" + } +} diff --git a/SPECS/python-virt-firmware/python-virt-firmware.spec b/SPECS/python-virt-firmware/python-virt-firmware.spec new file mode 100644 index 00000000000..ca155a51d82 --- /dev/null +++ b/SPECS/python-virt-firmware/python-virt-firmware.spec @@ -0,0 +1,174 @@ +%bcond_with tests +Vendor: Microsoft Corporation +Distribution: Mariner +## START: Set by rpmautospec +## (rpmautospec version 0.3.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 1; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec + +%global pypi_version 23.5 + +Name: python-virt-firmware +Version: %{pypi_version} +Release: 2%{?dist} +Summary: Tools for virtual machine firmware volumes + +License: GPLv2 +URL: https://pypi.org/project/virt-firmware/ +Source0: https://files.pythonhosted.org/packages/c2/f8/204dc513d2d3f0f3d3aead03600f7db1b763cf02998ad7b35e7ac5ef6849/virt-firmware-%{pypi_version}.tar.gz#/python-virt-firmware-%{pypi_version}.tar.gz +BuildArch: noarch + +BuildRequires: python3-devel +BuildRequires: python3dist(cryptography) +BuildRequires: python3dist(setuptools) +BuildRequires: make help2man + +%description +Tools for ovmf / armvirt firmware volumes This is a small collection of tools +for edk2 firmware images. They support decoding and printing the content of +firmware volumes. Variable stores (OVMF_VARS.fd) can be modified, for example +to enroll secure boot certificates. + +%package -n python3-virt-firmware +Summary: %{summary} +%{?python_provide:%python_provide python3-virt-firmware} +Provides: virt-firmware +Requires: python3dist(cryptography) +Requires: python3dist(setuptools) +%description -n python3-virt-firmware +Tools for ovmf / armvirt firmware volumes This is a small collection of tools +for edk2 firmware images. They support decoding and printing the content of +firmware volumes. Variable stores (OVMF_VARS.fd) can be modified, for example +to enroll secure boot certificates. + +%package -n python3-virt-firmware-peutils +Summary: %{summary} - peutils +Requires: python3dist(pefile) +Conflicts: python3-virt-firmware < 1.6 +%description -n python3-virt-firmware-peutils +Some utilities to inspect efi (pe) binaries. + +%if %{with tests} +%package -n python3-virt-firmware-tests +Summary: %{summary} - test cases +Requires: python3-virt-firmware +Requires: python3dist(pytest) +Requires: edk2-ovmf +%description -n python3-virt-firmware-tests +test cases +%endif + +%prep +%autosetup -n virt-firmware-%{pypi_version} + +%build +%py3_build + +%install +%py3_install +# manpages +install -m 755 -d %{buildroot}%{_mandir}/man1 +install -m 644 man/*.1 %{buildroot}%{_mandir}/man1 + +# tests +%if %{with tests} +mkdir -p %{buildroot}%{_datadir}/%{name} +cp -ar tests %{buildroot}%{_datadir}/%{name} +%endif + +%files -n python3-virt-firmware +%license LICENSE +%doc README.md experimental +%{_bindir}/host-efi-vars +%{_bindir}/virt-fw-dump +%{_bindir}/virt-fw-vars +%{_bindir}/virt-fw-sigdb +%{_bindir}/migrate-vars +%{_mandir}/man1/virt-*.1* +%{python3_sitelib}/virt/firmware +%{python3_sitelib}/virt_firmware-%{pypi_version}-py%{python3_version}.egg-info + +%files -n python3-virt-firmware-peutils +%{python3_sitelib}/virt/peutils +%{_bindir}/pe-dumpinfo +%{_bindir}/pe-listsigs +%{_bindir}/pe-addsigs + +%if %{with tests} +%files -n python3-virt-firmware-tests +%{_datadir}/%{name}/tests +%endif + +%changelog +* Fri Jun 02 2023 Vince Perri - 23.5-2 +- License verified. +- Initial CBL-Mariner import from Fedora 39 (license: MIT). + +* Thu May 04 2023 Gerd Hoffmann - 23.5-1 +- update to version 23.5 + +* Fri Apr 14 2023 Gerd Hoffmann - 23.4-1 +- update to version 23.4 + +* Fri Jan 20 2023 Fedora Release Engineering - 1.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Jan 16 2023 Gerd Hoffmann - 1.8-1 +- update to version 1.8 + +* Fri Dec 02 2022 Gerd Hoffmann - 1.7-1 +- update to version 1.7 + +* Thu Nov 10 2022 Gerd Hoffmann - 1.6-2 +- add conflict declaration + +* Thu Nov 10 2022 Gerd Hoffmann - 1.6-1 +- update to version 1.6 +- split peutils to subpackage + +* Wed Oct 05 2022 Gerd Hoffmann - 1.5-1 +- update to version 1.5 + +* Wed Oct 05 2022 Gerd Hoffmann - 1.4-5 +- turn on gating + +* Wed Oct 05 2022 Gerd Hoffmann - 1.4-4 +- more test dependency tweaks + +* Wed Oct 05 2022 Gerd Hoffmann - 1.4-3 +- tweak test dependencies + +* Wed Oct 05 2022 Gerd Hoffmann - 1.4-2 +- add tests + +* Tue Sep 27 2022 Gerd Hoffmann - 1.4-1 +- update to version 1.4 +- add man-pages +- add tests sub-package + +* Fri Jul 22 2022 Fedora Release Engineering - 1.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jul 18 2022 Gerd Hoffmann - 1.2-1 +- update to version 1.2 + +* Fri Jul 01 2022 Gerd Hoffmann - 1.1-1 +- update to version 1.1 + +* Wed Jun 22 2022 Gerd Hoffmann - 1.0-1 +- update to version 1.0 + +* Mon Jun 13 2022 Python Maint - 0.98-2 +- Rebuilt for Python 3.11 + +* Tue May 24 2022 Gerd Hoffmann - 0.98-1 +- update to version 0.98 + +* Mon Apr 11 2022 Gerd Hoffmann - 0.95-1 +- Initial package. + diff --git a/cgmanifest.json b/cgmanifest.json index 06657a09120..0872aa9375b 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -3118,8 +3118,8 @@ "type": "other", "other": { "name": "edk2", - "version": "20200801stable", - "downloadUrl": "https://github.com/tianocore/edk2/archive/edk2-stable202008.tar.gz" + "version": "20230301gitf80f052277c8", + "downloadUrl": "https://src.fedoraproject.org/repo/pkgs/edk2/edk2-f80f052277c8.tar.xz/sha512/af802257f010b63d973dc909b57ee845b7734e8d494b081050ba1f197349663b081e1f2edc5244726e2479ff6d16d79d0a6fceb00f4840b59982f10b79facf66/edk2-f80f052277c8.tar.xz" } } }, @@ -3990,8 +3990,8 @@ "type": "other", "other": { "name": "future", - "version": "0.18.2", - "downloadUrl": "https://files.pythonhosted.org/packages/source/f/future/future-0.18.2.tar.gz" + "version": "0.18.3", + "downloadUrl": "https://github.com/PythonCharmers/python-future/archive/refs/tags/v0.18.3/python-future-0.18.3.tar.gz" } } }, @@ -13513,8 +13513,8 @@ "type": "other", "other": { "name": "mtools", - "version": "4.0.26", - "downloadUrl": "ftp://ftp.gnu.org/gnu/mtools/mtools-4.0.26.tar.gz" + "version": "4.0.43", + "downloadUrl": "ftp://ftp.gnu.org/gnu/mtools/mtools-4.0.43.tar.gz" } } }, @@ -23289,6 +23289,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "python-pefile", + "version": "2023.2.7", + "downloadUrl": "https://github.com/erocarrera/pefile/releases/download/v2023.2.7/pefile-2023.2.7.tar.gz" + } + } + }, { "component": { "type": "other", @@ -24569,6 +24579,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "python-virt-firmware", + "version": "23.5", + "downloadUrl": "https://files.pythonhosted.org/packages/c2/f8/204dc513d2d3f0f3d3aead03600f7db1b763cf02998ad7b35e7ac5ef6849/virt-firmware-23.5.tar.gz" + } + } + }, { "component": { "type": "other", From cd69f9f8cd8dd9f44d1af93b40cd248f2f3f5d33 Mon Sep 17 00:00:00 2001 From: Andrew Phelps Date: Mon, 5 Jun 2023 21:58:30 -0700 Subject: [PATCH 04/14] update golang version (#5630) --- toolkit/docs/building/prerequisites-mariner.md | 2 +- toolkit/docs/building/prerequisites-ubuntu.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/toolkit/docs/building/prerequisites-mariner.md b/toolkit/docs/building/prerequisites-mariner.md index 35984841780..d067f2da539 100644 --- a/toolkit/docs/building/prerequisites-mariner.md +++ b/toolkit/docs/building/prerequisites-mariner.md @@ -17,7 +17,7 @@ sudo tdnf -y install \ glibc-devel \ genisoimage \ git \ - "golang < 1.18" \ + golang \ kernel-headers \ make \ moby-cli \ diff --git a/toolkit/docs/building/prerequisites-ubuntu.md b/toolkit/docs/building/prerequisites-ubuntu.md index 37f3b77b2ba..a6dc02ef0b6 100644 --- a/toolkit/docs/building/prerequisites-ubuntu.md +++ b/toolkit/docs/building/prerequisites-ubuntu.md @@ -17,7 +17,7 @@ sudo apt -y install \ gawk \ genisoimage \ git \ - golang-1.17-go \ + golang-1.19-go \ make \ parted \ pigz \ @@ -27,8 +27,8 @@ sudo apt -y install \ wget \ xfsprogs -# Fix go 1.17 link -sudo ln -vsf /usr/lib/go-1.17/bin/go /usr/bin/go +# Fix go 1.19 link +sudo ln -vsf /usr/lib/go-1.19/bin/go /usr/bin/go # Install and configure Docker. curl -fsSL https://get.docker.com -o get-docker.sh From 245611d31bc0702adb7d1bdafdb1141ba7f814d7 Mon Sep 17 00:00:00 2001 From: Adub17030MS <110563293+Adub17030MS@users.noreply.github.com> Date: Tue, 6 Jun 2023 14:06:54 -0700 Subject: [PATCH 05/14] Adding networkd-dispatcher SPEC (#5620) * draft SPEC for networkd-dispatcher * first completed SPEC * correcting source link * correcting hash * correcting macros to use _mandir and * * updating dependency names to be correct * minor chnages * minor chnages * minor chnages * correcting to %{_libdir} * correcting to %{_libdir} * license map updates --- SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md | 2 +- SPECS/LICENSES-AND-NOTICES/data/licenses.json | 1 + .../networkd-dispatcher.signatures.json | 5 ++ .../networkd-dispatcher.spec | 61 +++++++++++++++++++ cgmanifest.json | 10 +++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 SPECS/networkd-dispatcher/networkd-dispatcher.signatures.json create mode 100644 SPECS/networkd-dispatcher/networkd-dispatcher.spec diff --git a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md index 8eddd22aa55..906dfae4169 100644 --- a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md +++ b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md @@ -8,7 +8,7 @@ The CBL-Mariner SPEC files originated from a variety of sources with varying lic | Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
amtk
amtterm
annobin
ansible-freeipa
archivemount
argparse-manpage
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
bluez
bmake
bogofilter
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
cairomm
calamares
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cgdcbxd
chan
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cldr-emoji-annotation
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
containernetworking-plugins
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
dpkg
driverctl
dropwatch
drpm
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
evemu
execstack
exempi
exiv2
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fapolicyd
fdk-aac-free
fdupes
fence-virt
fetchmail
fftw
filebench
fio
fipscheck
firewalld
fish
flac
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontpackages
foomatic-db
freeglut
freeipmi
freeradius
freetds
fribidi
fros
frr
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fxload
gavl
gconf-editor
GConf2
gcovr
gcr
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
ghc-srpm-macros
giflib
gl-manpages
glew
glm
glog
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
indent
infinipath-psm
iniparser
intel-cmt-cat
intel-ipsec-mb
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
kata-containers
kde-filesystem
kde-settings
kexec-tools
keybinder3
keycloak-httpd-client-install
kf5
kf5-kconfig
kf5-kcoreaddons
kf5-ki18n
kf5-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libcli
libcmis
libcmpiutil
libcomps
libcroco
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbi-drivers
libdbusmenu
libdc1394
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libewf
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
liblangtag
libldb
libldm
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtranslit
libucil
libunicap
libuninameslist
liburing
libusbmuxd
libuser
libutempter
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpx
libwacom
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
linuxptp
lksctp-tools
lldpd
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunit
lua-rpm-macros
lua-term
luajit
luksmeta
lutok
lv2
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
multilib-rpm-config
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
neon
netavark
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvmetcli
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-migrate-parsetree
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-ppx-derivers
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-stdio
ocaml-topkg
ocaml-tyxml
ocaml-uuidm
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
omping
opa
opal
open-vm-tools
openblas
opencc
opencl-filesystem
opencl-headers
opencryptoki
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
opus
opusfile
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus
prometheus-node-exporter
ps_mem
psacct
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-argcomplete
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-cached_property
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-package-handling
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fields
python-filelock
python-fixtures
python-flake8
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-markdown
python-mccabe
python-memcached
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paramiko
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-process-tests
python-productmd
python-ptyprocess
python-pycares
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-redis
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rpm-generators
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-should_dsl
python-simpleline
python-slip
python-sniffio
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-typing-extensions
python-uamqp
python-unittest2
python-uritemplate
python-urwid
python-varlink
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xmltodict
python-yubico
python-zipp
python-zmq
python3-mallard-ducktype
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt5-qtbase
qt5-qtconnectivity
qt5-qtdeclarative
qt5-qtsensors
qt5-qtsvg
qt5-qttools
qt5-rpm-macros
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
redland
resource-agents
rest
rhash
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-thread_order
rusers
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
SDL
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
sendmail
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stunnel
subscription-manager
suitesparse
SuperLU
supermin
switcheroo-control
symlinks
sympy
sysfsutils
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
tpm-quote-tools
tpm-tools
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
unicode-emoji
unicode-ucd
unique3
units
upower
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vitess
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xrestop
xterm
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zopfli
zziplib | | Fedora (Copyright Remi Collet) | [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode) | libmemcached-awesome
librabbitmq | | Magnus Edenhill Open Source | [Magnus Edenhill Open Source BSD License](https://github.com/jemalloc/jemalloc/blob/dev/COPYING) | librdkafka | -| Microsoft | [Microsoft MIT License](/LICENSES-AND-NOTICES/LICENSE.md) | application-gateway-kubernetes-ingress
asc
azcopy
azure-iot-sdk-c
azure-storage-cpp
bazel
blobfuse
blobfuse2
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
coredns-1.8.0
coredns-1.8.4
coredns-1.8.6
coredns-1.9.3
csi-driver-lvm
dcos-cli
debugedit
dejavu-fonts
distroless-packages
doxygen
dtc
elixir
espeak-ng
espeakup
flannel
fluent-bit
freefont
gflags
gh
go-md2man
grpc
grub2-efi-binary-signed
GSL
gtk-update-icon-cache
helm
hvloader
installkernel
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
keda
keras
kernel-azure-signed
kernel-hci-signed
kernel-signed
KeysInUse-OpenSSL
kpatch
kube-vip-cloud-provider
kubernetes-1.18.14
kubernetes-1.18.17
kubernetes-1.19.7
kubernetes-1.19.9
kubernetes-1.20.2
kubernetes-1.20.5
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libuv
libxml++
livepatch-5.15.102.1-1.cm2
livepatch-5.15.102.1-3.cm2
livepatch-5.15.107.1-1.cm2
livepatch-5.15.110.1-1.cm2
livepatch-5.15.111.1-1.cm2
livepatch-5.15.112.1-1.cm2
livepatch-5.15.112.1-2.cm2
livepatch-5.15.94.1-1.cm2
livepatch-5.15.94.1-1.cm2-signed
livepatch-5.15.95.1-1.cm2
livepatch-5.15.98.1-1.cm2
livepatching
lld
local-path-provisioner
lsb-release
ltp
lttng-consume
mariner-release
mariner-repos
mariner-rpm-macros
maven3
mm-common
moby-buildx
moby-cli
moby-compose
moby-containerd
moby-containerd-cc
moby-engine
moby-runc
msgpack
ncompress
nlohmann-json
nmap
nmi
node-problem-detector
ntopng
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-execnet
python-google-pasta
python-libclang
python-logutils
python-nocasedict
python-opt-einsum
python-pecan
python-remoto
python-repoze-lru
python-routes
python-rsa
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-tensorflow-estimator
python-yamlloader
R
rabbitmq-server
reaper
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-async
rubygem-async-http
rubygem-async-io
rubygem-async-pool
rubygem-aws-eventstream
rubygem-aws-partitions
rubygem-aws-sdk-core
rubygem-aws-sdk-kms
rubygem-aws-sdk-s3
rubygem-aws-sdk-sqs
rubygem-aws-sigv4
rubygem-bigdecimal
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-console
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-patron
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-fluent-config-regexp-type
rubygem-fluent-logger
rubygem-fluent-plugin-elasticsearch
rubygem-fluent-plugin-kafka
rubygem-fluent-plugin-prometheus
rubygem-fluent-plugin-prometheus_pushgateway
rubygem-fluent-plugin-record-modifier
rubygem-fluent-plugin-rewrite-tag-filter
rubygem-fluent-plugin-s3
rubygem-fluent-plugin-systemd
rubygem-fluent-plugin-td
rubygem-fluent-plugin-webhdfs
rubygem-fluent-plugin-windows-exporter
rubygem-fluentd
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser.rb
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-td
rubygem-td-client
rubygem-td-logger
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
sdbus-cpp
sgx-backwards-compatability
shim
shim-unsigned
shim-unsigned-aarch64
shim-unsigned-x64
skopeo
span-lite
sriov-network-device-plugin
swupdate
SymCrypt
SymCrypt-OpenSSL
tensorflow
terraform
tinyxml2
toml11
tracelogging
umoci
usrsctp
vala
verity-read-only-root
vnstat
zstd | +| Microsoft | [Microsoft MIT License](/LICENSES-AND-NOTICES/LICENSE.md) | application-gateway-kubernetes-ingress
asc
azcopy
azure-iot-sdk-c
azure-storage-cpp
bazel
blobfuse
blobfuse2
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
coredns-1.8.0
coredns-1.8.4
coredns-1.8.6
coredns-1.9.3
csi-driver-lvm
dcos-cli
debugedit
dejavu-fonts
distroless-packages
doxygen
dtc
elixir
espeak-ng
espeakup
flannel
fluent-bit
freefont
gflags
gh
go-md2man
grpc
grub2-efi-binary-signed
GSL
gtk-update-icon-cache
helm
hvloader
installkernel
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
keda
keras
kernel-azure-signed
kernel-hci-signed
kernel-signed
KeysInUse-OpenSSL
kpatch
kube-vip-cloud-provider
kubernetes-1.18.14
kubernetes-1.18.17
kubernetes-1.19.7
kubernetes-1.19.9
kubernetes-1.20.2
kubernetes-1.20.5
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libuv
libxml++
livepatch-5.15.102.1-1.cm2
livepatch-5.15.102.1-3.cm2
livepatch-5.15.107.1-1.cm2
livepatch-5.15.110.1-1.cm2
livepatch-5.15.111.1-1.cm2
livepatch-5.15.112.1-1.cm2
livepatch-5.15.112.1-2.cm2
livepatch-5.15.94.1-1.cm2
livepatch-5.15.94.1-1.cm2-signed
livepatch-5.15.95.1-1.cm2
livepatch-5.15.98.1-1.cm2
livepatching
lld
local-path-provisioner
lsb-release
ltp
lttng-consume
mariner-release
mariner-repos
mariner-rpm-macros
maven3
mm-common
moby-buildx
moby-cli
moby-compose
moby-containerd
moby-containerd-cc
moby-engine
moby-runc
msgpack
ncompress
networkd-dispatcher
nlohmann-json
nmap
nmi
node-problem-detector
ntopng
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-execnet
python-google-pasta
python-libclang
python-logutils
python-nocasedict
python-opt-einsum
python-pecan
python-remoto
python-repoze-lru
python-routes
python-rsa
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-tensorflow-estimator
python-yamlloader
R
rabbitmq-server
reaper
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-async
rubygem-async-http
rubygem-async-io
rubygem-async-pool
rubygem-aws-eventstream
rubygem-aws-partitions
rubygem-aws-sdk-core
rubygem-aws-sdk-kms
rubygem-aws-sdk-s3
rubygem-aws-sdk-sqs
rubygem-aws-sigv4
rubygem-bigdecimal
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-console
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-patron
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-fluent-config-regexp-type
rubygem-fluent-logger
rubygem-fluent-plugin-elasticsearch
rubygem-fluent-plugin-kafka
rubygem-fluent-plugin-prometheus
rubygem-fluent-plugin-prometheus_pushgateway
rubygem-fluent-plugin-record-modifier
rubygem-fluent-plugin-rewrite-tag-filter
rubygem-fluent-plugin-s3
rubygem-fluent-plugin-systemd
rubygem-fluent-plugin-td
rubygem-fluent-plugin-webhdfs
rubygem-fluent-plugin-windows-exporter
rubygem-fluentd
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser.rb
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-td
rubygem-td-client
rubygem-td-logger
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
sdbus-cpp
sgx-backwards-compatability
shim
shim-unsigned
shim-unsigned-aarch64
shim-unsigned-x64
skopeo
span-lite
sriov-network-device-plugin
swupdate
SymCrypt
SymCrypt-OpenSSL
tensorflow
terraform
tinyxml2
toml11
tracelogging
umoci
usrsctp
vala
verity-read-only-root
vnstat
zstd | | Netplan source | [GPLv3](https://github.com/canonical/netplan/blob/main/COPYING) | netplan | | Numad source | [LGPLv2 License](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) | numad | | NVIDIA | [ASL 2.0 License and spec specific licenses](http://www.apache.org/licenses/LICENSE-2.0) | knem
libnvidia-container
mlnx-ofa_kernel
mlnx-tools
mlx-bootctl
nvidia-container-runtime
nvidia-container-toolkit
nvidia-docker2
ofed-scripts
perftest | diff --git a/SPECS/LICENSES-AND-NOTICES/data/licenses.json b/SPECS/LICENSES-AND-NOTICES/data/licenses.json index 9adfc445114..2e138fa0576 100644 --- a/SPECS/LICENSES-AND-NOTICES/data/licenses.json +++ b/SPECS/LICENSES-AND-NOTICES/data/licenses.json @@ -2211,6 +2211,7 @@ "moby-runc", "msgpack", "ncompress", + "networkd-dispatcher", "nlohmann-json", "nmap", "nmi", diff --git a/SPECS/networkd-dispatcher/networkd-dispatcher.signatures.json b/SPECS/networkd-dispatcher/networkd-dispatcher.signatures.json new file mode 100644 index 00000000000..b1b44f41569 --- /dev/null +++ b/SPECS/networkd-dispatcher/networkd-dispatcher.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "networkd-dispatcher-2.2.4.tar.gz": "2fb49aa04453658bc53dd5209631aff27f781ef64f5263f28e0914dd72f53a55" + } +} \ No newline at end of file diff --git a/SPECS/networkd-dispatcher/networkd-dispatcher.spec b/SPECS/networkd-dispatcher/networkd-dispatcher.spec new file mode 100644 index 00000000000..95603ea1904 --- /dev/null +++ b/SPECS/networkd-dispatcher/networkd-dispatcher.spec @@ -0,0 +1,61 @@ +Summary: A dispatcher daemon for systemd-networkd events +Name: networkd-dispatcher +Version: 2.2.4 +Release: 1%{?dist} +License: GPLv3+ +Vendor: Microsoft Corporation +Distribution: Mariner +URL: https://gitlab.com/craftyguy/networkd-dispatcher +Source0: https://gitlab.com/craftyguy/%{name}/-/archive/%{version}/%{name}-%{version}.tar.gz#/%{name}-%{version}.tar.gz +%global debug_package %{nil} +BuildRequires: asciidoc +Requires: dbus-glib +Requires: python3 +Requires: python3-dbus +Requires: python3-gobject + +%description +networkd-dispatcher is a dispatcher daemon for systemd-networkd connection status changes. This daemon +is similar to NetworkManager-dispatcher, but is much more limited in the types of events it supports due +to the limited nature of systemd-networkd. The daemon listens for signals from systemd-networkd over dbus, +so it should be very light on resources (e.g. no polling). It is meant to be run as a system-wide daemon (as root). +This allows it to be used for tasks such as starting a VPN after a connection is established. + +%prep +%autosetup -p1 + +%build +make + +%install +mkdir -p %{buildroot}%{_bindir} +mkdir -p %{buildroot}%{_sysconfdir}/conf.d +install -m755 %{name} %{buildroot}%{_bindir}/%{name} +install -m644 -D %{name}.service %{buildroot}%{_libdir}/systemd/system/%{name}.service +install -m644 -D %{name}.conf %{buildroot}%{_sysconfdir}/conf.d/%{name}.conf +mkdir -p %{buildroot}%{_sysconfdir}/%{name}/{off.d,routable.d,dormant.d,no-carrier.d,carrier.d,degraded.d,configured.d,configuring.d} +install -Dm644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE +install -Dm644 README.md %{buildroot}%{_docdir}/%{name}/README.md +install -Dm644 %{name}.8 %{buildroot}%{_mandir}/man8/%{name}.8 + +%files +%license LICENSE +%doc README.md +%dir %{_sysconfdir}/conf.d +%{_bindir}/%{name} +%{_libdir}/systemd/system/%{name}.service +%{_sysconfdir}/conf.d/%{name}.conf +%{_mandir}/man8/networkd-dispatcher.8* +%dir %{_sysconfdir}/%{name}/off.d +%dir %{_sysconfdir}/%{name}/routable.d +%dir %{_sysconfdir}/%{name}/dormant.d +%dir %{_sysconfdir}/%{name}/no-carrier.d +%dir %{_sysconfdir}/%{name}/carrier.d +%dir %{_sysconfdir}/%{name}/degraded.d +%dir %{_sysconfdir}/%{name}/configured.d +%dir %{_sysconfdir}/%{name}/configuring.d + +%changelog +* Fri Jun 2 2023 Aditya Dubey - 2.2.4-1 +- Original version for CBL-Mariner +- License Verified diff --git a/cgmanifest.json b/cgmanifest.json index 0872aa9375b..8ff6e9e0c1d 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -13998,6 +13998,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "networkd-dispatcher", + "version": "2.2.4", + "downloadUrl": "https://gitlab.com/craftyguy/networkd-dispatcher/-/archive/2.2.4/networkd-dispatcher-2.2.4.tar.gz" + } + } + }, { "component": { "type": "other", From cd7837665f7a3dcc4da46d1cc1862509ad5fe392 Mon Sep 17 00:00:00 2001 From: Bala Date: Wed, 7 Jun 2023 12:25:10 +0530 Subject: [PATCH 06/14] Add fonts-rpm-macros to Mariner (#5510) * Add fonts-rpm-macros to Mariner * Update manifest and licenses * Update license files * Update correct source in cgmanifest.json * license file changes * Update proper import line in changelog --- ...ts-rpm-macros-omit-foundry-in-family.patch | 14 + .../fonts-rpm-macros.signatures.json | 5 + .../fonts-rpm-macros/fonts-rpm-macros.spec | 240 +++++++++ .../fonts-rpm-macros/update_for_mariner.patch | 459 ++++++++++++++++++ SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md | 2 +- SPECS/LICENSES-AND-NOTICES/data/licenses.json | 1 + cgmanifest.json | 10 + 7 files changed, 730 insertions(+), 1 deletion(-) create mode 100644 SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros-omit-foundry-in-family.patch create mode 100644 SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.signatures.json create mode 100644 SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.spec create mode 100644 SPECS-EXTENDED/fonts-rpm-macros/update_for_mariner.patch diff --git a/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros-omit-foundry-in-family.patch b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros-omit-foundry-in-family.patch new file mode 100644 index 00000000000..943dd06c886 --- /dev/null +++ b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros-omit-foundry-in-family.patch @@ -0,0 +1,14 @@ +diff -pruN fonts-rpm-macros-2.0.5.orig/rpm/lua/srpm/fonts.lua fonts-rpm-macros-2.0.5/rpm/lua/srpm/fonts.lua +--- fonts-rpm-macros-2.0.5.orig/rpm/lua/srpm/fonts.lua 2020-04-03 07:55:50.000000000 +0900 ++++ fonts-rpm-macros-2.0.5/rpm/lua/srpm/fonts.lua 2022-07-29 18:57:38.183789875 +0900 +@@ -118,7 +118,9 @@ local function env(suffix, verbose, glob + fedora.explicitunset("current" .. g, verbose) + end + end +- local basename = rpm.expand("%{?foundry" .. suffix .. ":%{foundry" .. suffix .. "} }%{fontfamily" .. suffix .. "}") ++ local foundry = rpm.expand("%{?foundry" .. suffix .. ":%{foundry" .. suffix .. "}}") ++ local family = string.gsub(rpm.expand("%{fontfamily" .. suffix .. "}"), "^" .. foundry, "") ++ local basename = foundry .. " " .. family + fedora.safeset("fontpkgname" .. suffix, rpmname(basename), verbose) + fedora.safeset("fonthumanname" .. suffix, basename, verbose) + fedora.safeset("fontdir" .. suffix, "%{_fontbasedir}/%{fontpkgname" .. suffix .. "}", verbose) diff --git a/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.signatures.json b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.signatures.json new file mode 100644 index 00000000000..c884162410b --- /dev/null +++ b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "fonts-rpm-macros-2.0.5.tar.gz": "ad79d97484ec953ab1f6d741024ef0d73ff594c21dc23c9f772cd37cc45ce7ea" + } +} \ No newline at end of file diff --git a/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.spec b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.spec new file mode 100644 index 00000000000..133f3f0cbe8 --- /dev/null +++ b/SPECS-EXTENDED/fonts-rpm-macros/fonts-rpm-macros.spec @@ -0,0 +1,240 @@ +Vendor: Microsoft Corporation +Distribution: Mariner +# SPDX-License-Identifier: MIT +%global forgeurl https://pagure.io/fonts-rpm-macros +Epoch: 1 +Version: 2.0.5 +%forgemeta + +#https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/51 +%global _spectemplatedir %{_datadir}/rpmdevtools/mariner +%global _docdir_fmt %{name} +%global ftcgtemplatedir %{_datadir}/fontconfig/templates + +# Master definition that will be written to macro files +%global _fontbasedir %{_datadir}/fonts +%global _fontconfig_masterdir %{_sysconfdir}/fonts +%global _fontconfig_confdir %{_sysconfdir}/fonts/conf.d +%global _fontconfig_templatedir %{_datadir}/fontconfig/conf.avail + +%global _rpmluadir /usr/lib/rpm/lua/ +%global rpmmacrodir %{_rpmmacrodir} + +BuildArch: noarch + +Name: fonts-rpm-macros +Release: 11%{?dist} +Summary: Build-stage rpm automation for fonts packages + +License: GPL-3.0-or-later +URL: https://docs.fedoraproject.org/en-US/packaging-guidelines/FontsPolicy/ +Source: %{forgesource} +Patch0: %{name}-omit-foundry-in-family.patch +Patch1: update_for_mariner.patch + +Requires: fonts-srpm-macros = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: fonts-filesystem = %{?epoch:%{epoch}:}%{version}-%{release} + +Provides: fontpackages-devel = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: fontpackages-devel < %{?epoch:%{epoch}:}%{version}-%{release} +# Tooling dropped for now as no one was willing to maintain it +Obsoletes: fontpackages-tools < %{?epoch:%{epoch}:}%{version}-%{release} + +Requires: fontconfig +Requires: libappstream-glib +Requires: uchardet + +# For the experimental generator +Requires: python3-ruamel-yaml +Requires: python3-lxml + +%description +This package provides build-stage rpm automation to simplify the creation of +fonts packages. + +It does not need to be included in the default build root: fonts-srpm-macros +will pull it in for fonts packages only. + +%package -n fonts-srpm-macros +Summary: Source-stage rpm automation for fonts packages +Requires: redhat-rpm-config + +%description -n fonts-srpm-macros +This package provides SRPM-stage rpm automation to simplify the creation of +fonts packages. + +It limits itself to the automation subset required to create fonts SRPM +packages and needs to be included in the default build root. + +The rest of the automation is provided by the fonts-rpm-macros package, that +fonts-srpm-macros will pull in for fonts packages only. + +%package -n fonts-filesystem +Summary: Directories used by font packages +License: MIT + +Provides: fontpackages-filesystem = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: fontpackages-filesystem < %{?epoch:%{epoch}:}%{version}-%{release} + +%description -n fonts-filesystem +This package contains the basic directory layout used by font packages, +including the correct permissions for the directories. + +%package -n fonts-rpm-templates +Summary: Example fonts packages rpm spec templates +License: MIT + +Requires: fonts-rpm-macros = %{?epoch:%{epoch}:}%{version}-%{release} +Supplements: fonts-rpm-macros = %{?epoch:%{epoch}:}%{version}-%{release} + +%description -n fonts-rpm-templates +This package contains documented rpm spec templates showcasing how to use the +macros provided by fonts-rpm-macros to create fonts packages. + +%prep +%forgesetup +%writevars -f rpm/macros.d/macros.fonts-srpm _fontbasedir _fontconfig_masterdir _fontconfig_confdir _fontconfig_templatedir +for template in templates/rpm/*\.spec ; do + target=$(echo "${template}" | sed "s|^\(.*\)\.spec$|\1-bare.spec|g") + grep -v '^%%dnl' "${template}" > "${target}" + touch -r "${template}" "${target}" +done +%patch0 -p1 -b .1-omit-foundry-in-family +%patch1 -p1 + +%install +install -m 0755 -d %{buildroot}%{_fontbasedir} \ + %{buildroot}%{_fontconfig_masterdir} \ + %{buildroot}%{_fontconfig_confdir} \ + %{buildroot}%{_fontconfig_templatedir} + +install -m 0755 -vd %{buildroot}%{_spectemplatedir} +install -m 0644 -vp templates/rpm/*spec \ + %{buildroot}%{_spectemplatedir} +install -m 0755 -vd %{buildroot}%{ftcgtemplatedir} +install -m 0644 -vp templates/fontconfig/*{conf,txt} \ + %{buildroot}%{ftcgtemplatedir} + +install -m 0755 -vd %{buildroot}%{rpmmacrodir} +install -m 0644 -vp rpm/macros.d/macros.fonts-* \ + %{buildroot}%{rpmmacrodir} +install -m 0755 -vd %{buildroot}%{_rpmluadir}/mariner/srpm +install -m 0644 -vp rpm/lua/srpm/*lua \ + %{buildroot}%{_rpmluadir}/mariner/srpm +install -m 0755 -vd %{buildroot}%{_rpmluadir}/mariner/rpm +install -m 0644 -vp rpm/lua/rpm/*lua \ + %{buildroot}%{_rpmluadir}/mariner/rpm + +install -m 0755 -vd %{buildroot}%{_bindir} +install -m 0755 -vp bin/* %{buildroot}%{_bindir} + +%files +%license LICENSE.txt +%{_bindir}/* +%{rpmmacrodir}/macros.fonts-rpm* +%{_rpmluadir}/mariner/rpm/*.lua + +%files -n fonts-srpm-macros +%license LICENSE.txt +%doc *.md changelog.txt +%{rpmmacrodir}/macros.fonts-srpm* +%{_rpmluadir}/mariner/srpm/*.lua + +%files -n fonts-filesystem +%dir %{_datadir}/fontconfig +%dir %{_fontbasedir} +%dir %{_fontconfig_masterdir} +%dir %{_fontconfig_confdir} +%dir %{_fontconfig_templatedir} + +%files -n fonts-rpm-templates +%license LICENSE-templates.txt +%doc *.md changelog.txt +%{_spectemplatedir}/*.spec +%dir %{ftcgtemplatedir} +%doc %{ftcgtemplatedir}/*conf +%doc %{ftcgtemplatedir}/*txt + +%changelog +* Tue May 16 2023 Bala - 1:2.0.5-12 +- Initial CBL-Mariner import from Fedora 38 (license: MIT) +- License verified +- Updated the path relevant to Mariner + +* Thu Jan 19 2023 Fedora Release Engineering - 1:2.0.5-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Dec 08 2022 Parag Nemade - 1:2.0.5-10 +- Update license tag to SPDX format + +* Fri Aug 19 2022 Akira TAGOH - 1:2.0.5-9 +- Omit foundry name in family name. + +* Thu Jul 21 2022 Fedora Release Engineering - 1:2.0.5-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 1:2.0.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jul 21 2021 Fedora Release Engineering - 1:2.0.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 1:2.0.5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 1:2.0.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sat May 23 17:00:05 CEST 2020 Igor Raits - 1:2.0.5-3 +- Insert Epoch in Requires/Provides/Obsoletes + +* Sat May 23 09:03:10 CEST 2020 Igor Raits - 1:2.0.5-2 +- Revert to 2.0.5 + +* Tue Apr 28 2020 Nicolas Mailhot +- 3.0.3-1 +🐞 Fix bugs in the 3.0.2 refactoring +- 3.0.2-1 +🐞 Workaround Fedora problems created by rpm commit 93604e2 + harder + +* Mon Apr 27 2020 Nicolas Mailhot +- 3.0.1-1 +🐞 Workaround Fedora problems created by rpm commit 93604e2 + +* Fri Apr 3 2020 Nicolas Mailhot +- 2.0.5-1 +✅ do not add empty urls to appstream files + +* Thu Apr 2 2020 Nicolas Mailhot +- 2.0.4-2 +✅ validate fontconfig files by default + +* Sat Feb 29 2020 Nicolas Mailhot +- 2.0.3-1 +✅ minor rpmlint-oriented fixlets + +* Sat Feb 22 2020 Nicolas Mailhot +- 2.0.2-1 +✅ improve experimental fontconfig configuration generator + +* Thu Feb 20 2020 Nicolas Mailhot +- 2.0.1-3 +✅ limit descriptions to 80 columns + +* Fri Feb 14 2020 Nicolas Mailhot +- 2.0.1-2 +✅ use fonts packaging guidelines as URL +- 2.0.1-1 +✅ first 2.x version proposed to Fedora, after FPC approval + https://meetbot-raw.fedoraproject.org/fedora-meeting-1/2020-02-13/fpc.2020-02-13-17.00.txt + +* Mon Nov 11 2019 Nicolas Mailhot +- 2.0.0-1 +✅ transform into fonts-rpm-macros +✅ major rpm macro and rpm spec template rework + + +* Mon Nov 10 2008 Nicolas Mailhot +- 1.0-1 +✅ initial release diff --git a/SPECS-EXTENDED/fonts-rpm-macros/update_for_mariner.patch b/SPECS-EXTENDED/fonts-rpm-macros/update_for_mariner.patch new file mode 100644 index 00000000000..8cad4837272 --- /dev/null +++ b/SPECS-EXTENDED/fonts-rpm-macros/update_for_mariner.patch @@ -0,0 +1,459 @@ +diff --git a/LICENSE-templates.txt b/LICENSE-templates.txt +index b54e7ad..8106890 100644 +--- a/LICENSE-templates.txt ++++ b/LICENSE-templates.txt +@@ -1,6 +1,6 @@ + MIT License + +-Copyright © 2019 Nicolas Mailhot ++Copyright © 2019 Nicolas Mailhot + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +diff --git a/README.md b/README.md +index 5764ac9..4faddca 100644 +--- a/README.md ++++ b/README.md +@@ -11,12 +11,12 @@ It contains: + + ## History + +-The fonts-rpm-macros project was initiated by the [Fedora Fonts Special Interest Group](http://fonts.fedoraproject.org/), and is the reference for Fedora font packaging guidelines. It is therefore a bit rpm-oriented. However great care was extended to keep it distribution-neutral, and contributors from other distributions are welcome, even if they use different packaging systems, and want to add non-rpm templates. ++The fonts-rpm-macros project was initiated by the [Fedora Fonts Special Interest Group](http://fonts.marinerproject.org/), and is the reference for Fedora font packaging guidelines. It is therefore a bit rpm-oriented. However great care was extended to keep it distribution-neutral, and contributors from other distributions are welcome, even if they use different packaging systems, and want to add non-rpm templates. + + ## Publication + + - [technical files](https://pagure.io/fonts-rpm-macros) +-- [Fedora packaging](https://src.fedoraproject.org/rpms/fonts-rpm-macros) ++- [Fedora packaging](https://src.marinerproject.org/rpms/fonts-rpm-macros) + + ## Licensing + +diff --git a/changelog.txt b/changelog.txt +index 615ab27..b43ccb7 100644 +--- a/changelog.txt ++++ b/changelog.txt +@@ -37,7 +37,7 @@ + - repo-font-audit: replace the two existing WWS tests with a more + comprehensive one, and externalize it + - repo-font-audit: add core fonts use test +- - repo-font-audit: add fedora packager name detection ++ - repo-font-audit: add mariner packager name detection + - repo-font-audit: add a processed total to reassure users when no problem + is identified + - repo-font-audit: rework messenging (again) +@@ -106,7 +106,7 @@ + help detect collisions + 1.20 - Change %define to %global in templates + 1.19 - Add partial templates for fonts subpackages of other packages, update +- for rpm 4.6 changes in fedora-devel ++ for rpm 4.6 changes in mariner-devel + 1.18 - Auto-own the fonts directory, multiple ownership is ok after all + 1.17 - Tweak spec templates documentation, add fontconfig documentation + 1.16 - Fix recently introduced typo in the simple spec template +diff --git a/rpm/lua/rpm/fonts.lua b/rpm/lua/rpm/fonts.lua +index bb7475b..74556ae 100644 +--- a/rpm/lua/rpm/fonts.lua ++++ b/rpm/lua/rpm/fonts.lua +@@ -1,4 +1,4 @@ +--- Copyright © 2019 Nicolas Mailhot ++-- Copyright © 2019 Nicolas Mailhot + -- + -- This program is free software: you can redistribute it and/or modify + -- it under the terms of the GNU General Public License as published by +@@ -51,8 +51,8 @@ end + -- Reformat some text into something that can be included in an AppStream + -- XML description + local function txt2xml(text) +- local fedora = require "fedora.common" +- local text = fedora.wordwrap(text) ++ local mariner = require "mariner.common" ++ local text = mariner.wordwrap(text) + local output = "" + local oldtag = nil + local oldadvance = nil +diff --git a/rpm/lua/srpm/fonts.lua b/rpm/lua/srpm/fonts.lua +index 95cc2bd..3836fde 100644 +--- a/rpm/lua/srpm/fonts.lua ++++ b/rpm/lua/srpm/fonts.lua +@@ -1,4 +1,4 @@ +--- Copyright © 2018-2019 Nicolas Mailhot ++-- Copyright © 2018-2019 Nicolas Mailhot + -- + -- This program is free software: you can redistribute it and/or modify + -- it under the terms of the GNU General Public License as published by +@@ -92,12 +92,12 @@ end + -- The fontenv macro main processing function + -- See the documentation in the macros.fonts file for argument description + local function env(suffix, verbose, globvalues) +- local fedora = require "fedora.common" ++ local mariner = require "mariner.common" + local ismain = (suffix == "") or (suffix == "0") +- fedora.zalias({"foundry", "fontlicense"}, verbose) +- fedora.safeset("fontlicense", "%{license}", verbose) ++ mariner.zalias({"foundry", "fontlicense"}, verbose) ++ mariner.safeset("fontlicense", "%{license}", verbose) + if ismain then +- fedora.zalias({"fontsummary", "fontdescription", "fontpkgname", "fonthumanname", ++ mariner.zalias({"fontsummary", "fontdescription", "fontpkgname", "fonthumanname", + "fontpkgheader", "fonts", "fontsex", "fontconfs", "fontconfsex", + "fontconfngs", "fontconfngsex", + "fontappstreams", "fontappstreamsex", +@@ -107,41 +107,41 @@ local function env(suffix, verbose, globvalues) + for _, v in ipairs({"foundry", "fontdocs", "fontdocsex", + "fontlicense", "fontlicenses", "fontlicensesex"}) do + if (rpm.expand("%{" .. v .. "}") ~= "%{" .. v .. "}") then +- fedora.safeset(v .. suffix, "%{" .. v .. "}", verbose) ++ mariner.safeset(v .. suffix, "%{" .. v .. "}", verbose) + end + end + for g, _ in pairs(globargs) do + local v = rpm.expand("%{?" .. g .. suffix .. "} " .. (globvalues[g] or "")) + if (string.gsub(v, "[%s]+", "") ~= "") then +- fedora.explicitset( "current" .. g, v, verbose) ++ mariner.explicitset( "current" .. g, v, verbose) + else +- fedora.explicitunset("current" .. g, verbose) ++ mariner.explicitunset("current" .. g, verbose) + end + end + local foundry = rpm.expand("%{?foundry" .. suffix .. ":%{foundry" .. suffix .. "}}") + local family = string.gsub(rpm.expand("%{fontfamily" .. suffix .. "}"), "^" .. foundry, "") + local basename = foundry .. " " .. family +- fedora.safeset("fontpkgname" .. suffix, rpmname(basename), verbose) +- fedora.safeset("fonthumanname" .. suffix, basename, verbose) +- fedora.safeset("fontdir" .. suffix, "%{_fontbasedir}/%{fontpkgname" .. suffix .. "}", verbose) +- fedora.safeset("fontfilelist" .. suffix, "%{_builddir}/%{?buildsubdir}/%{fontpkgname" .. suffix .. "}.list", verbose) ++ mariner.safeset("fontpkgname" .. suffix, rpmname(basename), verbose) ++ mariner.safeset("fonthumanname" .. suffix, basename, verbose) ++ mariner.safeset("fontdir" .. suffix, "%{_fontbasedir}/%{fontpkgname" .. suffix .. "}", verbose) ++ mariner.safeset("fontfilelist" .. suffix, "%{_builddir}/%{?buildsubdir}/%{fontpkgname" .. suffix .. "}.list", verbose) + if ismain then +- fedora.zalias({"fontpkgname", "fontdir", "fontfilelist"}) ++ mariner.zalias({"fontpkgname", "fontdir", "fontfilelist"}) + end + for _, v in ipairs({"foundry", "fontpkgname", "fonthumanname", "fontpkgheader", + "fontdir", "fontfilelist", "fontfamily", "fontlicense", + "fontsummary", "fontdescription"}) do + if (rpm.expand("%{?" .. v .. suffix .. "}") ~= "") then +- fedora.explicitset( "current" .. v, "%{" .. v .. suffix .. "}", verbose) ++ mariner.explicitset( "current" .. v, "%{" .. v .. suffix .. "}", verbose) + else +- fedora.explicitunset("current" .. v, verbose) ++ mariner.explicitunset("current" .. v, verbose) + end + end + end + + -- Create a single %package section for a fonts subpackage + local function singlepkg(forcemain, forcesub, suffix, verbose) +- local fedora = require "fedora.common" ++ local mariner = require "mariner.common" + local sub = (not forcemain) and (forcesub or ((suffix ~= nil) and (suffix ~= "") and (suffix ~= "0"))) + env(suffix, verbose, {}) + name = sub and "%package -n " or "Name: " +@@ -156,15 +156,15 @@ local function singlepkg(forcemain, forcesub, suffix, verbose) + "Requires: fontpackages-filesystem\n" .. + "%{?currentfontpkgheader}\n" .. + "%description -n %{currentfontpkgname}\n") .. +- fedora.wordwrap("%{?currentfontdescription}") .. ++ mariner.wordwrap("%{?currentfontdescription}") .. + "\n") + end + + -- Create one or all %package sections for fonts subpackages + local function pkg(forcemain, forcesub, suffix, processall, verbose) +- local fedora = require "fedora.common" ++ local mariner = require "mariner.common" + if processall then +- for _, suffix in pairs(fedora.getsuffixes("fontfamily")) do ++ for _, suffix in pairs(mariner.getsuffixes("fontfamily")) do + singlepkg(forcemain, forcesub, suffix, verbose) + end + else +@@ -174,8 +174,8 @@ end + + -- Create a font (sub)metapackage header + local function metapkg(name, summary, description, suffixes) +- local fedora = require "fedora.common" +- local fontpkgs = fedora.getsuffixed("fontpkgname") ++ local mariner = require "mariner.common" ++ local fontpkgs = mariner.getsuffixed("fontpkgname") + if (name == "") then + name, _ = string.gsub(rpm.expand("%{name}"), "-fonts$", "") + name = name .. "-fonts-all" +@@ -186,7 +186,7 @@ local function metapkg(name, summary, description, suffixes) + if (description == "") then + description = "This meta-package installs all the font packages, generated from the %{name} source package." + end +- description = fedora.wordwrap(description) ++ description = mariner.wordwrap(description) + print(rpm.expand( + "%package -n " .. name .. "\n" .. + "Summary: " .. summary .. "\n")) +diff --git a/rpm/macros.d/macros.fonts-rpm b/rpm/macros.d/macros.fonts-rpm +index 6d2fa82..5a05c18 100644 +--- a/rpm/macros.d/macros.fonts-rpm ++++ b/rpm/macros.d/macros.fonts-rpm +@@ -1,4 +1,4 @@ +-# Copyright © 2008-2019 Nicolas Mailhot ++# Copyright © 2008-2019 Nicolas Mailhot + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -23,7 +23,7 @@ + # Putting multiple lines of UTF-8 text inside a variable is usually + # accomplished with a %%{expand: some_text}. + %fonttxt2xml(v:) %{lua: +-local fonts = require "fedora.rpm.fonts" ++local fonts = require "mariner.rpm.fonts" + local variable = "%{" .. rpm.expand("%{-v*}%{!-v:_description}") .. "}" + print(fonts.txt2xml(variable)) + } +@@ -35,8 +35,8 @@ print(fonts.txt2xml(variable)) + # -z calls + # -v be verbose + %fontbuild(z:av) %{lua: +-local fedora = require "fedora.common" +-local fonts = require "fedora.srpm.fonts" ++local mariner = require "mariner.common" ++local fonts = require "mariner.srpm.fonts" + local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") + local verbose = (rpm.expand("%{-v}") ~= "") + local function process(suffix) +@@ -46,7 +46,7 @@ local function process(suffix) + if not verbose then print('set -x\\n') end + end + if processall then +- for _,s in pairs(fedora.getsuffixes("fontfamily")) do ++ for _,s in pairs(mariner.getsuffixes("fontfamily")) do + process(s) + end + else +@@ -71,8 +71,8 @@ end + # -l "" licensing files to include. Alternatively, set %{fontlicenses} + # -L "" licensing files to exclude. Alternatively, set %{fontlicensesex} + %fontinstall(z:avf:F:c:C:s:S:d:D:l:L:) %{lua: +-local fedora = require "fedora.common" +-local fonts = require "fedora.srpm.fonts" ++local mariner = require "mariner.common" ++local fonts = require "mariner.srpm.fonts" + local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") + local verbose = (rpm.expand("%{-v}") ~= "") + local globvalues = {} +@@ -86,7 +86,7 @@ local function process(suffix) + if not verbose then print('set -x\\n') end + end + if processall then +- for _,s in pairs(fedora.getsuffixes("fontfamily")) do ++ for _,s in pairs(mariner.getsuffixes("fontfamily")) do + process(s) + end + else +@@ -101,8 +101,8 @@ end + # -z calls + # -v be verbose + %fontcheck(z:av) %{lua: +-local fedora = require "fedora.common" +-local fonts = require "fedora.srpm.fonts" ++local mariner = require "mariner.common" ++local fonts = require "mariner.srpm.fonts" + local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") + local verbose = (rpm.expand("%{-v}") ~= "") + local function process(suffix) +@@ -115,7 +115,7 @@ local function process(suffix) + ]])) + end + if processall then +- for _,s in pairs(fedora.getsuffixes("fontfamily")) do ++ for _,s in pairs(mariner.getsuffixes("fontfamily")) do + process(s) + end + else +@@ -130,8 +130,8 @@ end + # -z calls + # -v be verbose + %fontfiles(z:av) %{lua: +-local fedora = require "fedora.common" +-local fonts = require "fedora.srpm.fonts" ++local mariner = require "mariner.common" ++local fonts = require "mariner.srpm.fonts" + local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") + local verbose = (rpm.expand("%{-v}") ~= "") + local function process(suffix) +@@ -139,7 +139,7 @@ local function process(suffix) + print(rpm.expand('%files -n %{currentfontpkgname} -f %{currentfontfilelist}\\n')) + end + if processall then +- for _,s in pairs(fedora.getsuffixes("fontfamily")) do ++ for _,s in pairs(mariner.getsuffixes("fontfamily")) do + process(s) + end + else +diff --git a/rpm/macros.d/macros.fonts-rpm.deprecated b/rpm/macros.d/macros.fonts-rpm.deprecated +index bbd75cc..d77531a 100644 +--- a/rpm/macros.d/macros.fonts-rpm.deprecated ++++ b/rpm/macros.d/macros.fonts-rpm.deprecated +@@ -1,4 +1,4 @@ +-# Copyright © 2008-2019 Nicolas Mailhot ++# Copyright © 2008-2019 Nicolas Mailhot + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +diff --git a/rpm/macros.d/macros.fonts-rpm.internal b/rpm/macros.d/macros.fonts-rpm.internal +index 9d87789..1303db1 100644 +--- a/rpm/macros.d/macros.fonts-rpm.internal ++++ b/rpm/macros.d/macros.fonts-rpm.internal +@@ -1,4 +1,4 @@ +-# Copyright © 2018-2019 Nicolas Mailhot ++# Copyright © 2018-2019 Nicolas Mailhot + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +diff --git a/rpm/macros.d/macros.fonts-srpm b/rpm/macros.d/macros.fonts-srpm +index 77365d6..8afbfe2 100644 +--- a/rpm/macros.d/macros.fonts-srpm ++++ b/rpm/macros.d/macros.fonts-srpm +@@ -1,4 +1,4 @@ +-# Copyright © 2008-2019 Nicolas Mailhot ++# Copyright © 2008-2019 Nicolas Mailhot + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -36,16 +36,16 @@ + + # Default contact in font appstream files + # Override in your spec file if it does not apply +-%fontcontact fonts@lists.fedoraproject.org ++%fontcontact fonts@lists.marinerproject.org + + # Default org in font appstream files + # Override in your spec file if it does not apply +-%fontorg org.fedoraproject ++%fontorg org.marinerproject + + # Sanitize a font family name that can then serve as rpm package name + # Mandatory parameter: a font family name + %fontrpmname() %{lua: +-local fonts = require "fedora.srpm.fonts" ++local fonts = require "mariner.srpm.fonts" + print(fonts.rpmname(rpm.expand("%1"))) + } + +@@ -67,7 +67,7 @@ print(fonts.rpmname(rpm.expand("%1"))) + # -l "" licensing files to include. Alternatively, set %{fontlicenses} + # -L "" licensing files to exclude. Alternatively, set %{fontlicensesex} + %fontenv(z:vf:F:c:C:s:S:d:D:l:L:) %{lua: +-local fonts = require "fedora.srpm.fonts" ++local fonts = require "mariner.srpm.fonts" + local suffix = rpm.expand("%{?-z*}") + local verbose = (rpm.expand("%{-v}") ~= "") + local globvalues = {} +@@ -88,7 +88,7 @@ fonts.env(suffix, verbose, globvalues) + # by itself the macro assumes the zero or nil suffix block + # corresponds to the main package header + %fontpkg(z:avms) %{lua: +-local fonts = require "fedora.srpm.fonts" ++local fonts = require "mariner.srpm.fonts" + local suffix = rpm.expand("%{?-z*}") + local processall = (rpm.expand("%{-a}") ~= "") and (rpm.expand("%{-z}") == "") + local verbose = (rpm.expand("%{-v}") ~= "") +@@ -104,7 +104,7 @@ fonts.pkg(forcemain, forcesub, suffix, processall, verbose) + # -z "" restrict metapackaging to comma-separated list of + # font package suffixes + %fontmetapkg(n:s:d:z:) %{lua: +-local fonts = require "fedora.srpm.fonts" ++local fonts = require "mariner.srpm.fonts" + local name = rpm.expand("%{?-n*}") + local summary = rpm.expand("%{?-s*}") + if (summary ~= "") then +diff --git a/templates/fontconfig/basic-font-template.txt b/templates/fontconfig/basic-font-template.txt +index ec72f00..bff0c1a 100644 +--- a/templates/fontconfig/basic-font-template.txt ++++ b/templates/fontconfig/basic-font-template.txt +@@ -33,4 +33,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2008-2009 Nicolas Mailhot ++© 2008-2009 Nicolas Mailhot +diff --git a/templates/fontconfig/fontconfig-generics.txt b/templates/fontconfig/fontconfig-generics.txt +index 5781b42..8725f23 100644 +--- a/templates/fontconfig/fontconfig-generics.txt ++++ b/templates/fontconfig/fontconfig-generics.txt +@@ -22,4 +22,4 @@ metadata is missing or plain false, so do not rely on it 100%. + ¹ http://en.wikipedia.org/wiki/Serif + ² + + then check the OS/2 tab. + +-© 2009 Nicolas Mailhot ++© 2009 Nicolas Mailhot +diff --git a/templates/fontconfig/fontconfig-priorities.txt b/templates/fontconfig/fontconfig-priorities.txt +index 06e1a2d..263b0b5 100644 +--- a/templates/fontconfig/fontconfig-priorities.txt ++++ b/templates/fontconfig/fontconfig-priorities.txt +@@ -27,4 +27,4 @@ belongs to, if you do not want to perturb distribution defaults. + + See also /etc/fonts/conf.d/README + +-© 2007-2009 Nicolas Mailhot ++© 2007-2009 Nicolas Mailhot +diff --git a/templates/fontconfig/index.txt b/templates/fontconfig/index.txt +index a398759..1242b1b 100644 +--- a/templates/fontconfig/index.txt ++++ b/templates/fontconfig/index.txt +@@ -33,4 +33,4 @@ text file: + When you need to make several font families appear as a single one, + simplifying font management for users. + +-© 2009 Nicolas Mailhot ++© 2009 Nicolas Mailhot +diff --git a/templates/fontconfig/l10n-font-template.txt b/templates/fontconfig/l10n-font-template.txt +index e380e71..f9937c1 100644 +--- a/templates/fontconfig/l10n-font-template.txt ++++ b/templates/fontconfig/l10n-font-template.txt +@@ -44,4 +44,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2008-2009 Nicolas Mailhot ++© 2008-2009 Nicolas Mailhot +diff --git a/templates/fontconfig/merging-font-template.txt b/templates/fontconfig/merging-font-template.txt +index c9b555a..902d281 100644 +--- a/templates/fontconfig/merging-font-template.txt ++++ b/templates/fontconfig/merging-font-template.txt +@@ -62,4 +62,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2009 Nicolas Mailhot ++© 2009 Nicolas Mailhot +diff --git a/templates/fontconfig/remapping-font-template.txt b/templates/fontconfig/remapping-font-template.txt +index c2829b5..be8e4c6 100644 +--- a/templates/fontconfig/remapping-font-template.txt ++++ b/templates/fontconfig/remapping-font-template.txt +@@ -74,4 +74,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2009 Nicolas Mailhot ++© 2009 Nicolas Mailhot +diff --git a/templates/fontconfig/rescaling-font-template.txt b/templates/fontconfig/rescaling-font-template.txt +index 200fbda..fa5b2e3 100644 +--- a/templates/fontconfig/rescaling-font-template.txt ++++ b/templates/fontconfig/rescaling-font-template.txt +@@ -45,4 +45,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2008-2009 Nicolas Mailhot ++© 2008-2009 Nicolas Mailhot +diff --git a/templates/fontconfig/substitution-font-template.txt b/templates/fontconfig/substitution-font-template.txt +index 2ae6940..39509de 100644 +--- a/templates/fontconfig/substitution-font-template.txt ++++ b/templates/fontconfig/substitution-font-template.txt +@@ -39,4 +39,4 @@ The output file will be named: + where [XX] should be a two-digit number corresponding to the font priority in + fontconfig. + +-© 2008-2009 Nicolas Mailhot ++© 2008-2009 Nicolas Mailhot diff --git a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md index 906dfae4169..ff335b141a2 100644 --- a/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md +++ b/SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md @@ -5,7 +5,7 @@ The CBL-Mariner SPEC files originated from a variety of sources with varying lic | CentOS | [MIT](https://www.centos.org/legal/#licensing-policy) | crash-ptdump-command
delve
fstrm
nodejs-nodemon
rhnlib
rt-setup
rt-tests
rtctl
tuned | | Ceph source | [LGPL2.1](https://github.com/ceph/ceph/blob/master/COPYING-LGPL2.1) | ceph | | Debian | [MIT](https://opensource.org/licenses/MIT) | prometheus-process-exporter | -| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
amtk
amtterm
annobin
ansible-freeipa
archivemount
argparse-manpage
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
bluez
bmake
bogofilter
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
cairomm
calamares
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cgdcbxd
chan
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cldr-emoji-annotation
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
containernetworking-plugins
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
dpkg
driverctl
dropwatch
drpm
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
evemu
execstack
exempi
exiv2
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fapolicyd
fdk-aac-free
fdupes
fence-virt
fetchmail
fftw
filebench
fio
fipscheck
firewalld
fish
flac
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontpackages
foomatic-db
freeglut
freeipmi
freeradius
freetds
fribidi
fros
frr
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fxload
gavl
gconf-editor
GConf2
gcovr
gcr
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
ghc-srpm-macros
giflib
gl-manpages
glew
glm
glog
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
indent
infinipath-psm
iniparser
intel-cmt-cat
intel-ipsec-mb
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
kata-containers
kde-filesystem
kde-settings
kexec-tools
keybinder3
keycloak-httpd-client-install
kf5
kf5-kconfig
kf5-kcoreaddons
kf5-ki18n
kf5-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libcli
libcmis
libcmpiutil
libcomps
libcroco
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbi-drivers
libdbusmenu
libdc1394
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libewf
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
liblangtag
libldb
libldm
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtranslit
libucil
libunicap
libuninameslist
liburing
libusbmuxd
libuser
libutempter
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpx
libwacom
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
linuxptp
lksctp-tools
lldpd
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunit
lua-rpm-macros
lua-term
luajit
luksmeta
lutok
lv2
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
multilib-rpm-config
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
neon
netavark
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvmetcli
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-migrate-parsetree
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-ppx-derivers
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-stdio
ocaml-topkg
ocaml-tyxml
ocaml-uuidm
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
omping
opa
opal
open-vm-tools
openblas
opencc
opencl-filesystem
opencl-headers
opencryptoki
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
opus
opusfile
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus
prometheus-node-exporter
ps_mem
psacct
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-argcomplete
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-cached_property
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-package-handling
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fields
python-filelock
python-fixtures
python-flake8
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-markdown
python-mccabe
python-memcached
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paramiko
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-process-tests
python-productmd
python-ptyprocess
python-pycares
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-redis
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rpm-generators
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-should_dsl
python-simpleline
python-slip
python-sniffio
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-typing-extensions
python-uamqp
python-unittest2
python-uritemplate
python-urwid
python-varlink
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xmltodict
python-yubico
python-zipp
python-zmq
python3-mallard-ducktype
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt5-qtbase
qt5-qtconnectivity
qt5-qtdeclarative
qt5-qtsensors
qt5-qtsvg
qt5-qttools
qt5-rpm-macros
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
redland
resource-agents
rest
rhash
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-thread_order
rusers
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
SDL
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
sendmail
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stunnel
subscription-manager
suitesparse
SuperLU
supermin
switcheroo-control
symlinks
sympy
sysfsutils
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
tpm-quote-tools
tpm-tools
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
unicode-emoji
unicode-ucd
unique3
units
upower
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vitess
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xrestop
xterm
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zopfli
zziplib | +| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
amtk
amtterm
annobin
ansible-freeipa
archivemount
argparse-manpage
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
bluez
bmake
bogofilter
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
cairomm
calamares
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cgdcbxd
chan
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cldr-emoji-annotation
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
containernetworking-plugins
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
dpkg
driverctl
dropwatch
drpm
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
evemu
execstack
exempi
exiv2
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fapolicyd
fdk-aac-free
fdupes
fence-virt
fetchmail
fftw
filebench
fio
fipscheck
firewalld
fish
flac
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontpackages
fonts-rpm-macros
foomatic-db
freeglut
freeipmi
freeradius
freetds
fribidi
fros
frr
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fxload
gavl
gconf-editor
GConf2
gcovr
gcr
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
ghc-srpm-macros
giflib
gl-manpages
glew
glm
glog
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
indent
infinipath-psm
iniparser
intel-cmt-cat
intel-ipsec-mb
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
kata-containers
kde-filesystem
kde-settings
kexec-tools
keybinder3
keycloak-httpd-client-install
kf5
kf5-kconfig
kf5-kcoreaddons
kf5-ki18n
kf5-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libcli
libcmis
libcmpiutil
libcomps
libcroco
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbi-drivers
libdbusmenu
libdc1394
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libewf
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
liblangtag
libldb
libldm
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtranslit
libucil
libunicap
libuninameslist
liburing
libusbmuxd
libuser
libutempter
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpx
libwacom
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
linuxptp
lksctp-tools
lldpd
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunit
lua-rpm-macros
lua-term
luajit
luksmeta
lutok
lv2
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
multilib-rpm-config
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
neon
netavark
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvmetcli
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-migrate-parsetree
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-ppx-derivers
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-stdio
ocaml-topkg
ocaml-tyxml
ocaml-uuidm
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
omping
opa
opal
open-vm-tools
openblas
opencc
opencl-filesystem
opencl-headers
opencryptoki
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
opus
opusfile
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus
prometheus-node-exporter
ps_mem
psacct
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-argcomplete
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-cached_property
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-package-handling
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fields
python-filelock
python-fixtures
python-flake8
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-markdown
python-mccabe
python-memcached
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paramiko
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-process-tests
python-productmd
python-ptyprocess
python-pycares
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-redis
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rpm-generators
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-should_dsl
python-simpleline
python-slip
python-sniffio
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-typing-extensions
python-uamqp
python-unittest2
python-uritemplate
python-urwid
python-varlink
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xmltodict
python-yubico
python-zipp
python-zmq
python3-mallard-ducktype
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt5-qtbase
qt5-qtconnectivity
qt5-qtdeclarative
qt5-qtsensors
qt5-qtsvg
qt5-qttools
qt5-rpm-macros
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
redland
resource-agents
rest
rhash
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-thread_order
rusers
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
SDL
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
sendmail
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stunnel
subscription-manager
suitesparse
SuperLU
supermin
switcheroo-control
symlinks
sympy
sysfsutils
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
tpm-quote-tools
tpm-tools
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
unicode-emoji
unicode-ucd
unique3
units
upower
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vitess
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xrestop
xterm
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zopfli
zziplib | | Fedora (Copyright Remi Collet) | [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode) | libmemcached-awesome
librabbitmq | | Magnus Edenhill Open Source | [Magnus Edenhill Open Source BSD License](https://github.com/jemalloc/jemalloc/blob/dev/COPYING) | librdkafka | | Microsoft | [Microsoft MIT License](/LICENSES-AND-NOTICES/LICENSE.md) | application-gateway-kubernetes-ingress
asc
azcopy
azure-iot-sdk-c
azure-storage-cpp
bazel
blobfuse
blobfuse2
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
coredns-1.8.0
coredns-1.8.4
coredns-1.8.6
coredns-1.9.3
csi-driver-lvm
dcos-cli
debugedit
dejavu-fonts
distroless-packages
doxygen
dtc
elixir
espeak-ng
espeakup
flannel
fluent-bit
freefont
gflags
gh
go-md2man
grpc
grub2-efi-binary-signed
GSL
gtk-update-icon-cache
helm
hvloader
installkernel
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
keda
keras
kernel-azure-signed
kernel-hci-signed
kernel-signed
KeysInUse-OpenSSL
kpatch
kube-vip-cloud-provider
kubernetes-1.18.14
kubernetes-1.18.17
kubernetes-1.19.7
kubernetes-1.19.9
kubernetes-1.20.2
kubernetes-1.20.5
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libuv
libxml++
livepatch-5.15.102.1-1.cm2
livepatch-5.15.102.1-3.cm2
livepatch-5.15.107.1-1.cm2
livepatch-5.15.110.1-1.cm2
livepatch-5.15.111.1-1.cm2
livepatch-5.15.112.1-1.cm2
livepatch-5.15.112.1-2.cm2
livepatch-5.15.94.1-1.cm2
livepatch-5.15.94.1-1.cm2-signed
livepatch-5.15.95.1-1.cm2
livepatch-5.15.98.1-1.cm2
livepatching
lld
local-path-provisioner
lsb-release
ltp
lttng-consume
mariner-release
mariner-repos
mariner-rpm-macros
maven3
mm-common
moby-buildx
moby-cli
moby-compose
moby-containerd
moby-containerd-cc
moby-engine
moby-runc
msgpack
ncompress
networkd-dispatcher
nlohmann-json
nmap
nmi
node-problem-detector
ntopng
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-execnet
python-google-pasta
python-libclang
python-logutils
python-nocasedict
python-opt-einsum
python-pecan
python-remoto
python-repoze-lru
python-routes
python-rsa
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-tensorflow-estimator
python-yamlloader
R
rabbitmq-server
reaper
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-async
rubygem-async-http
rubygem-async-io
rubygem-async-pool
rubygem-aws-eventstream
rubygem-aws-partitions
rubygem-aws-sdk-core
rubygem-aws-sdk-kms
rubygem-aws-sdk-s3
rubygem-aws-sdk-sqs
rubygem-aws-sigv4
rubygem-bigdecimal
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-console
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-patron
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-fluent-config-regexp-type
rubygem-fluent-logger
rubygem-fluent-plugin-elasticsearch
rubygem-fluent-plugin-kafka
rubygem-fluent-plugin-prometheus
rubygem-fluent-plugin-prometheus_pushgateway
rubygem-fluent-plugin-record-modifier
rubygem-fluent-plugin-rewrite-tag-filter
rubygem-fluent-plugin-s3
rubygem-fluent-plugin-systemd
rubygem-fluent-plugin-td
rubygem-fluent-plugin-webhdfs
rubygem-fluent-plugin-windows-exporter
rubygem-fluentd
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser.rb
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-td
rubygem-td-client
rubygem-td-logger
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
sdbus-cpp
sgx-backwards-compatability
shim
shim-unsigned
shim-unsigned-aarch64
shim-unsigned-x64
skopeo
span-lite
sriov-network-device-plugin
swupdate
SymCrypt
SymCrypt-OpenSSL
tensorflow
terraform
tinyxml2
toml11
tracelogging
umoci
usrsctp
vala
verity-read-only-root
vnstat
zstd | diff --git a/SPECS/LICENSES-AND-NOTICES/data/licenses.json b/SPECS/LICENSES-AND-NOTICES/data/licenses.json index 2e138fa0576..c65c460937c 100644 --- a/SPECS/LICENSES-AND-NOTICES/data/licenses.json +++ b/SPECS/LICENSES-AND-NOTICES/data/licenses.json @@ -232,6 +232,7 @@ "fmt", "fontawesome-fonts", "fontpackages", + "fonts-rpm-macros", "foomatic-db", "freeglut", "freeipmi", diff --git a/cgmanifest.json b/cgmanifest.json index 8ff6e9e0c1d..11c51afe736 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -3743,6 +3743,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "fonts-rpm-macros", + "version": "2.0.5", + "downloadUrl": "https://pagure.io/fonts-rpm-macros/archive/2.0.5/fonts-rpm-macros-2.0.5.tar.gz" + } + } + }, { "component": { "type": "other", From 07543af21acaf77d6cfab088507b659bc7ab6c53 Mon Sep 17 00:00:00 2001 From: Dan Streetman Date: Wed, 7 Jun 2023 09:22:21 -0400 Subject: [PATCH 07/14] CVE-2023-23914 (#5632) Patch vendored curl --- ...-sharing-of-HSTS-cache-among-handles.patch | 297 ++++++++++++++++++ ...ndle-adding-the-same-host-name-again.patch | 43 +++ SPECS/cmake/cmake.spec | 7 +- .../manifests/package/toolchain_aarch64.txt | 4 +- .../manifests/package/toolchain_x86_64.txt | 4 +- 5 files changed, 350 insertions(+), 5 deletions(-) create mode 100644 SPECS/cmake/CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch create mode 100644 SPECS/cmake/CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch diff --git a/SPECS/cmake/CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch b/SPECS/cmake/CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch new file mode 100644 index 00000000000..75bca03688a --- /dev/null +++ b/SPECS/cmake/CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch @@ -0,0 +1,297 @@ +From 076a2f629119222aeeb50f5a03bf9f9052fabb9a Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Tue, 27 Dec 2022 11:50:20 +0100 +Subject: [PATCH 1/5] share: add sharing of HSTS cache among handles + +Closes #10138 +--- + docs/libcurl/opts/CURLSHOPT_SHARE.3 | 4 +++ + docs/libcurl/symbols-in-versions | 1 + + include/curl/curl.h | 1 + + lib/hsts.c | 15 +++++++++ + lib/hsts.h | 2 ++ + lib/setopt.c | 48 ++++++++++++++++++++++++----- + lib/share.c | 32 +++++++++++++++++-- + lib/share.h | 6 +++- + lib/transfer.c | 3 ++ + lib/url.c | 6 +++- + lib/urldata.h | 2 ++ + 11 files changed, 109 insertions(+), 11 deletions(-) + +diff --git a/Utilities/cmcurl/include/curl/curl.h b/Utilities/cmcurl/include/curl/curl.h +index 139df9995..5758e3b21 100644 +--- a/Utilities/cmcurl/include/curl/curl.h ++++ b/Utilities/cmcurl/include/curl/curl.h +@@ -2953,6 +2953,7 @@ typedef enum { + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, ++ CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST + } curl_lock_data; + +diff --git a/Utilities/cmcurl/lib/hsts.c b/Utilities/cmcurl/lib/hsts.c +index c449120f3..339237be1 100644 +--- a/Utilities/cmcurl/lib/hsts.c ++++ b/Utilities/cmcurl/lib/hsts.c +@@ -39,6 +39,7 @@ + #include "rand.h" + #include "rename.h" ++#include "share.h" + #include "strtoofft.h" + + /* The last 3 #include files should be in this order */ + #include "curl_printf.h" +@@ -551,4 +552,18 @@ CURLcode Curl_hsts_loadcb(struct Curl_easy *data, struct hsts *h) + return hsts_pull(data, h); + } + ++void Curl_hsts_loadfiles(struct Curl_easy *data) ++{ ++ struct curl_slist *l = data->set.hstslist; ++ if(l) { ++ Curl_share_lock(data, CURL_LOCK_DATA_HSTS, CURL_LOCK_ACCESS_SINGLE); ++ ++ while(l) { ++ (void)Curl_hsts_loadfile(data, data->hsts, l->data); ++ l = l->next; ++ } ++ Curl_share_unlock(data, CURL_LOCK_DATA_HSTS); ++ } ++} ++ + #endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */ +diff --git a/Utilities/cmcurl/lib/hsts.h b/Utilities/cmcurl/lib/hsts.h +index 0e36a7756..3da7574e2 100644 +--- a/Utilities/cmcurl/lib/hsts.h ++++ b/Utilities/cmcurl/lib/hsts.h +@@ -59,9 +59,11 @@ CURLcode Curl_hsts_loadfile(struct Curl_easy *data, + struct hsts *h, const char *file); + CURLcode Curl_hsts_loadcb(struct Curl_easy *data, + struct hsts *h); ++void Curl_hsts_loadfiles(struct Curl_easy *data); + #else + #define Curl_hsts_cleanup(x) + #define Curl_hsts_loadcb(x,y) + #define Curl_hsts_save(x,y,z) ++#define Curl_hsts_loadfiles(x) + #endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */ + #endif /* HEADER_CURL_HSTS_H */ +diff --git a/Utilities/cmcurl/lib/setopt.c b/Utilities/cmcurl/lib/setopt.c +index f6083dceb..ebe24f95c 100644 +--- a/Utilities/cmcurl/lib/setopt.c ++++ b/Utilities/cmcurl/lib/setopt.c +@@ -2262,9 +2262,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + data->cookies = NULL; + #endif + ++#ifndef CURL_DISABLE_HSTS ++ if(data->share->hsts == data->hsts) ++ data->hsts = NULL; ++#endif ++#ifdef USE_SSL + if(data->share->sslsession == data->state.session) + data->state.session = NULL; +- ++#endif + #ifdef USE_LIBPSL + if(data->psl == &data->share->psl) + data->psl = data->multi? &data->multi->psl: NULL; +@@ -2298,10 +2303,19 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + data->cookies = data->share->cookies; + } + #endif /* CURL_DISABLE_HTTP */ ++#ifndef CURL_DISABLE_HSTS ++ if(data->share->hsts) { ++ /* first free the private one if any */ ++ Curl_hsts_cleanup(&data->hsts); ++ data->hsts = data->share->hsts; ++ } ++#endif /* CURL_DISABLE_HTTP */ ++#ifdef USE_SSL + if(data->share->sslsession) { + data->set.general_ssl.max_ssl_sessions = data->share->max_ssl_sessions; + data->state.session = data->share->sslsession; + } ++#endif + #ifdef USE_LIBPSL + if(data->share->specifier & (1 << CURL_LOCK_DATA_PSL)) + data->psl = &data->share->psl; +@@ -3053,19 +3067,39 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + case CURLOPT_HSTSWRITEDATA: + data->set.hsts_write_userp = va_arg(param, void *); + break; +- case CURLOPT_HSTS: ++ case CURLOPT_HSTS: { ++ struct curl_slist *h; + if(!data->hsts) { + data->hsts = Curl_hsts_init(); + if(!data->hsts) + return CURLE_OUT_OF_MEMORY; + } + argptr = va_arg(param, char *); +- result = Curl_setstropt(&data->set.str[STRING_HSTS], argptr); +- if(result) +- return result; +- if(argptr) +- (void)Curl_hsts_loadfile(data, data->hsts, argptr); ++ if(argptr) { ++ result = Curl_setstropt(&data->set.str[STRING_HSTS], argptr); ++ if(result) ++ return result; ++ /* this needs to build a list of file names to read from, so that it can ++ read them later, as we might get a shared HSTS handle to load them ++ into */ ++ h = curl_slist_append(data->set.hstslist, argptr); ++ if(!h) { ++ curl_slist_free_all(data->set.hstslist); ++ data->set.hstslist = NULL; ++ return CURLE_OUT_OF_MEMORY; ++ } ++ data->set.hstslist = h; /* store the list for later use */ ++ } ++ else { ++ /* clear the list of HSTS files */ ++ curl_slist_free_all(data->set.hstslist); ++ data->set.hstslist = NULL; ++ if(!data->share || !data->share->hsts) ++ /* throw away the HSTS cache unless shared */ ++ Curl_hsts_cleanup(&data->hsts); ++ } + break; ++ } + case CURLOPT_HSTS_CTRL: + arg = va_arg(param, long); + if(arg & CURLHSTS_ENABLE) { +diff --git a/Utilities/cmcurl/lib/share.c b/Utilities/cmcurl/lib/share.c +index 1a083e72a..69ee00bf8 100644 +--- a/Utilities/cmcurl/lib/share.c ++++ b/Utilities/cmcurl/lib/share.c +@@ -29,9 +29,11 @@ + #include "share.h" + #include "psl.h" + #include "vtls/vtls.h" +-#include "curl_memory.h" ++#include "hsts.h" + +-/* The last #include file should be: */ ++/* The last 3 #include files should be in this order */ ++#include "curl_printf.h" ++#include "curl_memory.h" + #include "memdebug.h" + + struct Curl_share * +@@ -89,6 +91,18 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...) + #endif + break; + ++ case CURL_LOCK_DATA_HSTS: ++#ifndef CURL_DISABLE_HSTS ++ if(!share->hsts) { ++ share->hsts = Curl_hsts_init(); ++ if(!share->hsts) ++ res = CURLSHE_NOMEM; ++ } ++#else /* CURL_DISABLE_HSTS */ ++ res = CURLSHE_NOT_BUILT_IN; ++#endif ++ break; ++ + case CURL_LOCK_DATA_SSL_SESSION: + #ifdef USE_SSL + if(!share->sslsession) { +@@ -141,6 +155,16 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...) + #endif + break; + ++ case CURL_LOCK_DATA_HSTS: ++#ifndef CURL_DISABLE_HSTS ++ if(share->hsts) { ++ Curl_hsts_cleanup(&share->hsts); ++ } ++#else /* CURL_DISABLE_HSTS */ ++ res = CURLSHE_NOT_BUILT_IN; ++#endif ++ break; ++ + case CURL_LOCK_DATA_SSL_SESSION: + #ifdef USE_SSL + Curl_safefree(share->sslsession); +@@ -207,6 +231,10 @@ curl_share_cleanup(struct Curl_share *share) + Curl_cookie_cleanup(share->cookies); + #endif + ++#ifndef CURL_DISABLE_HSTS ++ Curl_hsts_cleanup(&share->hsts); ++#endif ++ + #ifdef USE_SSL + if(share->sslsession) { + size_t i; +diff --git a/Utilities/cmcurl/lib/share.h b/Utilities/cmcurl/lib/share.h +index 32be41691..244973055 100644 +--- a/Utilities/cmcurl/lib/share.h ++++ b/Utilities/cmcurl/lib/share.h +@@ -59,10 +59,14 @@ struct Curl_share { + #ifdef USE_LIBPSL + struct PslCache psl; + #endif +- ++#ifndef CURL_DISABLE_HSTS ++ struct hsts *hsts; ++#endif ++#ifdef USE_SSL + struct Curl_ssl_session *sslsession; + size_t max_ssl_sessions; + long sessionage; ++#endif + }; + + CURLSHcode Curl_share_lock(struct Curl_easy *, curl_lock_data, +diff --git a/Utilities/cmcurl/lib/transfer.c b/Utilities/cmcurl/lib/transfer.c +index 90d9c7b18..e58619a84 100644 +--- a/Utilities/cmcurl/lib/transfer.c ++++ b/Utilities/cmcurl/lib/transfer.c +@@ -1396,6 +1396,9 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) + if(data->state.resolve) + result = Curl_loadhostpairs(data); + ++ /* If there is a list of hsts files to read */ ++ Curl_hsts_loadfiles(data); ++ + if(!result) { + /* Allow data->set.use_port to set which port to use. This needs to be + * disabled for example when we follow Location: headers to URLs using +diff --git a/Utilities/cmcurl/lib/url.c b/Utilities/cmcurl/lib/url.c +index 6a18022bd..815c33fec 100644 +--- a/Utilities/cmcurl/lib/url.c ++++ b/Utilities/cmcurl/lib/url.c +@@ -437,7 +437,11 @@ CURLcode Curl_close(struct Curl_easy **datap) + Curl_altsvc_save(data, data->asi, data->set.str[STRING_ALTSVC]); + Curl_altsvc_cleanup(&data->asi); + Curl_hsts_save(data, data->hsts, data->set.str[STRING_HSTS]); +- Curl_hsts_cleanup(&data->hsts); ++#ifndef CURL_DISABLE_HSTS ++ if(!data->share || !data->share->hsts) ++ Curl_hsts_cleanup(&data->hsts); ++ curl_slist_free_all(data->set.hstslist); /* clean up list */ ++#endif + #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) + Curl_http_auth_cleanup_digest(data); + #endif +diff --git a/Utilities/cmcurl/lib/urldata.h b/Utilities/cmcurl/lib/urldata.h +index 54e486342..82cc340d1 100644 +--- a/Utilities/cmcurl/lib/urldata.h ++++ b/Utilities/cmcurl/lib/urldata.h +@@ -1659,6 +1659,8 @@ struct UserDefined { + /* function to convert from UTF-8 encoding: */ + curl_conv_callback convfromutf8; + #ifndef CURL_DISABLE_HSTS ++ struct curl_slist *hstslist; /* list of HSTS files set by ++ curl_easy_setopt(HSTS) calls */ + curl_hstsread_callback hsts_read; + void *hsts_read_userp; + curl_hstswrite_callback hsts_write; +-- +2.34.1 + diff --git a/SPECS/cmake/CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch b/SPECS/cmake/CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch new file mode 100644 index 00000000000..96821694c21 --- /dev/null +++ b/SPECS/cmake/CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch @@ -0,0 +1,43 @@ +From ca02a77f05bd5cef20618c8f741aa48b7be0a648 Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Tue, 27 Dec 2022 11:50:23 +0100 +Subject: [PATCH 3/5] hsts: handle adding the same host name again + +It will then use the largest expire time of the two entries. +--- + lib/hsts.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/Utilities/cmcurl/lib/hsts.c b/Utilities/cmcurl/lib/hsts.c +index 339237be1..8d6723ee5 100644 +--- a/Utilities/cmcurl/lib/hsts.c ++++ b/Utilities/cmcurl/lib/hsts.c +@@ -426,14 +426,23 @@ static CURLcode hsts_add(struct hsts *h, char *line) + host, date); + if(2 == rc) { + time_t expires = Curl_getdate_capped(date); +- CURLcode result; ++ CURLcode result = CURLE_OK; + char *p = host; + bool subdomain = FALSE; ++ struct stsentry *e; + if(p[0] == '.') { + p++; + subdomain = TRUE; + } +- result = hsts_create(h, p, subdomain, expires); ++ /* only add it if not already present */ ++ e = Curl_hsts(h, p, subdomain); ++ if(!e) ++ result = hsts_create(h, p, subdomain, expires); ++ else { ++ /* the same host name, use the largest expire time */ ++ if(expires > e->expires) ++ e->expires = expires; ++ } + if(result) + return result; + } +-- +2.34.1 + diff --git a/SPECS/cmake/cmake.spec b/SPECS/cmake/cmake.spec index 3acd3155750..94e80c8b49c 100644 --- a/SPECS/cmake/cmake.spec +++ b/SPECS/cmake/cmake.spec @@ -2,7 +2,7 @@ Summary: Cmake Name: cmake Version: 3.21.4 -Release: 4%{?dist} +Release: 5%{?dist} License: BSD AND LGPLv2+ Vendor: Microsoft Corporation Distribution: Mariner @@ -13,6 +13,8 @@ Source1: macros.cmake Patch0: disableUnstableUT.patch # We could use --system-curl instead of patching, but unfortuately curl isn't currently available in time during the toolchain build. Patch1: CVE-2022-43551.patch +Patch2: CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch +Patch3: CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch BuildRequires: bzip2 BuildRequires: bzip2-devel @@ -81,6 +83,9 @@ bin/ctest --force-new-ctest-process --rerun-failed --output-on-failure %{_prefix}/doc/%{name}-*/* %changelog +* Tue Jun 06 2023 Dan Streetman - 3.21.4.5 +- Patch vendored curl for CVE-2023-23914 + * Mon Apr 03 2023 Bala - 3.21.4.4 - Add build directory to %cmake macro to align with %cmake_build diff --git a/toolkit/resources/manifests/package/toolchain_aarch64.txt b/toolkit/resources/manifests/package/toolchain_aarch64.txt index d1ae642af2f..f84264ce4f8 100644 --- a/toolkit/resources/manifests/package/toolchain_aarch64.txt +++ b/toolkit/resources/manifests/package/toolchain_aarch64.txt @@ -30,8 +30,8 @@ check-debuginfo-0.15.2-1.cm2.aarch64.rpm chkconfig-1.20-3.cm2.aarch64.rpm chkconfig-debuginfo-1.20-3.cm2.aarch64.rpm chkconfig-lang-1.20-3.cm2.aarch64.rpm -cmake-3.21.4-4.cm2.aarch64.rpm -cmake-debuginfo-3.21.4-4.cm2.aarch64.rpm +cmake-3.21.4-5.cm2.aarch64.rpm +cmake-debuginfo-3.21.4-5.cm2.aarch64.rpm coreutils-8.32-6.cm2.aarch64.rpm coreutils-debuginfo-8.32-6.cm2.aarch64.rpm coreutils-lang-8.32-6.cm2.aarch64.rpm diff --git a/toolkit/resources/manifests/package/toolchain_x86_64.txt b/toolkit/resources/manifests/package/toolchain_x86_64.txt index a1611f233a9..2a6ff6c863c 100644 --- a/toolkit/resources/manifests/package/toolchain_x86_64.txt +++ b/toolkit/resources/manifests/package/toolchain_x86_64.txt @@ -30,8 +30,8 @@ check-debuginfo-0.15.2-1.cm2.x86_64.rpm chkconfig-1.20-3.cm2.x86_64.rpm chkconfig-debuginfo-1.20-3.cm2.x86_64.rpm chkconfig-lang-1.20-3.cm2.x86_64.rpm -cmake-3.21.4-4.cm2.x86_64.rpm -cmake-debuginfo-3.21.4-4.cm2.x86_64.rpm +cmake-3.21.4-5.cm2.x86_64.rpm +cmake-debuginfo-3.21.4-5.cm2.x86_64.rpm coreutils-8.32-6.cm2.x86_64.rpm coreutils-debuginfo-8.32-6.cm2.x86_64.rpm coreutils-lang-8.32-6.cm2.x86_64.rpm From 3de32160c9b50e3b52bf13d2b2250885fe6c3eba Mon Sep 17 00:00:00 2001 From: Daniel McIlvaney Date: Wed, 7 Jun 2023 09:36:09 -0700 Subject: [PATCH 08/14] Resolve CVE-2023-0464 in edk2's bundled openssl (#5638) --- SPECS/edk2/CVE-2023-0464.patch | 221 +++++++++++++++++++++++++++++++++ SPECS/edk2/edk2.spec | 14 ++- 2 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 SPECS/edk2/CVE-2023-0464.patch diff --git a/SPECS/edk2/CVE-2023-0464.patch b/SPECS/edk2/CVE-2023-0464.patch new file mode 100644 index 00000000000..33249c245fe --- /dev/null +++ b/SPECS/edk2/CVE-2023-0464.patch @@ -0,0 +1,221 @@ +From 879f7080d7e141f415c79eaa3a8ac4a3dad0348b Mon Sep 17 00:00:00 2001 +From: Pauli +Date: Wed, 8 Mar 2023 15:28:20 +1100 +Subject: [PATCH] x509: excessive resource use verifying policy constraints + +A security vulnerability has been identified in all supported versions +of OpenSSL related to the verification of X.509 certificate chains +that include policy constraints. Attackers may be able to exploit this +vulnerability by creating a malicious certificate chain that triggers +exponential use of computational resources, leading to a denial-of-service +(DoS) attack on affected systems. + +Fixes CVE-2023-0464 + +Reviewed-by: Tomas Mraz +Reviewed-by: Shane Lontis +(Merged from https://github.com/openssl/openssl/pull/20569) +--- + crypto/x509v3/pcy_local.h | 8 +++++++- + crypto/x509v3/pcy_node.c | 12 +++++++++--- + crypto/x509v3/pcy_tree.c | 37 +++++++++++++++++++++++++++---------- + 3 files changed, 43 insertions(+), 14 deletions(-) + +diff --git a/crypto/x509v3/pcy_local.h b/crypto/x509v3/pcy_local.h +index 5daf78de45..344aa06765 100644 +--- a/crypto/x509v3/pcy_local.h ++++ b/crypto/x509v3/pcy_local.h +@@ -111,6 +111,11 @@ struct X509_POLICY_LEVEL_st { + }; + + struct X509_POLICY_TREE_st { ++ /* The number of nodes in the tree */ ++ size_t node_count; ++ /* The maximum number of nodes in the tree */ ++ size_t node_maximum; ++ + /* This is the tree 'level' data */ + X509_POLICY_LEVEL *levels; + int nlevel; +@@ -159,7 +164,8 @@ X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk, + X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, + X509_POLICY_DATA *data, + X509_POLICY_NODE *parent, +- X509_POLICY_TREE *tree); ++ X509_POLICY_TREE *tree, ++ int extra_data); + void policy_node_free(X509_POLICY_NODE *node); + int policy_node_match(const X509_POLICY_LEVEL *lvl, + const X509_POLICY_NODE *node, const ASN1_OBJECT *oid); +diff --git a/crypto/x509v3/pcy_node.c b/crypto/x509v3/pcy_node.c +index e2d7b15322..d574fb9d66 100644 +--- a/crypto/x509v3/pcy_node.c ++++ b/crypto/x509v3/pcy_node.c +@@ -59,10 +59,15 @@ X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level, + X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, + X509_POLICY_DATA *data, + X509_POLICY_NODE *parent, +- X509_POLICY_TREE *tree) ++ X509_POLICY_TREE *tree, ++ int extra_data) + { + X509_POLICY_NODE *node; + ++ /* Verify that the tree isn't too large. This mitigates CVE-2023-0464 */ ++ if (tree->node_maximum > 0 && tree->node_count >= tree->node_maximum) ++ return NULL; ++ + node = OPENSSL_zalloc(sizeof(*node)); + if (node == NULL) { + X509V3err(X509V3_F_LEVEL_ADD_NODE, ERR_R_MALLOC_FAILURE); +@@ -70,7 +75,7 @@ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, + } + node->data = data; + node->parent = parent; +- if (level) { ++ if (level != NULL) { + if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) { + if (level->anyPolicy) + goto node_error; +@@ -90,7 +95,7 @@ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, + } + } + +- if (tree) { ++ if (extra_data) { + if (tree->extra_data == NULL) + tree->extra_data = sk_X509_POLICY_DATA_new_null(); + if (tree->extra_data == NULL){ +@@ -103,6 +108,7 @@ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, + } + } + ++ tree->node_count++; + if (parent) + parent->nchild++; + +diff --git a/crypto/x509v3/pcy_tree.c b/crypto/x509v3/pcy_tree.c +index 6e8322cbc5..6c7fd35405 100644 +--- a/crypto/x509v3/pcy_tree.c ++++ b/crypto/x509v3/pcy_tree.c +@@ -13,6 +13,18 @@ + + #include "pcy_local.h" + ++/* ++ * If the maximum number of nodes in the policy tree isn't defined, set it to ++ * a generous default of 1000 nodes. ++ * ++ * Defining this to be zero means unlimited policy tree growth which opens the ++ * door on CVE-2023-0464. ++ */ ++ ++#ifndef OPENSSL_POLICY_TREE_NODES_MAX ++# define OPENSSL_POLICY_TREE_NODES_MAX 1000 ++#endif ++ + /* + * Enable this to print out the complete policy tree at various point during + * evaluation. +@@ -168,6 +180,9 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, + return X509_PCY_TREE_INTERNAL; + } + ++ /* Limit the growth of the tree to mitigate CVE-2023-0464 */ ++ tree->node_maximum = OPENSSL_POLICY_TREE_NODES_MAX; ++ + /* + * http://tools.ietf.org/html/rfc5280#section-6.1.2, figure 3. + * +@@ -184,7 +199,7 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, + level = tree->levels; + if ((data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0)) == NULL) + goto bad_tree; +- if (level_add_node(level, data, NULL, tree) == NULL) { ++ if (level_add_node(level, data, NULL, tree, 1) == NULL) { + policy_data_free(data); + goto bad_tree; + } +@@ -243,7 +258,8 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, + * Return value: 1 on success, 0 otherwise + */ + static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, +- X509_POLICY_DATA *data) ++ X509_POLICY_DATA *data, ++ X509_POLICY_TREE *tree) + { + X509_POLICY_LEVEL *last = curr - 1; + int i, matched = 0; +@@ -253,13 +269,13 @@ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, + X509_POLICY_NODE *node = sk_X509_POLICY_NODE_value(last->nodes, i); + + if (policy_node_match(last, node, data->valid_policy)) { +- if (level_add_node(curr, data, node, NULL) == NULL) ++ if (level_add_node(curr, data, node, tree, 0) == NULL) + return 0; + matched = 1; + } + } + if (!matched && last->anyPolicy) { +- if (level_add_node(curr, data, last->anyPolicy, NULL) == NULL) ++ if (level_add_node(curr, data, last->anyPolicy, tree, 0) == NULL) + return 0; + } + return 1; +@@ -272,7 +288,8 @@ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, + * Return value: 1 on success, 0 otherwise. + */ + static int tree_link_nodes(X509_POLICY_LEVEL *curr, +- const X509_POLICY_CACHE *cache) ++ const X509_POLICY_CACHE *cache, ++ X509_POLICY_TREE *tree) + { + int i; + +@@ -280,7 +297,7 @@ static int tree_link_nodes(X509_POLICY_LEVEL *curr, + X509_POLICY_DATA *data = sk_X509_POLICY_DATA_value(cache->data, i); + + /* Look for matching nodes in previous level */ +- if (!tree_link_matching_nodes(curr, data)) ++ if (!tree_link_matching_nodes(curr, data, tree)) + return 0; + } + return 1; +@@ -311,7 +328,7 @@ static int tree_add_unmatched(X509_POLICY_LEVEL *curr, + /* Curr may not have anyPolicy */ + data->qualifier_set = cache->anyPolicy->qualifier_set; + data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; +- if (level_add_node(curr, data, node, tree) == NULL) { ++ if (level_add_node(curr, data, node, tree, 1) == NULL) { + policy_data_free(data); + return 0; + } +@@ -373,7 +390,7 @@ static int tree_link_any(X509_POLICY_LEVEL *curr, + } + /* Finally add link to anyPolicy */ + if (last->anyPolicy && +- level_add_node(curr, cache->anyPolicy, last->anyPolicy, NULL) == NULL) ++ level_add_node(curr, cache->anyPolicy, last->anyPolicy, tree, 0) == NULL) + return 0; + return 1; + } +@@ -555,7 +572,7 @@ static int tree_calculate_user_set(X509_POLICY_TREE *tree, + extra->qualifier_set = anyPolicy->data->qualifier_set; + extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS + | POLICY_DATA_FLAG_EXTRA_NODE; +- node = level_add_node(NULL, extra, anyPolicy->parent, tree); ++ node = level_add_node(NULL, extra, anyPolicy->parent, tree, 1); + } + if (!tree->user_policies) { + tree->user_policies = sk_X509_POLICY_NODE_new_null(); +@@ -582,7 +599,7 @@ static int tree_evaluate(X509_POLICY_TREE *tree) + + for (i = 1; i < tree->nlevel; i++, curr++) { + cache = policy_cache_set(curr->cert); +- if (!tree_link_nodes(curr, cache)) ++ if (!tree_link_nodes(curr, cache, tree)) + return X509_PCY_TREE_INTERNAL; + + if (!(curr->flags & X509_V_FLAG_INHIBIT_ANY) +-- +2.34.1 diff --git a/SPECS/edk2/edk2.spec b/SPECS/edk2/edk2.spec index d6467c27c21..d1d15ab6511 100644 --- a/SPECS/edk2/edk2.spec +++ b/SPECS/edk2/edk2.spec @@ -45,7 +45,7 @@ ExclusiveArch: x86_64 Name: edk2 Version: %{GITDATE}git%{GITCOMMIT} -Release: 32%{?dist} +Release: 33%{?dist} Summary: UEFI firmware for 64-bit virtual machines License: BSD-2-Clause-Patent and OpenSSL and MIT URL: http://www.tianocore.org @@ -109,6 +109,7 @@ Patch0015: 0015-SecurityPkg-add-TIS-sanity-check-tpm12.patch Patch0016: 0016-OvmfPkg-Clarify-invariants-for-NestedInterruptTplLib.patch Patch0017: 0017-OvmfPkg-Relax-assertion-that-interrupts-do-not-occur.patch +Patch1000: CVE-2023-0464.patch # python3-devel and libuuid-devel are required for building tools. # python3-devel is also needed for varstore template generation and @@ -284,10 +285,16 @@ git config core.whitespace cr-at-eol git config am.keepcr true # -T is passed to %%setup to not re-extract the archive # -D is passed to %%setup to not delete the existing archive dir -%autosetup -T -D -n edk2-%{GITCOMMIT} -S git_am +# -N to disable automatic patching +%autosetup -T -D -n edk2-%{GITCOMMIT} -S git_am -N +# -M Apply patches up to 999 +%autopatch -M 999 cp -a -- %{SOURCE1} . tar -C CryptoPkg/Library/OpensslLib -a -f %{SOURCE2} -x +# Need to patch CVE-2023-0464 in the bundled openssl +(cd CryptoPkg/Library/OpensslLib/openssl && patch -p1 ) < %{PATCH1000} + # extract softfloat into place tar -xf %{SOURCE3} --strip-components=1 --directory ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/ tar -xf %{SOURCE4} --strip-components=1 --wildcards "*/Drivers" "*/Features" "*/Platform" "*/Silicon" @@ -678,6 +685,9 @@ done %changelog +* Tue Jun 6 2023 Daniel McIlvaney - 20230301gitf80f052277c8-33 +- Patch CVE-2023-0464 in bundled OpenSSL. + * Fri May 26 2023 Vince Perri - 20230301gitf80f052277c8-32 - License verified. - Disable aarch64 and riscv64 builds. From 25758473249aa16edafab883f79cdb5a315ef5e7 Mon Sep 17 00:00:00 2001 From: Trung Date: Wed, 7 Jun 2023 11:56:24 -0700 Subject: [PATCH 09/14] Add flag to disable PMC repository (#5607) --- toolkit/Makefile | 1 + toolkit/docs/building/building.md | 14 +++++++++++ toolkit/scripts/imggen.mk | 4 ++++ toolkit/scripts/pkggen.mk | 4 ++++ .../tools/graphpkgfetcher/graphpkgfetcher.go | 3 ++- .../tools/imagepkgfetcher/imagepkgfetcher.go | 3 ++- .../packagerepo/repocloner/repocloner.go | 2 +- .../repocloner/rpmrepocloner/rpmrepocloner.go | 23 ++++++++++++++----- 8 files changed, 45 insertions(+), 9 deletions(-) diff --git a/toolkit/Makefile b/toolkit/Makefile index b19d135e2cc..bd35784c119 100644 --- a/toolkit/Makefile +++ b/toolkit/Makefile @@ -37,6 +37,7 @@ ALLOW_SRPM_DOWNLOAD_FAIL ?= n RUN_CHECK ?= n USE_PREVIEW_REPO ?= n DISABLE_UPSTREAM_REPOS ?= n +DISABLE_DEFAULT_REPOS ?= n TOOLCHAIN_CONTAINER_ARCHIVE ?= TOOLCHAIN_ARCHIVE ?= TOOLCHAIN_SOURCES_ARCHIVE ?= diff --git a/toolkit/docs/building/building.md b/toolkit/docs/building/building.md index 4d1994a7a4d..c4eb6615530 100644 --- a/toolkit/docs/building/building.md +++ b/toolkit/docs/building/building.md @@ -47,6 +47,9 @@ - [`DISABLE_UPSTREAM_REPOS=...`](#disable_upstream_repos) - [`DISABLE_UPSTREAM_REPOS=`**`n`** *(default)*](#disable_upstream_reposn-default) - [`DISABLE_UPSTREAM_REPOS=`**`y`**](#disable_upstream_reposy) + - [`DISABLE_DEFAULT_REPOS=...`](#disable_default_repos) + - [`DISABLE_DEFAULT_REPOS=`**`n`** *(default)*](#disable_default_reposn-default) + - [`DISABLE_DEFAULT_REPOS=`**`y`**](#disable_default_reposy) - [`REBUILD_PACKAGES=...`](#rebuild_packages) - [`REBUILD_PACKAGES=`**`y`** *(default)*](#rebuild_packagesy-default) - [`REBUILD_PACKAGES=`**`n`**](#rebuild_packagesn) @@ -549,6 +552,16 @@ If that is not desired all remote sources can be disabled by clearing the follow > Only pull missing packages from local repositories. This does not affect hydrating the toolchain from `$(PACKAGE_URL_LIST)`. +#### `DISABLE_DEFAULT_REPOS=...` + +##### `DISABLE_DEFAULT_REPOS=`**`n`** *(default)* + +> Pull packages from all set repositories, including PMC repositories. + +##### `DISABLE_DEFAULT_REPOS=`**`y`** + +> Only pull missing packages from local and repositories specified in `$(REPO_LIST)` files. + #### `REBUILD_PACKAGES=...` ##### `REBUILD_PACKAGES=`**`y`** *(default)* @@ -748,6 +761,7 @@ To reproduce an ISO build, run the same make invocation as before, but set: | DOWNLOAD_SRPMS | n | Pack SRPMs from local SPECs or download published ones? | USE_PREVIEW_REPO | n | Pull missing packages from the upstream preview repository in addition to the base repository? | DISABLE_UPSTREAM_REPOS | n | Only pull missing packages from local repositories? This does not affect hydrating the toolchain from `$(PACKAGE_URL_LIST)`. +| DISABLE_DEFAULT_REPOS | n | Disable pulling packages from PMC. Use this option with `REPO_LIST` if you want to use your own repository exclusively. --- diff --git a/toolkit/scripts/imggen.mk b/toolkit/scripts/imggen.mk index 52f581e7413..c46bbef650b 100644 --- a/toolkit/scripts/imggen.mk +++ b/toolkit/scripts/imggen.mk @@ -93,6 +93,10 @@ ifeq ($(DISABLE_UPSTREAM_REPOS),y) imagepkgfetcher_extra_flags += --disable-upstream-repos endif +ifeq ($(DISABLE_DEFAULT_REPOS),y) +imagepkgfetcher_extra_flags += --disable-default-repos +endif + ifeq ($(USE_PREVIEW_REPO),y) imagepkgfetcher_extra_flags += --use-preview-repo endif diff --git a/toolkit/scripts/pkggen.mk b/toolkit/scripts/pkggen.mk index d5c3da8e92e..e99d41fecf7 100644 --- a/toolkit/scripts/pkggen.mk +++ b/toolkit/scripts/pkggen.mk @@ -118,6 +118,10 @@ ifeq ($(DISABLE_UPSTREAM_REPOS),y) graphpkgfetcher_extra_flags += --disable-upstream-repos endif +ifeq ($(DISABLE_DEFAULT_REPOS),y) +graphpkgfetcher_extra_flags += --disable-default-repos +endif + ifeq ($(USE_PREVIEW_REPO),y) graphpkgfetcher_extra_flags += --use-preview-repo endif diff --git a/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go b/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go index ccdafe0d5ea..1908dee2851 100644 --- a/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go +++ b/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go @@ -37,6 +37,7 @@ var ( workertar = app.Flag("tdnf-worker", "Full path to worker_chroot.tar.gz").Required().ExistingFile() repoFiles = app.Flag("repo-file", "Full path to a repo file").Required().ExistingFiles() usePreviewRepo = app.Flag("use-preview-repo", "Pull packages from the upstream preview repo").Bool() + disableDefaultRepos = app.Flag("disable-default-repos", "Disable pulling packages from PMC repos").Bool() disableUpstreamRepos = app.Flag("disable-upstream-repos", "Disables pulling packages from upstream repos").Bool() toolchainManifest = app.Flag("toolchain-manifest", "Path to a list of RPMs which are created by the toolchain. Will mark RPMs from this list as prebuilt.").ExistingFile() @@ -110,7 +111,7 @@ func resolveGraphNodes(dependencyGraph *pkggraph.PkgGraph, inputSummaryFile, out timestamp.StartEvent("initialize and configure cloner", nil) // Create the worker environment cloner := rpmrepocloner.New() - err = cloner.Initialize(*outDir, *tmpDir, *workertar, *existingRpmDir, *existingToolchainRpmDir, *usePreviewRepo, *repoFiles) + err = cloner.Initialize(*outDir, *tmpDir, *workertar, *existingRpmDir, *existingToolchainRpmDir, *usePreviewRepo, *disableDefaultRepos, *repoFiles) if err != nil { logger.Log.Errorf("Failed to initialize RPM repo cloner. Error: %s", err) return diff --git a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go index 9860e3f3216..b363fcd0dfc 100644 --- a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go +++ b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go @@ -35,6 +35,7 @@ var ( workertar = app.Flag("tdnf-worker", "Full path to worker_chroot.tar.gz").Required().ExistingFile() repoFiles = app.Flag("repo-file", "Full path to a repo file").Required().ExistingFiles() usePreviewRepo = app.Flag("use-preview-repo", "Pull packages from the upstream preview repo").Bool() + disableDefaultRepos = app.Flag("disable-default-repos", "Disable pulling packages from PMC repos").Bool() disableUpstreamRepos = app.Flag("disable-upstream-repos", "Disables pulling packages from upstream repos").Bool() tlsClientCert = app.Flag("tls-cert", "TLS client certificate to use when downloading files.").String() @@ -65,7 +66,7 @@ func main() { timestamp.StartEvent("initialize and configure cloner", nil) cloner := rpmrepocloner.New() - err := cloner.Initialize(*outDir, *tmpDir, *workertar, *existingRpmDir, *existingToolchainRpmDir, *usePreviewRepo, *repoFiles) + err := cloner.Initialize(*outDir, *tmpDir, *workertar, *existingRpmDir, *existingToolchainRpmDir, *usePreviewRepo, *disableDefaultRepos, *repoFiles) if err != nil { logger.Log.Panicf("Failed to initialize RPM repo cloner. Error: %s", err) } diff --git a/toolkit/tools/internal/packagerepo/repocloner/repocloner.go b/toolkit/tools/internal/packagerepo/repocloner/repocloner.go index cdb345c933c..36778c5d550 100644 --- a/toolkit/tools/internal/packagerepo/repocloner/repocloner.go +++ b/toolkit/tools/internal/packagerepo/repocloner/repocloner.go @@ -22,7 +22,7 @@ type RepoPackage struct { // It is capable of generate a local repository consisting of a set of request packages // and their dependencies. type RepoCloner interface { - Initialize(destinationDir, tmpDir, workerTar, existingRpmsDir, toolchainRpmsDir string, usePreviewRepo bool, repoDefinitions []string) error + Initialize(destinationDir, tmpDir, workerTar, existingRpmsDir, toolchainRpmsDir string, usePreviewRepo, disableDefaultRepos bool, repoDefinitions []string) error AddNetworkFiles(tlsClientCert, tlsClientKey string) error Clone(cloneDeps bool, packagesToClone ...*pkgjson.PackageVer) (prebuiltPackage bool, err error) WhatProvides(pkgVer *pkgjson.PackageVer) (packageNames []string, err error) diff --git a/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go b/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go index e3afcf42b86..e6209ff829f 100644 --- a/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go +++ b/toolkit/tools/internal/packagerepo/repocloner/rpmrepocloner/rpmrepocloner.go @@ -87,7 +87,7 @@ func New() *RpmRepoCloner { // - prebuiltRpmsDir is the directory with toolchain RPMs // - usePreviewRepo if set, the upstream preview repository will be used. // - repoDefinitions is a list of repo files to use when cloning RPMs -func (r *RpmRepoCloner) Initialize(destinationDir, tmpDir, workerTar, existingRpmsDir, toolchainRpmsDir string, usePreviewRepo bool, repoDefinitions []string) (err error) { +func (r *RpmRepoCloner) Initialize(destinationDir, tmpDir, workerTar, existingRpmsDir, toolchainRpmsDir string, usePreviewRepo, disableDefaultRepos bool, repoDefinitions []string) (err error) { const ( isExistingDir = false @@ -109,6 +109,10 @@ func (r *RpmRepoCloner) Initialize(destinationDir, tmpDir, workerTar, existingRp logger.Log.Info("Enabling preview repo") } + if disableDefaultRepos { + logger.Log.Info("Disabling default upstream PMC repositories") + } + // Ensure that if initialization fails, the chroot is closed defer func() { if err != nil { @@ -176,7 +180,7 @@ func (r *RpmRepoCloner) Initialize(destinationDir, tmpDir, workerTar, existingRp } logger.Log.Info("Initializing repository configurations") - err = r.initializeRepoDefinitions(repoDefinitions) + err = r.initializeRepoDefinitions(disableDefaultRepos, repoDefinitions) if err != nil { return } @@ -206,7 +210,7 @@ func (r *RpmRepoCloner) AddNetworkFiles(tlsClientCert, tlsClientKey string) (err // initializeRepoDefinitions will configure the chroot's repo files to match those // provided by the caller. -func (r *RpmRepoCloner) initializeRepoDefinitions(repoDefinitions []string) (err error) { +func (r *RpmRepoCloner) initializeRepoDefinitions(disableDefaultRepos bool, repoDefinitions []string) (err error) { // ============== TDNF SPECIFIC IMPLEMENTATION ============== // Unlike some other package managers, TDNF has no notion of repository priority. // It reads the repo files using `readdir`, which should be assumed to be random ordering. @@ -254,10 +258,17 @@ func (r *RpmRepoCloner) initializeRepoDefinitions(repoDefinitions []string) (err // Add each previously existing repofile to the end of the new file, then delete the original. // We want to try our custom mounted repos before reaching out to the upstream servers. + // By default, chroot ships with PMC repositories specified in mariner-repos rpm. + // If `disableDefaultRepos` flag is turned on, we only remove these existing files from the + // chroot repo directory. tdnf will not reach out to the default PMC repositories for lookups. for _, originalRepoFilePath := range existingRepoFiles { - err = appendRepoFile(originalRepoFilePath, dstFile) - if err != nil { - return + if !disableDefaultRepos { + err = appendRepoFile(originalRepoFilePath, dstFile) + if err != nil { + return + } + } else { + logger.Log.Debugf("Disabling repositories listed in %s", originalRepoFilePath) } err = os.Remove(originalRepoFilePath) if err != nil { From 7bc26b1e2be4a3cb14c88840801f4c75fc981964 Mon Sep 17 00:00:00 2001 From: Sumynwa <80809794+Sumynwa@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:59:01 +0530 Subject: [PATCH 10/14] Patch cmake vendored curl for CVE-2023-28322 (#5648) * cmake: Patch vendored curl for CVE-2023-28322 * cmake: update toolchain manifest files --- ...lib-unify-the-upload-method-handling.patch | 417 ++++++++++++++++++ SPECS/cmake/cmake.spec | 13 +- .../manifests/package/toolchain_aarch64.txt | 4 +- .../manifests/package/toolchain_x86_64.txt | 4 +- 4 files changed, 428 insertions(+), 10 deletions(-) create mode 100644 SPECS/cmake/CVE-2023-28322-lib-unify-the-upload-method-handling.patch diff --git a/SPECS/cmake/CVE-2023-28322-lib-unify-the-upload-method-handling.patch b/SPECS/cmake/CVE-2023-28322-lib-unify-the-upload-method-handling.patch new file mode 100644 index 00000000000..b16fdcc58f8 --- /dev/null +++ b/SPECS/cmake/CVE-2023-28322-lib-unify-the-upload-method-handling.patch @@ -0,0 +1,417 @@ +From 7815647d6582c0a4900be2e1de6c5e61272c496b Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Tue, 25 Apr 2023 08:28:01 +0200 +Subject: [PATCH] lib: unify the upload/method handling + +By making sure we set state.upload based on the set.method value and not +independently as set.upload, we reduce confusion and mixup risks, both +internally and externally. + +Closes #11017 +--- + lib/curl_rtmp.c | 4 ++-- + lib/file.c | 4 ++-- + lib/ftp.c | 8 ++++---- + lib/http.c | 4 ++-- + lib/imap.c | 6 +++--- + lib/rtsp.c | 4 ++-- + lib/setopt.c | 5 ++--- + lib/smb.c | 4 ++-- + lib/smtp.c | 4 ++-- + lib/tftp.c | 8 ++++---- + lib/transfer.c | 4 ++-- + lib/urldata.h | 2 +- + lib/vssh/libssh.c | 6 +++--- + lib/vssh/libssh2.c | 6 +++--- + lib/vssh/wolfssh.c | 2 +- + 15 files changed, 35 insertions(+), 36 deletions(-) + +diff --git a/Utilities/cmcurl/lib/curl_rtmp.c b/Utilities/cmcurl/lib/curl_rtmp.c +index 2fa02679..c42c07e3 100644 +--- a/Utilities/cmcurl/lib/curl_rtmp.c ++++ b/Utilities/cmcurl/lib/curl_rtmp.c +@@ -229,7 +229,7 @@ static CURLcode rtmp_connect(struct Curl_easy *data, bool *done) + /* We have to know if it's a write before we send the + * connect request packet + */ +- if(data->set.upload) ++ if(data->state.upload) + r->Link.protocol |= RTMP_FEATURE_WRITE; + + /* For plain streams, use the buffer toggle trick to keep data flowing */ +@@ -261,7 +261,7 @@ static CURLcode rtmp_do(struct Curl_easy *data, bool *done) + if(!RTMP_ConnectStream(r, 0)) + return CURLE_FAILED_INIT; + +- if(data->set.upload) { ++ if(data->state.upload) { + Curl_pgrsSetUploadSize(data, data->state.infilesize); + Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET); + } +diff --git a/Utilities/cmcurl/lib/file.c b/Utilities/cmcurl/lib/file.c +index 0420db34..f15fe717 100644 +--- a/Utilities/cmcurl/lib/file.c ++++ b/Utilities/cmcurl/lib/file.c +@@ -200,7 +200,7 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done) + file->freepath = real_path; /* free this when done */ + + file->fd = fd; +- if(!data->set.upload && (fd == -1)) { ++ if(!data->state.upload && (fd == -1)) { + failf(data, "Couldn't open file %s", data->state.up.path); + file_done(data, CURLE_FILE_COULDNT_READ_FILE, FALSE); + return CURLE_FILE_COULDNT_READ_FILE; +@@ -382,7 +382,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) + + Curl_pgrsStartNow(data); + +- if(data->set.upload) ++ if(data->state.upload) + return file_upload(data); + + file = data->req.p.file; +diff --git a/Utilities/cmcurl/lib/ftp.c b/Utilities/cmcurl/lib/ftp.c +index 425b0afe..7b7f630c 100644 +--- a/Utilities/cmcurl/lib/ftp.c ++++ b/Utilities/cmcurl/lib/ftp.c +@@ -1381,7 +1381,7 @@ static CURLcode ftp_state_prepare_transfer(struct Curl_easy *data) + data->set.str[STRING_CUSTOMREQUEST]? + data->set.str[STRING_CUSTOMREQUEST]: + (data->state.list_only?"NLST":"LIST")); +- else if(data->set.upload) ++ else if(data->state.upload) + result = Curl_pp_sendf(data, &ftpc->pp, "PRET STOR %s", + conn->proto.ftpc.file); + else +@@ -3365,7 +3365,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, + /* the response code from the transfer showed an error already so no + use checking further */ + ; +- else if(data->set.upload) { ++ else if(data->state.upload) { + if((-1 != data->state.infilesize) && + (data->state.infilesize != data->req.writebytecount) && + !data->set.crlf && +@@ -3637,7 +3637,7 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep) + connected back to us */ + } + } +- else if(data->set.upload) { ++ else if(data->state.upload) { + result = ftp_nb_type(data, conn, data->state.prefer_ascii, + FTP_STOR_TYPE); + if(result) +@@ -4213,7 +4213,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) + ftpc->file = NULL; /* instead of point to a zero byte, + we make it a NULL pointer */ + +- if(data->set.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) { ++ if(data->state.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) { + /* We need a file name when uploading. Return error! */ + failf(data, "Uploading to a URL without a file name!"); + free(rawPath); +diff --git a/Utilities/cmcurl/lib/http.c b/Utilities/cmcurl/lib/http.c +index 5767e173..8b48bc71 100644 +--- a/Utilities/cmcurl/lib/http.c ++++ b/Utilities/cmcurl/lib/http.c +@@ -2028,7 +2028,7 @@ void Curl_http_method(struct Curl_easy *data, struct connectdata *conn, + Curl_HttpReq httpreq = data->state.httpreq; + const char *request; + if((conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_FTP)) && +- data->set.upload) ++ data->state.upload) + httpreq = HTTPREQ_PUT; + + /* Now set the 'request' pointer to the proper request string */ +@@ -2343,7 +2343,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn, + if((conn->handler->protocol & PROTO_FAMILY_HTTP) && + (((httpreq == HTTPREQ_POST_MIME || httpreq == HTTPREQ_POST_FORM) && + http->postsize < 0) || +- ((data->set.upload || httpreq == HTTPREQ_POST) && ++ ((data->state.upload || httpreq == HTTPREQ_POST) && + data->state.infilesize == -1))) { + if(conn->bits.authneg) + /* don't enable chunked during auth neg */ +diff --git a/Utilities/cmcurl/lib/imap.c b/Utilities/cmcurl/lib/imap.c +index d85bcc39..7595630e 100644 +--- a/Utilities/cmcurl/lib/imap.c ++++ b/Utilities/cmcurl/lib/imap.c +@@ -1491,11 +1491,11 @@ static CURLcode imap_done(struct Curl_easy *data, CURLcode status, + result = status; /* use the already set error code */ + } + else if(!data->set.connect_only && !imap->custom && +- (imap->uid || imap->mindex || data->set.upload || ++ (imap->uid || imap->mindex || data->state.upload || + data->set.mimepost.kind != MIMEKIND_NONE)) { + /* Handle responses after FETCH or APPEND transfer has finished */ + +- if(!data->set.upload && data->set.mimepost.kind == MIMEKIND_NONE) ++ if(!data->state.upload && data->set.mimepost.kind == MIMEKIND_NONE) + state(data, IMAP_FETCH_FINAL); + else { + /* End the APPEND command first by sending an empty line */ +@@ -1561,7 +1561,7 @@ static CURLcode imap_perform(struct Curl_easy *data, bool *connected, + selected = TRUE; + + /* Start the first command in the DO phase */ +- if(data->set.upload || data->set.mimepost.kind != MIMEKIND_NONE) ++ if(data->state.upload || data->set.mimepost.kind != MIMEKIND_NONE) + /* APPEND can be executed directly */ + result = imap_perform_append(data); + else if(imap->custom && (selected || !imap->mailbox)) +diff --git a/Utilities/cmcurl/lib/rtsp.c b/Utilities/cmcurl/lib/rtsp.c +index 007d5c50..574b01bf 100644 +--- a/Utilities/cmcurl/lib/rtsp.c ++++ b/Utilities/cmcurl/lib/rtsp.c +@@ -508,7 +508,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) + rtspreq == RTSPREQ_SET_PARAMETER || + rtspreq == RTSPREQ_GET_PARAMETER) { + +- if(data->set.upload) { ++ if(data->state.upload) { + putsize = data->state.infilesize; + data->state.httpreq = HTTPREQ_PUT; + +@@ -527,7 +527,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) + result = + Curl_dyn_addf(&req_buffer, + "Content-Length: %" CURL_FORMAT_CURL_OFF_T"\r\n", +- (data->set.upload ? putsize : postsize)); ++ (data->state.upload ? putsize : postsize)); + if(result) + return result; + } +diff --git a/Utilities/cmcurl/lib/setopt.c b/Utilities/cmcurl/lib/setopt.c +index fdfa8419..8f4e569d 100644 +--- a/Utilities/cmcurl/lib/setopt.c ++++ b/Utilities/cmcurl/lib/setopt.c +@@ -299,8 +299,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + * We want to sent data to the remote host. If this is HTTP, that equals + * using the PUT request. + */ +- data->set.upload = (0 != va_arg(param, long)) ? TRUE : FALSE; +- if(data->set.upload) { ++ arg = va_arg(param, long); ++ if(arg) { + /* If this is HTTP, PUT is what's needed to "upload" */ + data->set.method = HTTPREQ_PUT; + data->set.opt_no_body = FALSE; /* this is implied */ +@@ -877,7 +877,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + */ + if(va_arg(param, long)) { + data->set.method = HTTPREQ_GET; +- data->set.upload = FALSE; /* switch off upload */ + data->set.opt_no_body = FALSE; /* this is implied */ + } + break; +diff --git a/Utilities/cmcurl/lib/smb.c b/Utilities/cmcurl/lib/smb.c +index 39facb26..73a37be1 100644 +--- a/Utilities/cmcurl/lib/smb.c ++++ b/Utilities/cmcurl/lib/smb.c +@@ -536,7 +536,7 @@ static CURLcode smb_send_open(struct Curl_easy *data) + byte_count = strlen(req->path); + msg.name_length = smb_swap16((unsigned short)byte_count); + msg.share_access = smb_swap32(SMB_FILE_SHARE_ALL); +- if(data->set.upload) { ++ if(data->state.upload) { + msg.access = smb_swap32(SMB_GENERIC_READ | SMB_GENERIC_WRITE); + msg.create_disposition = smb_swap32(SMB_FILE_OVERWRITE_IF); + } +@@ -815,7 +815,7 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done) + smb_m = (const struct smb_nt_create_response*) msg; + req->fid = smb_swap16(smb_m->fid); + data->req.offset = 0; +- if(data->set.upload) { ++ if(data->state.upload) { + data->req.size = data->state.infilesize; + Curl_pgrsSetUploadSize(data, data->req.size); + next_state = SMB_UPLOAD; +diff --git a/Utilities/cmcurl/lib/smtp.c b/Utilities/cmcurl/lib/smtp.c +index feffc05b..e83778a1 100644 +--- a/Utilities/cmcurl/lib/smtp.c ++++ b/Utilities/cmcurl/lib/smtp.c +@@ -1386,7 +1386,7 @@ static CURLcode smtp_done(struct Curl_easy *data, CURLcode status, + result = status; /* use the already set error code */ + } + else if(!data->set.connect_only && data->set.mail_rcpt && +- (data->set.upload || data->set.mimepost.kind)) { ++ (data->state.upload || data->set.mimepost.kind)) { + /* Calculate the EOB taking into account any terminating CRLF from the + previous line of the email or the CRLF of the DATA command when there + is "no mail data". RFC-5321, sect. 4.1.1.4. +@@ -1479,7 +1479,7 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected, + smtp->eob = 2; + + /* Start the first command in the DO phase */ +- if((data->set.upload || data->set.mimepost.kind) && data->set.mail_rcpt) ++ if((data->state.upload || data->set.mimepost.kind) && data->set.mail_rcpt) + /* MAIL transfer */ + result = smtp_perform_mail(data); + else +diff --git a/Utilities/cmcurl/lib/tftp.c b/Utilities/cmcurl/lib/tftp.c +index 11150af3..aff9d5ac 100644 +--- a/Utilities/cmcurl/lib/tftp.c ++++ b/Utilities/cmcurl/lib/tftp.c +@@ -367,7 +367,7 @@ static CURLcode tftp_parse_option_ack(struct tftp_state_data *state, + + /* tsize should be ignored on upload: Who cares about the size of the + remote file? */ +- if(!data->set.upload) { ++ if(!data->state.upload) { + if(!tsize) { + failf(data, "invalid tsize -:%s:- value in OACK packet", value); + return CURLE_TFTP_ILLEGAL; +@@ -448,7 +448,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + return result; + } + +- if(data->set.upload) { ++ if(data->state.upload) { + /* If we are uploading, send an WRQ */ + setpacketevent(&state->spacket, TFTP_EVENT_WRQ); + state->data->req.upload_fromhere = +@@ -483,7 +483,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + if(!data->set.tftp_no_options) { + char buf[64]; + /* add tsize option */ +- if(data->set.upload && (data->state.infilesize != -1)) ++ if(data->state.upload && (data->state.infilesize != -1)) + msnprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T, + data->state.infilesize); + else +@@ -537,7 +537,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + break; + + case TFTP_EVENT_OACK: +- if(data->set.upload) { ++ if(data->state.upload) { + result = tftp_connect_for_tx(state, event); + } + else { +diff --git a/Utilities/cmcurl/lib/transfer.c b/Utilities/cmcurl/lib/transfer.c +index b07fe882..5beff9ff 100644 +--- a/Utilities/cmcurl/lib/transfer.c ++++ b/Utilities/cmcurl/lib/transfer.c +@@ -1384,6 +1384,7 @@ void Curl_init_CONNECT(struct Curl_easy *data) + { + data->state.fread_func = data->set.fread_func_set; + data->state.in = data->set.in_set; ++ data->state.upload = (data->state.httpreq == HTTPREQ_PUT); + } + + /* +@@ -1759,7 +1760,6 @@ CURLcode Curl_follow(struct Curl_easy *data, + data->state.httpreq != HTTPREQ_POST_MIME) || + !(data->set.keep_post & CURL_REDIR_POST_303))) { + data->state.httpreq = HTTPREQ_GET; +- data->set.upload = false; + infof(data, "Switch to %s\n", + data->set.opt_no_body?"HEAD":"GET"); + } +@@ -1797,7 +1797,7 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url) + + /* if we're talking upload, we can't do the checks below, unless the protocol + is HTTP as when uploading over HTTP we will still get a response */ +- if(data->set.upload && ++ if(data->state.upload && + !(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP))) + return CURLE_OK; + +diff --git a/Utilities/cmcurl/lib/urldata.h b/Utilities/cmcurl/lib/urldata.h +index 181a5728..56622066 100644 +--- a/Utilities/cmcurl/lib/urldata.h ++++ b/Utilities/cmcurl/lib/urldata.h +@@ -1470,6 +1470,7 @@ struct UrlState { + BIT(url_alloc); /* URL string is malloc()'ed */ + BIT(referer_alloc); /* referer string is malloc()ed */ + BIT(wildcard_resolve); /* Set to true if any resolve change is a wildcard */ ++ BIT(upload); /* upload request */ + }; + + /* +@@ -1812,7 +1813,6 @@ struct UserDefined { + BIT(http_auto_referer); /* set "correct" referer when following + location: */ + BIT(opt_no_body); /* as set with CURLOPT_NOBODY */ +- BIT(upload); /* upload request */ + BIT(verbose); /* output verbosity */ + BIT(krb); /* Kerberos connection requested */ + BIT(reuse_forbid); /* forbidden to be reused, close after use */ +diff --git a/Utilities/cmcurl/lib/vssh/libssh.c b/Utilities/cmcurl/lib/vssh/libssh.c +index d146d15f..f437e36e 100644 +--- a/Utilities/cmcurl/lib/vssh/libssh.c ++++ b/Utilities/cmcurl/lib/vssh/libssh.c +@@ -1199,7 +1199,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + } + + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(protop->path[strlen(protop->path)-1] == '/') +@@ -1812,7 +1812,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + /* Functions from the SCP subsystem cannot handle/return SSH_AGAIN */ + ssh_set_blocking(sshc->ssh_session, 1); + +- if(data->set.upload) { ++ if(data->state.upload) { + if(data->state.infilesize < 0) { + failf(data, "SCP requires a known file size for upload"); + sshc->actualcode = CURLE_UPLOAD_FAILED; +@@ -1917,7 +1917,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + break; + } + case SSH_SCP_DONE: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SCP_SEND_EOF); + else + state(data, SSH_SCP_CHANNEL_FREE); +diff --git a/Utilities/cmcurl/lib/vssh/libssh2.c b/Utilities/cmcurl/lib/vssh/libssh2.c +index 8a6345b9..7af40d91 100644 +--- a/Utilities/cmcurl/lib/vssh/libssh2.c ++++ b/Utilities/cmcurl/lib/vssh/libssh2.c +@@ -1840,7 +1840,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + } + + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(sshp->path[strlen(sshp->path)-1] == '/') +@@ -2512,7 +2512,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + break; + } + +- if(data->set.upload) { ++ if(data->state.upload) { + if(data->state.infilesize < 0) { + failf(data, "SCP requires a known file size for upload"); + sshc->actualcode = CURLE_UPLOAD_FAILED; +@@ -2652,7 +2652,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + break; + + case SSH_SCP_DONE: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SCP_SEND_EOF); + else + state(data, SSH_SCP_CHANNEL_FREE); +diff --git a/Utilities/cmcurl/lib/vssh/wolfssh.c b/Utilities/cmcurl/lib/vssh/wolfssh.c +index 9f3266a2..59cd9629 100644 +--- a/Utilities/cmcurl/lib/vssh/wolfssh.c ++++ b/Utilities/cmcurl/lib/vssh/wolfssh.c +@@ -553,7 +553,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) + } + break; + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/') +-- +2.25.1 + diff --git a/SPECS/cmake/cmake.spec b/SPECS/cmake/cmake.spec index 94e80c8b49c..1cbbd740b99 100644 --- a/SPECS/cmake/cmake.spec +++ b/SPECS/cmake/cmake.spec @@ -2,7 +2,7 @@ Summary: Cmake Name: cmake Version: 3.21.4 -Release: 5%{?dist} +Release: 6%{?dist} License: BSD AND LGPLv2+ Vendor: Microsoft Corporation Distribution: Mariner @@ -15,7 +15,7 @@ Patch0: disableUnstableUT.patch Patch1: CVE-2022-43551.patch Patch2: CVE-2023-23914-0001-share-add-sharing-of-HSTS-cache-among-handles.patch Patch3: CVE-2023-23914-0002-hsts-handle-adding-the-same-host-name-again.patch - +Patch4: CVE-2023-28322-lib-unify-the-upload-method-handling.patch BuildRequires: bzip2 BuildRequires: bzip2-devel BuildRequires: curl @@ -29,13 +29,11 @@ BuildRequires: xz BuildRequires: xz-devel BuildRequires: zlib BuildRequires: zlib-devel - Requires: bzip2 Requires: expat Requires: libarchive Requires: ncurses Requires: zlib - Provides: %{name}%{major_version} = %{version}-%{release} Provides: %{name}-filesystem = %{version}-%{release} Provides: %{name}-filesystem%{?_isa} = %{version}-%{release} @@ -83,10 +81,13 @@ bin/ctest --force-new-ctest-process --rerun-failed --output-on-failure %{_prefix}/doc/%{name}-*/* %changelog -* Tue Jun 06 2023 Dan Streetman - 3.21.4.5 +* Thu Jun 08 2023 Sumedh Sharma - 3.21.4-6 +- Patch vendored curl for CVE-2023-28322 + +* Tue Jun 06 2023 Dan Streetman - 3.21.4-5 - Patch vendored curl for CVE-2023-23914 -* Mon Apr 03 2023 Bala - 3.21.4.4 +* Mon Apr 03 2023 Bala - 3.21.4-4 - Add build directory to %cmake macro to align with %cmake_build * Mon Feb 06 2023 Daniel McIlvaney - 3.21.4-3 diff --git a/toolkit/resources/manifests/package/toolchain_aarch64.txt b/toolkit/resources/manifests/package/toolchain_aarch64.txt index f84264ce4f8..d8939c80e11 100644 --- a/toolkit/resources/manifests/package/toolchain_aarch64.txt +++ b/toolkit/resources/manifests/package/toolchain_aarch64.txt @@ -30,8 +30,8 @@ check-debuginfo-0.15.2-1.cm2.aarch64.rpm chkconfig-1.20-3.cm2.aarch64.rpm chkconfig-debuginfo-1.20-3.cm2.aarch64.rpm chkconfig-lang-1.20-3.cm2.aarch64.rpm -cmake-3.21.4-5.cm2.aarch64.rpm -cmake-debuginfo-3.21.4-5.cm2.aarch64.rpm +cmake-3.21.4-6.cm2.aarch64.rpm +cmake-debuginfo-3.21.4-6.cm2.aarch64.rpm coreutils-8.32-6.cm2.aarch64.rpm coreutils-debuginfo-8.32-6.cm2.aarch64.rpm coreutils-lang-8.32-6.cm2.aarch64.rpm diff --git a/toolkit/resources/manifests/package/toolchain_x86_64.txt b/toolkit/resources/manifests/package/toolchain_x86_64.txt index 2a6ff6c863c..dc501aa2ab7 100644 --- a/toolkit/resources/manifests/package/toolchain_x86_64.txt +++ b/toolkit/resources/manifests/package/toolchain_x86_64.txt @@ -30,8 +30,8 @@ check-debuginfo-0.15.2-1.cm2.x86_64.rpm chkconfig-1.20-3.cm2.x86_64.rpm chkconfig-debuginfo-1.20-3.cm2.x86_64.rpm chkconfig-lang-1.20-3.cm2.x86_64.rpm -cmake-3.21.4-5.cm2.x86_64.rpm -cmake-debuginfo-3.21.4-5.cm2.x86_64.rpm +cmake-3.21.4-6.cm2.x86_64.rpm +cmake-debuginfo-3.21.4-6.cm2.x86_64.rpm coreutils-8.32-6.cm2.x86_64.rpm coreutils-debuginfo-8.32-6.cm2.x86_64.rpm coreutils-lang-8.32-6.cm2.x86_64.rpm From 98cb27d6fbda56e8973d8fcc247848bdde4ad8c3 Mon Sep 17 00:00:00 2001 From: Olivia Crain Date: Thu, 8 Jun 2023 09:27:54 -0700 Subject: [PATCH 11/14] Fix strace tests by adding patch to account for newer kernel (#5646) --- SPECS/strace/strace.spec | 83 +++++++------- SPECS/strace/testfix-landlock-brackets.patch | 110 +++++++++++++++++++ 2 files changed, 154 insertions(+), 39 deletions(-) create mode 100644 SPECS/strace/testfix-landlock-brackets.patch diff --git a/SPECS/strace/strace.spec b/SPECS/strace/strace.spec index 80785f7fdd1..189ab6f3e44 100644 --- a/SPECS/strace/strace.spec +++ b/SPECS/strace/strace.spec @@ -1,14 +1,16 @@ +%global __requires_exclude ^%{_bindir}/perl$ Summary: Tracks system calls that are made by a running process Name: strace Version: 5.16 Release: 1%{?dist} -License: GPLv2+ AND LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.1-or-later Vendor: Microsoft Corporation Distribution: Mariner Group: Development/Debuggers URL: https://strace.io/ Source0: https://strace.io/files/%{version}/%{name}-%{version}.tar.xz -%global __requires_exclude ^%{_bindir}/perl$ +# Released upstream in v5.18 +Patch0: testfix-landlock-brackets.patch BuildRequires: libacl-devel BuildRequires: libaio-devel @@ -17,7 +19,7 @@ The strace program intercepts and displays the system calls made by a running pr all the arugments and return values from the system calls. This is useful in debugging a process. %prep -%setup -q +%autosetup -p1 %build %ifarch aarch64 @@ -29,15 +31,13 @@ all the arugments and return values from the system calls. This is useful in deb --prefix=%{_prefix} %endif - -make %{?_smp_mflags} +%make_build %install -[ %{buildroot} != "/"] && rm -rf %{buildroot}/* -make install DESTDIR=%{buildroot} +%make_install %check -make %{?_smp_mflags} -k check TIMEOUT_DURATION=1200 +%make_build -k check TIMEOUT_DURATION=1200 %files %defattr(-,root,root) @@ -46,52 +46,57 @@ make %{?_smp_mflags} -k check TIMEOUT_DURATION=1200 %{_mandir}/man1/* %changelog +* Wed Jun 07 2023 Olivia Crain - 5.16-2 +- Add upstream patch to fix landlock_create_ruleset-y test +- Modernize calls to make by using macros +- Use SPDX license expression in license tag + * Wed Mar 02 2022 Bala - 5.16-1 - Upgrade to latest version - Remove patches and fixes not necessary for newer version -* Thu Dec 16 2021 Pawel Winogrodzki - 5.1-4 -- Removing the explicit %%clean stage. -- License verified. +* Thu Dec 16 2021 Pawel Winogrodzki - 5.1-4 +- Removing the explicit %%clean stage. +- License verified. -* Wed Jan 06 2021 Andrew Phelps 5.1-3 -- Patch tests with expected results. Increase test timeout. +* Wed Jan 06 2021 Andrew Phelps - 5.1-3 +- Patch tests with expected results. Increase test timeout. -* Sat May 09 2020 Nick Samson 5.1-2 -- Added %%license line automatically +* Sat May 09 2020 Nick Samson - 5.1-2 +- Added %%license line automatically -* Wed Mar 18 2020 Henry Beberman 5.1-1 -- Update to 5.1. License fixed. +* Wed Mar 18 2020 Henry Beberman - 5.1-1 +- Update to 5.1. License fixed. -* Tue Sep 03 2019 Mateusz Malisz 4.25-2 -- Initial CBL-Mariner import from Photon (license: Apache2). +* Tue Sep 03 2019 Mateusz Malisz - 4.25-2 +- Initial CBL-Mariner import from Photon (license: Apache2). -* Tue Nov 13 2018 Srinidhi Rao 4.25-1 -- Updating to version 4.25 +* Tue Nov 13 2018 Srinidhi Rao - 4.25-1 +- Updating to version 4.25 -* Thu Oct 25 2018 Ajay Kaher 4.24-2 -- Fix 4.24 for aarch64 +* Thu Oct 25 2018 Ajay Kaher - 4.24-2 +- Fix 4.24 for aarch64 -* Fri Sep 21 2018 Srinidhi Rao 4.24-1 -- Updating to version 4.24 +* Fri Sep 21 2018 Srinidhi Rao - 4.24-1 +- Updating to version 4.24 -* Tue Nov 14 2017 Alexey Makhalov 4.16-3 -- Aarch64 support +* Tue Nov 14 2017 Alexey Makhalov - 4.16-3 +- Aarch64 support -* Wed Aug 23 2017 Alexey Makhalov 4.16-2 -- Fix compilation issue for glibc-2.26 +* Wed Aug 23 2017 Alexey Makhalov - 4.16-2 +- Fix compilation issue for glibc-2.26 -* Wed Apr 12 2017 Vinay Kulkarni 4.16-1 -- Update to version 4.16 +* Wed Apr 12 2017 Vinay Kulkarni - 4.16-1 +- Update to version 4.16 -* Thu Oct 20 2016 Alexey Makhalov 4.11-3 -- Exclude perl dependency +* Thu Oct 20 2016 Alexey Makhalov - 4.11-3 +- Exclude perl dependency -* Tue May 24 2016 Priyesh Padmavilasom 4.11-2 -- GA - Bump release of all rpms +* Tue May 24 2016 Priyesh Padmavilasom - 4.11-2 +- GA - Bump release of all rpms -* Wed Jan 20 2016 Anish Swaminathan 4.11-1 -- Upgrade version. +* Wed Jan 20 2016 Anish Swaminathan - 4.11-1 +- Upgrade version. -* Thu Oct 09 2014 Divya Thaluru 4.10-1 -- Initial build. First version +* Thu Oct 09 2014 Divya Thaluru - 4.10-1 +- Initial build. First version diff --git a/SPECS/strace/testfix-landlock-brackets.patch b/SPECS/strace/testfix-landlock-brackets.patch new file mode 100644 index 00000000000..c4e120a8332 --- /dev/null +++ b/SPECS/strace/testfix-landlock-brackets.patch @@ -0,0 +1,110 @@ +Maintainer note: Kernel patch mentioned below was backported to 5.15, is present in kernel>=5.15.33.1 +https://github.com/microsoft/CBL-Mariner-Linux-Kernel/commit/3d4b396a616d0d67bf95d6823ad1197f6247292e + +From 22cf83f78c12fe8afdd0b2d8029a037b6084edf2 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Fri, 27 May 2022 16:17:21 +0200 +Subject: [PATCH] tests: support both old and new landlock pseudopath + +Since the ABI of landlock ruleset file name has been broken by Linux +commit v5.18-rc1~88^2, the landlock_create_ruleset-y now has to account +for both new and old possible names. Opt for checking the link value +in the test instead. + +* tests/landlock_create_ruleset-y.c (FD_PATH): Remove. +(DECODE_FD): New macro. +* tests/landlock_create_ruleset.c: Include "xmalloc.h" and . +[!DECODE_FD] (DECODE_FD): New macro. +(main) : New variable. +[DECODE_FD] (main): Check the link path of the fd returned +by the landlock_create_ruleset call and set it to fd_str, which +is then printed. + +Signed-off-by: Olivia Crain +--- + tests/landlock_create_ruleset-y.c | 2 +- + tests/landlock_create_ruleset.c | 33 ++++++++++++++++++++++++++++++- + 2 files changed, 33 insertions(+), 2 deletions(-) + +diff --git a/tests/landlock_create_ruleset-y.c b/tests/landlock_create_ruleset-y.c +index a30966b..87632fd 100644 +--- a/tests/landlock_create_ruleset-y.c ++++ b/tests/landlock_create_ruleset-y.c +@@ -1,4 +1,4 @@ +-#define FD_PATH "" ++#define DECODE_FD 1 + #define SKIP_IF_PROC_IS_UNAVAILABLE skip_if_unavailable("/proc/self/fd/") + + #include "landlock_create_ruleset.c" +diff --git a/tests/landlock_create_ruleset.c b/tests/landlock_create_ruleset.c +index bc1bcc2..476c402 100644 +--- a/tests/landlock_create_ruleset.c ++++ b/tests/landlock_create_ruleset.c +@@ -9,10 +9,12 @@ + + #include "tests.h" + #include "scno.h" ++#include "xmalloc.h" + + #include + #include + #include ++#include + #include + + #include +@@ -20,6 +22,9 @@ + #ifndef RETVAL_INJECTED + # define RETVAL_INJECTED 0 + #endif ++#ifndef DECODE_FD ++# define DECODE_FD 0 ++#endif + + #ifndef SKIP_IF_PROC_IS_UNAVAILABLE + # define SKIP_IF_PROC_IS_UNAVAILABLE +@@ -124,14 +129,40 @@ main(void) + static const kernel_ulong_t sizes[] = { 8, 12, 16 }; + for (size_t i = 0; i < ARRAY_SIZE(attr_vals); i++) { + for (size_t j = 0; j < ARRAY_SIZE(sizes); j++) { ++ const char *fd_str = FD_PATH; ++ + attr->handled_access_fs = attr_vals[i].val; + rc = sys_landlock_create_ruleset(attr, sizes[j], 0); ++ ++#if DECODE_FD ++ /* ++ * The ABI has been broken in commit v5.18-rc1~88^2 ++ * by adding brackets to the link value, hence, we can't ++ * rely on a specific name anymore and have to fetch it ++ * ourselves. ++ */ ++ if (rc >= 0) { ++ static char buf[256]; ++ char *path = xasprintf("/proc/self/fd/%ld", rc); ++ ssize_t ret = readlink(path, buf + 1, ++ sizeof(buf) - 3); ++ free(path); ++ ++ if (ret >= 0) { ++ buf[0] = '<'; ++ buf[ret + 1] = '>'; ++ buf[ret + 2] = '\0'; ++ fd_str = buf; ++ } ++ } ++#endif ++ + printf("landlock_create_ruleset({handled_access_fs=%s" + "%s}, %llu, 0) = %s%s" INJ_STR, + attr_vals[i].str, + sizes[j] > sizeof(*attr) ? ", ..." : "", + (unsigned long long) sizes[j], +- errstr, rc > 0 ? FD_PATH : ""); ++ errstr, rc >= 0 ? fd_str : ""); + } + } + +-- +2.34.1 + From 55d5031db2832a138385b8b9e45b402e45a1f8b8 Mon Sep 17 00:00:00 2001 From: Olivia Crain Date: Thu, 8 Jun 2023 11:06:02 -0700 Subject: [PATCH 12/14] Upgrade debootstrap to 1.0.128+nmu2 and promote to base repo (#5643) --- .../debootstrap/debootstrap.signatures.json | 5 --- SPECS/debootstrap/debootstrap.signatures.json | 5 +++ .../debootstrap/debootstrap.spec | 41 ++++++++++--------- cgmanifest.json | 4 +- 4 files changed, 29 insertions(+), 26 deletions(-) delete mode 100644 SPECS-EXTENDED/debootstrap/debootstrap.signatures.json create mode 100644 SPECS/debootstrap/debootstrap.signatures.json rename {SPECS-EXTENDED => SPECS}/debootstrap/debootstrap.spec (95%) diff --git a/SPECS-EXTENDED/debootstrap/debootstrap.signatures.json b/SPECS-EXTENDED/debootstrap/debootstrap.signatures.json deleted file mode 100644 index c5e0faf3836..00000000000 --- a/SPECS-EXTENDED/debootstrap/debootstrap.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "debootstrap_1.0.123.tar.gz": "5e5a8147ecdd6be0eea5ac4d6ed8192cc653e93f744dd3306c9b1cc51d6ca328" - } -} \ No newline at end of file diff --git a/SPECS/debootstrap/debootstrap.signatures.json b/SPECS/debootstrap/debootstrap.signatures.json new file mode 100644 index 00000000000..f488375b287 --- /dev/null +++ b/SPECS/debootstrap/debootstrap.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "debootstrap_1.0.128+nmu2.tar.gz": "528523228d93a31c9e0cd4eb932977ea8ceec2bfbf8db1103bec2397cc7434fa" + } +} \ No newline at end of file diff --git a/SPECS-EXTENDED/debootstrap/debootstrap.spec b/SPECS/debootstrap/debootstrap.spec similarity index 95% rename from SPECS-EXTENDED/debootstrap/debootstrap.spec rename to SPECS/debootstrap/debootstrap.spec index fc765a4cae7..f468e18c5e1 100644 --- a/SPECS-EXTENDED/debootstrap/debootstrap.spec +++ b/SPECS/debootstrap/debootstrap.spec @@ -1,32 +1,28 @@ -Vendor: Microsoft Corporation -Distribution: Mariner -# Read https://bugzilla.redhat.com/show_bug.cgi?id=1654765 -# mangling shebang in /usr/sbin/debootstrap from /bin/sh to /usr/bin/sh +# Mariner does not use the %%__brp_mangle_shebangs buildroot policy, but may in the future +# Mangling shebang in /usr/sbin/debootstrap from /bin/sh to /usr/bin/sh %undefine __brp_mangle_shebangs -Name: debootstrap -Version: 1.0.123 -Release: 2%{?dist} Summary: Debian GNU/Linux bootstrapper - +Name: debootstrap +Version: 1.0.128+nmu2 +Release: 1%{?dist} License: MIT +Vendor: Microsoft Corporation +Distribution: Mariner URL: https://wiki.debian.org/Debootstrap -Source0: http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_%{version}.tar.gz - -BuildArch: noarch - +Source0: https://deb.debian.org/debian/pool/main/d/%{name}/%{name}_%{version}.tar.gz BuildRequires: fakeroot +BuildRequires: make +Requires: binutils Requires: gettext +Requires: gpg Requires: perl-interpreter Requires: wget Requires: tar Requires: gzip -Requires: dpkg Requires: xz -%if 0%{?fedora} || 0%{?rhel} >= 8 -Recommends: ubu-keyring -Recommends: debian-keyring -%endif +Requires: zstd +BuildArch: noarch %description debootstrap is used to create a Debian base system from scratch, without @@ -39,7 +35,7 @@ Debian GNU/Linux guest system. %prep -%setup -q -n debootstrap +%autosetup -n %{name} %build # nothing to do @@ -52,13 +48,20 @@ mkdir -p %{buildroot}%{_mandir}/man8 install -p -m 0644 debootstrap.8 %{buildroot}%{_mandir}/man8 %files -%doc debian/changelog README %license debian/copyright +%doc README %{_datadir}/debootstrap +%{_datadir}/debootstrap/scripts/* %{_sbindir}/debootstrap %{_mandir}/man8/debootstrap.8* %changelog +* Tue Jun 06 2023 Olivia Crain - 1.0.128+nmu2-1 +- Upgrade to latest upstream version and promote to base repo +- Remove requirement on dpkg- ar (from binutils) is sufficient to unpack debs +- Verified license +- Verified license tag uses SPDX expression + * Fri Oct 15 2021 Pawel Winogrodzki - 1.0.123-2 - Initial CBL-Mariner import from Fedora 20 (license: MIT). diff --git a/cgmanifest.json b/cgmanifest.json index 11c51afe736..5859a280ef0 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -2497,8 +2497,8 @@ "type": "other", "other": { "name": "debootstrap", - "version": "1.0.123", - "downloadUrl": "http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123.tar.gz" + "version": "1.0.128+nmu2", + "downloadUrl": "https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.128+nmu2.tar.gz" } } }, From 89d60ba05ff26b513317b1e47d51aa0c90b422e0 Mon Sep 17 00:00:00 2001 From: Sumynwa <80809794+Sumynwa@users.noreply.github.com> Date: Thu, 8 Jun 2023 23:43:29 +0530 Subject: [PATCH 13/14] Patch curl to address CVE-2023-28322 (#5642) * curl: Apply patch to address CVE-2023-28322 * curl: Update toolkit manifest files --- SPECS/curl/CVE-2023-28322.patch | 434 ++++++++++++++++++ SPECS/curl/curl.spec | 6 +- .../manifests/package/pkggen_core_aarch64.txt | 6 +- .../manifests/package/pkggen_core_x86_64.txt | 6 +- .../manifests/package/toolchain_aarch64.txt | 8 +- .../manifests/package/toolchain_x86_64.txt | 8 +- 6 files changed, 453 insertions(+), 15 deletions(-) create mode 100644 SPECS/curl/CVE-2023-28322.patch diff --git a/SPECS/curl/CVE-2023-28322.patch b/SPECS/curl/CVE-2023-28322.patch new file mode 100644 index 00000000000..9fb1f059957 --- /dev/null +++ b/SPECS/curl/CVE-2023-28322.patch @@ -0,0 +1,434 @@ +From 7815647d6582c0a4900be2e1de6c5e61272c496b Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Tue, 25 Apr 2023 08:28:01 +0200 +Subject: [PATCH] lib: unify the upload/method handling + +By making sure we set state.upload based on the set.method value and not +independently as set.upload, we reduce confusion and mixup risks, both +internally and externally. + +Closes #11017 +--- + lib/curl_rtmp.c | 4 ++-- + lib/file.c | 4 ++-- + lib/ftp.c | 8 ++++---- + lib/http.c | 4 ++-- + lib/imap.c | 6 +++--- + lib/rtsp.c | 4 ++-- + lib/setopt.c | 6 ++---- + lib/smb.c | 6 +++--- + lib/smtp.c | 4 ++-- + lib/tftp.c | 8 ++++---- + lib/transfer.c | 4 ++-- + lib/urldata.h | 2 +- + lib/vssh/libssh.c | 6 +++--- + lib/vssh/libssh2.c | 6 +++--- + lib/vssh/wolfssh.c | 2 +- + 15 files changed, 36 insertions(+), 38 deletions(-) + +diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c +index 2679a2cdc..406fb42ac 100644 +--- a/lib/curl_rtmp.c ++++ b/lib/curl_rtmp.c +@@ -231,7 +231,7 @@ static CURLcode rtmp_connect(struct Curl_easy *data, bool *done) + /* We have to know if it's a write before we send the + * connect request packet + */ +- if(data->set.upload) ++ if(data->state.upload) + r->Link.protocol |= RTMP_FEATURE_WRITE; + + /* For plain streams, use the buffer toggle trick to keep data flowing */ +@@ -263,7 +263,7 @@ static CURLcode rtmp_do(struct Curl_easy *data, bool *done) + if(!RTMP_ConnectStream(r, 0)) + return CURLE_FAILED_INIT; + +- if(data->set.upload) { ++ if(data->state.upload) { + Curl_pgrsSetUploadSize(data, data->state.infilesize); + Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET); + } +diff --git a/lib/file.c b/lib/file.c +index 51c5d07ce..c751e8861 100644 +--- a/lib/file.c ++++ b/lib/file.c +@@ -240,7 +240,7 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done) + file->freepath = real_path; /* free this when done */ + + file->fd = fd; +- if(!data->set.upload && (fd == -1)) { ++ if(!data->state.upload && (fd == -1)) { + failf(data, "Couldn't open file %s", data->state.up.path); + file_done(data, CURLE_FILE_COULDNT_READ_FILE, FALSE); + return CURLE_FILE_COULDNT_READ_FILE; +@@ -422,7 +422,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) + + Curl_pgrsStartNow(data); + +- if(data->set.upload) ++ if(data->state.upload) + return file_upload(data); + + file = data->req.p.file; +diff --git a/lib/ftp.c b/lib/ftp.c +index f50d7baf6..4ff68cc45 100644 +--- a/lib/ftp.c ++++ b/lib/ftp.c +@@ -1348,7 +1348,7 @@ static CURLcode ftp_state_prepare_transfer(struct Curl_easy *data) + data->set.str[STRING_CUSTOMREQUEST]? + data->set.str[STRING_CUSTOMREQUEST]: + (data->state.list_only?"NLST":"LIST")); +- else if(data->set.upload) ++ else if(data->state.upload) + result = Curl_pp_sendf(data, &ftpc->pp, "PRET STOR %s", + conn->proto.ftpc.file); + else +@@ -3384,7 +3384,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, + /* the response code from the transfer showed an error already so no + use checking further */ + ; +- else if(data->set.upload) { ++ else if(data->state.upload) { + if((-1 != data->state.infilesize) && + (data->state.infilesize != data->req.writebytecount) && + !data->set.crlf && +@@ -3640,7 +3640,7 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep) + connected back to us */ + } + } +- else if(data->set.upload) { ++ else if(data->state.upload) { + result = ftp_nb_type(data, conn, data->state.prefer_ascii, + FTP_STOR_TYPE); + if(result) +@@ -4225,7 +4225,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) + ftpc->file = NULL; /* instead of point to a zero byte, + we make it a NULL pointer */ + +- if(data->set.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) { ++ if(data->state.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) { + /* We need a file name when uploading. Return error! */ + failf(data, "Uploading to a URL without a file name"); + free(rawPath); +diff --git a/lib/http.c b/lib/http.c +index 80e43f6f3..bffdd3468 100644 +--- a/lib/http.c ++++ b/lib/http.c +@@ -2112,7 +2112,7 @@ void Curl_http_method(struct Curl_easy *data, struct connectdata *conn, + Curl_HttpReq httpreq = (Curl_HttpReq)data->state.httpreq; + const char *request; + if((conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_FTP)) && +- data->set.upload) ++ data->state.upload) + httpreq = HTTPREQ_PUT; + + /* Now set the 'request' pointer to the proper request string */ +@@ -2423,7 +2423,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn, + if((conn->handler->protocol & PROTO_FAMILY_HTTP) && + (((httpreq == HTTPREQ_POST_MIME || httpreq == HTTPREQ_POST_FORM) && + http->postsize < 0) || +- ((data->set.upload || httpreq == HTTPREQ_POST) && ++ ((data->state.upload || httpreq == HTTPREQ_POST) && + data->state.infilesize == -1))) { + if(conn->bits.authneg) + /* don't enable chunked during auth neg */ +diff --git a/lib/imap.c b/lib/imap.c +index c2f675d4b..1952e66a1 100644 +--- a/lib/imap.c ++++ b/lib/imap.c +@@ -1511,11 +1511,11 @@ static CURLcode imap_done(struct Curl_easy *data, CURLcode status, + result = status; /* use the already set error code */ + } + else if(!data->set.connect_only && !imap->custom && +- (imap->uid || imap->mindex || data->set.upload || ++ (imap->uid || imap->mindex || data->state.upload || + data->set.mimepost.kind != MIMEKIND_NONE)) { + /* Handle responses after FETCH or APPEND transfer has finished */ + +- if(!data->set.upload && data->set.mimepost.kind == MIMEKIND_NONE) ++ if(!data->state.upload && data->set.mimepost.kind == MIMEKIND_NONE) + state(data, IMAP_FETCH_FINAL); + else { + /* End the APPEND command first by sending an empty line */ +@@ -1581,7 +1581,7 @@ static CURLcode imap_perform(struct Curl_easy *data, bool *connected, + selected = TRUE; + + /* Start the first command in the DO phase */ +- if(data->set.upload || data->set.mimepost.kind != MIMEKIND_NONE) ++ if(data->state.upload || data->set.mimepost.kind != MIMEKIND_NONE) + /* APPEND can be executed directly */ + result = imap_perform_append(data); + else if(imap->custom && (selected || !imap->mailbox)) +diff --git a/lib/rtsp.c b/lib/rtsp.c +index ea99d720e..ccd7264b0 100644 +--- a/lib/rtsp.c ++++ b/lib/rtsp.c +@@ -493,7 +493,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) + rtspreq == RTSPREQ_SET_PARAMETER || + rtspreq == RTSPREQ_GET_PARAMETER) { + +- if(data->set.upload) { ++ if(data->state.upload) { + putsize = data->state.infilesize; + data->state.httpreq = HTTPREQ_PUT; + +@@ -512,7 +512,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) + result = + Curl_dyn_addf(&req_buffer, + "Content-Length: %" CURL_FORMAT_CURL_OFF_T"\r\n", +- (data->set.upload ? putsize : postsize)); ++ (data->state.upload ? putsize : postsize)); + if(result) + return result; + } +diff --git a/lib/setopt.c b/lib/setopt.c +index 38f5711e4..0c3b9634d 100644 +--- a/lib/setopt.c ++++ b/lib/setopt.c +@@ -333,8 +333,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + * We want to sent data to the remote host. If this is HTTP, that equals + * using the PUT request. + */ +- data->set.upload = (0 != va_arg(param, long)) ? TRUE : FALSE; +- if(data->set.upload) { ++ arg = va_arg(param, long); ++ if(arg) { + /* If this is HTTP, PUT is what's needed to "upload" */ + data->set.method = HTTPREQ_PUT; + data->set.opt_no_body = FALSE; /* this is implied */ +@@ -664,7 +664,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + } + else + data->set.method = HTTPREQ_GET; +- data->set.upload = FALSE; + break; + + #ifndef CURL_DISABLE_MIME +@@ -888,7 +887,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) + */ + if(va_arg(param, long)) { + data->set.method = HTTPREQ_GET; +- data->set.upload = FALSE; /* switch off upload */ + data->set.opt_no_body = FALSE; /* this is implied */ + } + break; +diff --git a/lib/smb.c b/lib/smb.c +index a1e444ee6..d68222135 100644 +--- a/lib/smb.c ++++ b/lib/smb.c +@@ -530,7 +530,7 @@ static CURLcode smb_send_open(struct Curl_easy *data) + byte_count = strlen(req->path); + msg.name_length = smb_swap16((unsigned short)byte_count); + msg.share_access = smb_swap32(SMB_FILE_SHARE_ALL); +- if(data->set.upload) { ++ if(data->state.upload) { + msg.access = smb_swap32(SMB_GENERIC_READ | SMB_GENERIC_WRITE); + msg.create_disposition = smb_swap32(SMB_FILE_OVERWRITE_IF); + } +@@ -762,7 +762,7 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done) + void *msg = NULL; + const struct smb_nt_create_response *smb_m; + +- if(data->set.upload && (data->state.infilesize < 0)) { ++ if(data->state.upload && (data->state.infilesize < 0)) { + failf(data, "SMB upload needs to know the size up front"); + return CURLE_SEND_ERROR; + } +@@ -813,7 +813,7 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done) + smb_m = (const struct smb_nt_create_response*) msg; + req->fid = smb_swap16(smb_m->fid); + data->req.offset = 0; +- if(data->set.upload) { ++ if(data->state.upload) { + data->req.size = data->state.infilesize; + Curl_pgrsSetUploadSize(data, data->req.size); + next_state = SMB_UPLOAD; +diff --git a/lib/smtp.c b/lib/smtp.c +index 7a030308d..c182cace7 100644 +--- a/lib/smtp.c ++++ b/lib/smtp.c +@@ -1419,7 +1419,7 @@ static CURLcode smtp_done(struct Curl_easy *data, CURLcode status, + result = status; /* use the already set error code */ + } + else if(!data->set.connect_only && data->set.mail_rcpt && +- (data->set.upload || data->set.mimepost.kind)) { ++ (data->state.upload || data->set.mimepost.kind)) { + /* Calculate the EOB taking into account any terminating CRLF from the + previous line of the email or the CRLF of the DATA command when there + is "no mail data". RFC-5321, sect. 4.1.1.4. +@@ -1511,7 +1511,7 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected, + smtp->eob = 2; + + /* Start the first command in the DO phase */ +- if((data->set.upload || data->set.mimepost.kind) && data->set.mail_rcpt) ++ if((data->state.upload || data->set.mimepost.kind) && data->set.mail_rcpt) + /* MAIL transfer */ + result = smtp_perform_mail(data); + else +diff --git a/lib/tftp.c b/lib/tftp.c +index 164d3c723..8ed1b887b 100644 +--- a/lib/tftp.c ++++ b/lib/tftp.c +@@ -370,7 +370,7 @@ static CURLcode tftp_parse_option_ack(struct tftp_state_data *state, + + /* tsize should be ignored on upload: Who cares about the size of the + remote file? */ +- if(!data->set.upload) { ++ if(!data->state.upload) { + if(!tsize) { + failf(data, "invalid tsize -:%s:- value in OACK packet", value); + return CURLE_TFTP_ILLEGAL; +@@ -451,7 +451,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + return result; + } + +- if(data->set.upload) { ++ if(data->state.upload) { + /* If we are uploading, send an WRQ */ + setpacketevent(&state->spacket, TFTP_EVENT_WRQ); + state->data->req.upload_fromhere = +@@ -486,7 +486,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + if(!data->set.tftp_no_options) { + char buf[64]; + /* add tsize option */ +- if(data->set.upload && (data->state.infilesize != -1)) ++ if(data->state.upload && (data->state.infilesize != -1)) + msnprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T, + data->state.infilesize); + else +@@ -540,7 +540,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, + break; + + case TFTP_EVENT_OACK: +- if(data->set.upload) { ++ if(data->state.upload) { + result = tftp_connect_for_tx(state, event); + } + else { +diff --git a/lib/transfer.c b/lib/transfer.c +index e9ab8fbf0..cb69f3365 100644 +--- a/lib/transfer.c ++++ b/lib/transfer.c +@@ -1293,6 +1293,7 @@ void Curl_init_CONNECT(struct Curl_easy *data) + { + data->state.fread_func = data->set.fread_func_set; + data->state.in = data->set.in_set; ++ data->state.upload = (data->state.httpreq == HTTPREQ_PUT); + } + + /* +@@ -1732,7 +1733,6 @@ CURLcode Curl_follow(struct Curl_easy *data, + data->state.httpreq != HTTPREQ_POST_MIME) || + !(data->set.keep_post & CURL_REDIR_POST_303))) { + data->state.httpreq = HTTPREQ_GET; +- data->set.upload = false; + infof(data, "Switch to %s", + data->req.no_body?"HEAD":"GET"); + } +@@ -1770,7 +1770,7 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url) + + /* if we're talking upload, we can't do the checks below, unless the protocol + is HTTP as when uploading over HTTP we will still get a response */ +- if(data->set.upload && ++ if(data->state.upload && + !(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP))) + return CURLE_OK; + +diff --git a/lib/urldata.h b/lib/urldata.h +index cca992a02..a8580bdb6 100644 +--- a/lib/urldata.h ++++ b/lib/urldata.h +@@ -1462,6 +1462,7 @@ struct UrlState { + BIT(rewindbeforesend);/* TRUE when the sending couldn't be stopped even + though it will be discarded. We must call the data + rewind callback before trying to send again. */ ++ BIT(upload); /* upload request */ + }; + + /* +@@ -1838,7 +1839,6 @@ struct UserDefined { + BIT(http_auto_referer); /* set "correct" referer when following + location: */ + BIT(opt_no_body); /* as set with CURLOPT_NOBODY */ +- BIT(upload); /* upload request */ + BIT(verbose); /* output verbosity */ + BIT(krb); /* Kerberos connection requested */ + BIT(reuse_forbid); /* forbidden to be reused, close after use */ +diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c +index b31f741ba..d60edaa30 100644 +--- a/lib/vssh/libssh.c ++++ b/lib/vssh/libssh.c +@@ -1209,7 +1209,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + } + + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(protop->path[strlen(protop->path)-1] == '/') +@@ -1802,7 +1802,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + /* Functions from the SCP subsystem cannot handle/return SSH_AGAIN */ + ssh_set_blocking(sshc->ssh_session, 1); + +- if(data->set.upload) { ++ if(data->state.upload) { + if(data->state.infilesize < 0) { + failf(data, "SCP requires a known file size for upload"); + sshc->actualcode = CURLE_UPLOAD_FAILED; +@@ -1907,7 +1907,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) + break; + } + case SSH_SCP_DONE: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SCP_SEND_EOF); + else + state(data, SSH_SCP_CHANNEL_FREE); +diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c +index f1154dc47..f2e5352d1 100644 +--- a/lib/vssh/libssh2.c ++++ b/lib/vssh/libssh2.c +@@ -2019,7 +2019,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + } + + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(sshp->path[strlen(sshp->path)-1] == '/') +@@ -2691,7 +2691,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + break; + } + +- if(data->set.upload) { ++ if(data->state.upload) { + if(data->state.infilesize < 0) { + failf(data, "SCP requires a known file size for upload"); + sshc->actualcode = CURLE_UPLOAD_FAILED; +@@ -2831,7 +2831,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) + break; + + case SSH_SCP_DONE: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SCP_SEND_EOF); + else + state(data, SSH_SCP_CHANNEL_FREE); +diff --git a/lib/vssh/wolfssh.c b/lib/vssh/wolfssh.c +index 17d59ecd2..2ca91b736 100644 +--- a/lib/vssh/wolfssh.c ++++ b/lib/vssh/wolfssh.c +@@ -557,7 +557,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) + } + break; + case SSH_SFTP_TRANS_INIT: +- if(data->set.upload) ++ if(data->state.upload) + state(data, SSH_SFTP_UPLOAD_INIT); + else { + if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/') +-- +2.25.1 + diff --git a/SPECS/curl/curl.spec b/SPECS/curl/curl.spec index 9bb4f190b3c..db37153c3e0 100644 --- a/SPECS/curl/curl.spec +++ b/SPECS/curl/curl.spec @@ -1,13 +1,14 @@ Summary: An URL retrieval utility and library Name: curl Version: 8.0.1 -Release: 1%{?dist} +Release: 2%{?dist} License: curl Vendor: Microsoft Corporation Distribution: Mariner Group: System Environment/NetworkingLibraries URL: https://curl.haxx.se Source0: https://curl.haxx.se/download/%{name}-%{version}.tar.gz +Patch0: CVE-2023-28322.patch BuildRequires: krb5-devel BuildRequires: libssh2-devel BuildRequires: nghttp2-devel @@ -85,6 +86,9 @@ find %{buildroot} -type f -name "*.la" -delete -print %{_libdir}/libcurl.so.* %changelog +* Wed Jun 07 2023 Sumedh Sharma - 8.0.1-2 +- Add patch to address CVE-2023-28322 + * Wed Mar 29 2023 Muhammad Falak - 8.0.1-1 - Bump version to 8.0.1 to address CVE-2023-27533 to CVE-2023-27538 diff --git a/toolkit/resources/manifests/package/pkggen_core_aarch64.txt b/toolkit/resources/manifests/package/pkggen_core_aarch64.txt index 9041f703f2c..1d51a274546 100644 --- a/toolkit/resources/manifests/package/pkggen_core_aarch64.txt +++ b/toolkit/resources/manifests/package/pkggen_core_aarch64.txt @@ -190,9 +190,9 @@ libssh2-1.9.0-2.cm2.aarch64.rpm libssh2-devel-1.9.0-2.cm2.aarch64.rpm krb5-1.19.4-1.cm2.aarch64.rpm nghttp2-1.46.0-2.cm2.aarch64.rpm -curl-8.0.1-1.cm2.aarch64.rpm -curl-devel-8.0.1-1.cm2.aarch64.rpm -curl-libs-8.0.1-1.cm2.aarch64.rpm +curl-8.0.1-2.cm2.aarch64.rpm +curl-devel-8.0.1-2.cm2.aarch64.rpm +curl-libs-8.0.1-2.cm2.aarch64.rpm tdnf-3.2.2-4.cm2.aarch64.rpm tdnf-cli-libs-3.2.2-4.cm2.aarch64.rpm tdnf-devel-3.2.2-4.cm2.aarch64.rpm diff --git a/toolkit/resources/manifests/package/pkggen_core_x86_64.txt b/toolkit/resources/manifests/package/pkggen_core_x86_64.txt index 2cfe2d84461..07b27816dd3 100644 --- a/toolkit/resources/manifests/package/pkggen_core_x86_64.txt +++ b/toolkit/resources/manifests/package/pkggen_core_x86_64.txt @@ -190,9 +190,9 @@ libssh2-1.9.0-2.cm2.x86_64.rpm libssh2-devel-1.9.0-2.cm2.x86_64.rpm krb5-1.19.4-1.cm2.x86_64.rpm nghttp2-1.46.0-2.cm2.x86_64.rpm -curl-8.0.1-1.cm2.x86_64.rpm -curl-devel-8.0.1-1.cm2.x86_64.rpm -curl-libs-8.0.1-1.cm2.x86_64.rpm +curl-8.0.1-2.cm2.x86_64.rpm +curl-devel-8.0.1-2.cm2.x86_64.rpm +curl-libs-8.0.1-2.cm2.x86_64.rpm tdnf-3.2.2-4.cm2.x86_64.rpm tdnf-cli-libs-3.2.2-4.cm2.x86_64.rpm tdnf-devel-3.2.2-4.cm2.x86_64.rpm diff --git a/toolkit/resources/manifests/package/toolchain_aarch64.txt b/toolkit/resources/manifests/package/toolchain_aarch64.txt index d8939c80e11..4e53cdbe960 100644 --- a/toolkit/resources/manifests/package/toolchain_aarch64.txt +++ b/toolkit/resources/manifests/package/toolchain_aarch64.txt @@ -46,10 +46,10 @@ cracklib-lang-2.9.7-5.cm2.aarch64.rpm createrepo_c-0.17.5-1.cm2.aarch64.rpm createrepo_c-debuginfo-0.17.5-1.cm2.aarch64.rpm createrepo_c-devel-0.17.5-1.cm2.aarch64.rpm -curl-8.0.1-1.cm2.aarch64.rpm -curl-debuginfo-8.0.1-1.cm2.aarch64.rpm -curl-devel-8.0.1-1.cm2.aarch64.rpm -curl-libs-8.0.1-1.cm2.aarch64.rpm +curl-8.0.1-2.cm2.aarch64.rpm +curl-debuginfo-8.0.1-2.cm2.aarch64.rpm +curl-devel-8.0.1-2.cm2.aarch64.rpm +curl-libs-8.0.1-2.cm2.aarch64.rpm Cython-debuginfo-0.29.33-1.cm2.aarch64.rpm debugedit-5.0-1.cm2.aarch64.rpm debugedit-debuginfo-5.0-1.cm2.aarch64.rpm diff --git a/toolkit/resources/manifests/package/toolchain_x86_64.txt b/toolkit/resources/manifests/package/toolchain_x86_64.txt index dc501aa2ab7..9e5bf7f291e 100644 --- a/toolkit/resources/manifests/package/toolchain_x86_64.txt +++ b/toolkit/resources/manifests/package/toolchain_x86_64.txt @@ -46,10 +46,10 @@ cracklib-lang-2.9.7-5.cm2.x86_64.rpm createrepo_c-0.17.5-1.cm2.x86_64.rpm createrepo_c-debuginfo-0.17.5-1.cm2.x86_64.rpm createrepo_c-devel-0.17.5-1.cm2.x86_64.rpm -curl-8.0.1-1.cm2.x86_64.rpm -curl-debuginfo-8.0.1-1.cm2.x86_64.rpm -curl-devel-8.0.1-1.cm2.x86_64.rpm -curl-libs-8.0.1-1.cm2.x86_64.rpm +curl-8.0.1-2.cm2.x86_64.rpm +curl-debuginfo-8.0.1-2.cm2.x86_64.rpm +curl-devel-8.0.1-2.cm2.x86_64.rpm +curl-libs-8.0.1-2.cm2.x86_64.rpm Cython-debuginfo-0.29.33-1.cm2.x86_64.rpm debugedit-5.0-1.cm2.x86_64.rpm debugedit-debuginfo-5.0-1.cm2.x86_64.rpm From 93c9b4985e45fb30825ee412e987d4bfbb8e1c92 Mon Sep 17 00:00:00 2001 From: Trung Date: Thu, 8 Jun 2023 11:23:30 -0700 Subject: [PATCH 14/14] timestamp: Make timestamp flag optional for go tools (#5649) --- toolkit/tools/grapher/grapher.go | 2 +- .../tools/graphpkgfetcher/graphpkgfetcher.go | 2 +- .../imageconfigvalidator.go | 2 +- .../tools/imagepkgfetcher/imagepkgfetcher.go | 2 +- toolkit/tools/imager/imager.go | 2 +- .../tools/internal/timestamp/timestamp_mgr.go | 32 ++++++++++++++----- toolkit/tools/roast/roast.go | 2 +- toolkit/tools/scheduler/scheduler.go | 2 +- toolkit/tools/specreader/specreader.go | 2 +- toolkit/tools/srpmpacker/srpmpacker.go | 2 +- 10 files changed, 33 insertions(+), 17 deletions(-) diff --git a/toolkit/tools/grapher/grapher.go b/toolkit/tools/grapher/grapher.go index 5a321278fd7..dd88a09d5d6 100644 --- a/toolkit/tools/grapher/grapher.go +++ b/toolkit/tools/grapher/grapher.go @@ -25,7 +25,7 @@ var ( logLevel = exe.LogLevelFlag(app) strictGoals = app.Flag("strict-goals", "Don't allow missing goal packages").Bool() strictUnresolved = app.Flag("strict-unresolved", "Don't allow missing unresolved packages").Bool() - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() depGraph = pkggraph.NewPkgGraph() ) diff --git a/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go b/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go index 1908dee2851..168cd65544f 100644 --- a/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go +++ b/toolkit/tools/graphpkgfetcher/graphpkgfetcher.go @@ -51,7 +51,7 @@ var ( logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/imageconfigvalidator/imageconfigvalidator.go b/toolkit/tools/imageconfigvalidator/imageconfigvalidator.go index f924db44be7..7a1f1b7ecf3 100644 --- a/toolkit/tools/imageconfigvalidator/imageconfigvalidator.go +++ b/toolkit/tools/imageconfigvalidator/imageconfigvalidator.go @@ -29,7 +29,7 @@ var ( input = exe.InputStringFlag(app, "Path to the image config file.") baseDirPath = exe.InputDirFlag(app, "Base directory for relative file paths from the config.") - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go index b363fcd0dfc..3bb73fe99a1 100644 --- a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go +++ b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go @@ -49,7 +49,7 @@ var ( logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/imager/imager.go b/toolkit/tools/imager/imager.go index 688108f99cb..18ad03a840f 100644 --- a/toolkit/tools/imager/imager.go +++ b/toolkit/tools/imager/imager.go @@ -34,7 +34,7 @@ var ( outputDir = app.Flag("output-dir", "Path to directory to place final image.").ExistingDir() liveInstallFlag = app.Flag("live-install", "Enable to perform a live install to the disk specified in config file.").Bool() emitProgress = app.Flag("emit-progress", "Write progress updates to stdout, such as percent complete and current action.").Bool() - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) ) diff --git a/toolkit/tools/internal/timestamp/timestamp_mgr.go b/toolkit/tools/internal/timestamp/timestamp_mgr.go index 70046d8a5ca..b726ed725a2 100644 --- a/toolkit/tools/internal/timestamp/timestamp_mgr.go +++ b/toolkit/tools/internal/timestamp/timestamp_mgr.go @@ -33,6 +33,7 @@ package timestamp import ( "bufio" "encoding/json" + "errors" "fmt" "math" "os" @@ -128,18 +129,24 @@ func initTimeStampManager() { func ensureManagerExists() error { if timestampMgr == nil { - return fmt.Errorf("Timestamping has not been initialized. Make sure BeginTiming is called first.") + return errors.New("timestamping has not been initialized. Make sure BeginTiming is called first") } return nil } // Begins collecting timing data for a high level component 'toolName' into the file at 'outputFile' func BeginTiming(toolName, outputFile string) (*TimeStamp, error) { + if outputFile == "" { + err := fmt.Errorf("timestamp output file is not specified, the feature will be turned off for %s", toolName) + logger.Log.Info(err.Error()) + return &TimeStamp{}, err + } + initTimeStampManager() outputFileDescriptor, err := os.OpenFile(outputFile, os.O_CREATE|os.O_WRONLY, 0664) if err != nil { - err = fmt.Errorf("Unable to create file %s: %v", outputFile, err) + err = fmt.Errorf("unable to create file %s: %v", outputFile, err) logger.Log.Warn(err.Error()) return &TimeStamp{}, err } @@ -148,23 +155,31 @@ func BeginTiming(toolName, outputFile string) (*TimeStamp, error) { timestampMgr.fileDescriptor = outputFileDescriptor _, err = StartEvent(toolName, nil) if err != nil { - err = fmt.Errorf("Unable to initialize root TimeStamp object for %s: %v", toolName, err) + err = fmt.Errorf("unable to initialize root TimeStamp object for %s: %v", toolName, err) + logger.Log.Warn(err.Error()) timestampMgr.eventProcessorFinished <- true FlushAndCleanUpResources() return &TimeStamp{}, err } go timestampMgr.processEventsInQueue() + logger.Log.Debugf("Begin recording timestamp for %s", toolName) return timestampMgr.root, err } // Begins appending timing data for a high level component 'toolName' into the file at 'outputFile' func ResumeTiming(toolName, outputFile string) error { + if outputFile == "" { + err := fmt.Errorf("timestamp output file is not specified, the feature will be turned off for %s", toolName) + logger.Log.Info(err.Error()) + return err + } + initTimeStampManager() outputFileDescriptor, err := os.OpenFile(outputFile, os.O_RDWR, 0664) if err != nil { - err = fmt.Errorf("Unable to open file %s: %v", outputFile, err) + err = fmt.Errorf("unable to open file %s: %v", outputFile, err) logger.Log.Warn(err.Error()) return err } @@ -175,6 +190,7 @@ func ResumeTiming(toolName, outputFile string) error { timestampMgr.fileDescriptor.Seek(0, 2) go timestampMgr.processEventsInQueue() + logger.Log.Debugf("Resume recording timestamp for %s", toolName) return nil } @@ -186,6 +202,7 @@ func CompleteTiming() (err error) { StopEvent(timestampMgr.root) FlushAndCleanUpResources() + logger.Log.Debugf("Completed recording timestamp, results written to %s", timestampMgr.filePath) timestampMgr = nil return } @@ -207,7 +224,7 @@ func StartEvent(name string, parentTS *TimeStamp) (ts *TimeStamp, err error) { ts, err = newTimeStamp(name, parentTS) ts.ID = timestampMgr.nextID() if err != nil { - err = fmt.Errorf("Failed to create a timestamp object %s: %v", name, err) + err = fmt.Errorf("failed to create a timestamp object %s: %v", name, err) return &TimeStamp{}, err } timestampMgr.submitEvent(EventStart, ts) @@ -223,7 +240,7 @@ func StartEventByPath(path string) (ts *TimeStamp, err error) { ts, err = newTimeStampByPath(timestampMgr.root, path) ts.ID = timestampMgr.nextID() if err != nil { - err = fmt.Errorf("Failed to create a timestamp object %s: %v", path, err) + err = fmt.Errorf("failed to create a timestamp object %s: %v", path, err) return &TimeStamp{}, err } timestampMgr.submitEvent(EventStart, ts) @@ -248,7 +265,7 @@ func StopEventByPath(path string) (ts *TimeStamp, err error) { components := strings.Split(path, pathSeparator) if components[0] != timestampMgr.root.Name { - err = fmt.Errorf("Timestamp root mismatch ('%s', expected '%s')", components[0], timestampMgr.root.Name) + err = fmt.Errorf("timestamp root mismatch ('%s', expected '%s')", components[0], timestampMgr.root.Name) return } ts, err = getTimeStampFromPath(timestampMgr.root, components, 1) @@ -380,7 +397,6 @@ func (mgr *TimeStampManager) updateRead(record *TimeStampRecord) { mgr.lastVisited = ts } } - return } // Read records written to a file and build a (partially) finished timestamp tree. This is useful for resuming diff --git a/toolkit/tools/roast/roast.go b/toolkit/tools/roast/roast.go index cb263e99c8c..0ebbfb28ff4 100644 --- a/toolkit/tools/roast/roast.go +++ b/toolkit/tools/roast/roast.go @@ -54,7 +54,7 @@ var ( imageTag = app.Flag("image-tag", "Tag (text) appended to the image name. Empty by default.").String() - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/scheduler/scheduler.go b/toolkit/tools/scheduler/scheduler.go index c350140faf6..47c7a0b0dff 100644 --- a/toolkit/tools/scheduler/scheduler.go +++ b/toolkit/tools/scheduler/scheduler.go @@ -89,7 +89,7 @@ var ( logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/specreader/specreader.go b/toolkit/tools/specreader/specreader.go index 05bdfb5fe3a..773cbf07482 100644 --- a/toolkit/tools/specreader/specreader.go +++ b/toolkit/tools/specreader/specreader.go @@ -56,7 +56,7 @@ var ( runCheck = app.Flag("run-check", "Whether or not to run the spec file's check section during package build.").Bool() logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() ) func main() { diff --git a/toolkit/tools/srpmpacker/srpmpacker.go b/toolkit/tools/srpmpacker/srpmpacker.go index 9fd3ae21a49..c2b5aa02586 100644 --- a/toolkit/tools/srpmpacker/srpmpacker.go +++ b/toolkit/tools/srpmpacker/srpmpacker.go @@ -102,7 +102,7 @@ var ( outDir = exe.OutputDirFlag(app, "Directory to place the output SRPM.") logFile = exe.LogFileFlag(app) logLevel = exe.LogLevelFlag(app) - timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").Required().String() + timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() buildDir = app.Flag("build-dir", "Directory to store temporary files while building.").Default(defaultBuildDir).String() distTag = app.Flag("dist-tag", "The distribution tag SRPMs will be built with.").Required().String()