From b888f004549d51aec400c1ff38a72b816201da31 Mon Sep 17 00:00:00 2001 From: Lukas Date: Thu, 4 Nov 2021 13:09:12 +0100 Subject: [PATCH] Improve the readme Move the iso sub-directory to archive --- README.md | 139 +++++++-- {iso => archive/iso}/idhmd.cfg | 0 {iso => archive/iso}/idmd.cfg | 0 {iso => archive/iso}/imd.cfg | 0 flat/flat-d.cfg | 87 ++++++ flat/flat-dh.cfg | 96 ++++++ flat/flat-dhi.cfg | 146 +++++++++ flat/flat-ldhi.cfg | 503 ++++++++++++++++++++++++++++++++ flat/flat-s.cfg | 73 +++++ flat/flat-sh.cfg | 100 +++++++ flat/flat-shi.cfg | 119 ++++++++ img/desktop.png | Bin 0 -> 24626 bytes img/greetings.png | Bin 0 -> 67507 bytes leaves/{bmd.cfg => b.cfg} | 49 ++-- leaves/bd.cfg | 29 ++ leaves/bdmd.cfg | 28 -- leaves/bh.cfg | 43 +++ leaves/{bhamd.cfg => bha.cfg} | 8 +- leaves/{bhimd.cfg => bhi.cfg} | 6 +- leaves/bhmd.cfg | 36 --- leaves/{blmd.cfg => bl.cfg} | 10 +- leaves/bnd.cfg | 5 +- leaves/{dmd.cfg => d.cfg} | 20 +- leaves/{dhmd.cfg => dh.cfg} | 17 +- leaves/{dhamd.cfg => dha.cfg} | 19 +- leaves/{dhimd.cfg => dhi.cfg} | 19 +- leaves/{lmd.cfg => l.cfg} | 8 +- leaves/{ldmd.cfg => ld.cfg} | 23 +- leaves/{ldhmd.cfg => ldh.cfg} | 14 +- leaves/{ldhamd.cfg => ldha.cfg} | 16 +- leaves/{ldhimd.cfg => ldhi.cfg} | 18 +- leaves/ls.cfg | 9 + leaves/lsh.cfg | 9 + leaves/lsha.cfg | 9 + leaves/lshi.cfg | 9 + leaves/{md.cfg => s.cfg} | 13 +- leaves/sh.cfg | 27 ++ leaves/sha.cfg | 28 ++ leaves/shi.cfg | 28 ++ 39 files changed, 1542 insertions(+), 221 deletions(-) rename {iso => archive/iso}/idhmd.cfg (100%) rename {iso => archive/iso}/idmd.cfg (100%) rename {iso => archive/iso}/imd.cfg (100%) create mode 100644 flat/flat-d.cfg create mode 100644 flat/flat-dh.cfg create mode 100644 flat/flat-dhi.cfg create mode 100644 flat/flat-ldhi.cfg create mode 100644 flat/flat-s.cfg create mode 100644 flat/flat-sh.cfg create mode 100644 flat/flat-shi.cfg create mode 100644 img/desktop.png create mode 100644 img/greetings.png rename leaves/{bmd.cfg => b.cfg} (60%) create mode 100644 leaves/bd.cfg delete mode 100644 leaves/bdmd.cfg create mode 100644 leaves/bh.cfg rename leaves/{bhamd.cfg => bha.cfg} (78%) rename leaves/{bhimd.cfg => bhi.cfg} (87%) delete mode 100644 leaves/bhmd.cfg rename leaves/{blmd.cfg => bl.cfg} (97%) rename leaves/{dmd.cfg => d.cfg} (68%) rename leaves/{dhmd.cfg => dh.cfg} (70%) rename leaves/{dhamd.cfg => dha.cfg} (67%) rename leaves/{dhimd.cfg => dhi.cfg} (67%) rename leaves/{lmd.cfg => l.cfg} (91%) rename leaves/{ldmd.cfg => ld.cfg} (76%) rename leaves/{ldhmd.cfg => ldh.cfg} (76%) rename leaves/{ldhamd.cfg => ldha.cfg} (77%) rename leaves/{ldhimd.cfg => ldhi.cfg} (73%) create mode 100644 leaves/ls.cfg create mode 100644 leaves/lsh.cfg create mode 100644 leaves/lsha.cfg create mode 100644 leaves/lshi.cfg rename leaves/{md.cfg => s.cfg} (73%) create mode 100644 leaves/sh.cfg create mode 100644 leaves/sha.cfg create mode 100644 leaves/shi.cfg diff --git a/README.md b/README.md index 0f4d2af..c45b612 100644 --- a/README.md +++ b/README.md @@ -2,51 +2,90 @@ > Virtualization for the rest of us -## What ? +## What -* This repository contains the basic building blocks required for deploying [Phyllome OS](https://phyllo.me/) bare-metal or in a virtual machine using [kickstart](https://en.wikipedia.org/wiki/Kickstart_(Linux)) files. +This repository contains the basic building blocks required for deploying [Phyllome OS](https://phyllo.me/) bare-metal or in a virtual machine, using kickstart files. -## Development +> Note: This is the **alpha version** of Phyllome OS. Expect bugs and disappointment -For development purposes, Phyllome OS can be deployed in a virtual machine, leveraging nested-virtualization. +> Note: External contributions for Phyllome OS itself are **not** yet accepted. However, the Phyllome OS Project is looking for **core contributors**. If you are interested about making cutting-edge open-source virtualization more accessible, please send an email to contact@phyllo.me. + +### Structure of the repository + +* `leaves` : this directory contains the basic buildings blocks for assembling Phyllome OS versions + * For instance, the Phyllome OS Desktop version optimized for Intel(tm) CPUs and Intel(tm) graphic cards, refered internally as `dhi`, can be found there (*d* for desktop; *h* for hypervisor; *i* for intel) + * Eventually, there will be three generic editions : **server**; **desktop** and **live**, with their own platform-dependant optimizations +* `flat` : this directory contains the end products in the form of stand-alone and ready-to-use kickstart files + +## How to hack + +Hacking kickstart files is the main way to assemble and configure Phyllome OS, which is RPM-based. Kickstart files are snippets of code which automate the installation of RPM-based Linux distributions. ### Requirements -* A x86_64 platform that supports hardware-assisted virtualization -* A recent Linux Kernel (5.X) +* A x86_64 platform with hardware-assisted virtualization enabled +* A recent Linux Kernel (> 5.X) * The `virt-install` and `virt-manager` tools -* `libvirt` and `qemu-kvm`up and running -* Nested-virtualization enabled +* `libvirt` and `qemu-kvm` up and running +* Nested-virtualization enabled -### Preparation +### The prerequisites -*Enable nested-virtualization* : +**AMD-based systems only**, enable nested-virtualization, then reboot: -* For AMD-based systems +``` +sudo echo "options kvm_amd nested=1" >> /etc/modprobe.d/kvm.conf +``` -```to be done``` +**Intel-based systems only**, enable nested-virtualization, then reboot: -* For Intel-based systems +``` +sudo echo "options kvm_intel nested=1" >> /etc/modprobe.d/kvm.conf` +``` -```to be done``` +Install the prerequisites on Fedora 34 -* For Fedora 34 +``` +sudo dnf install -y qemu-kvm libvirt libvirt-daemon-config-network libvirt-daemon-kvm virt-install virt-top virt-manager libguestfs-tools python3-libguestfs guestfs-tools +``` -*Install the prerequisites* : - -```sudo dnf install -y qemu-kvm libvirt libvirt-daemon-config-network libvirt-daemon-kvm virt-install virt-top virt-manager libguestfs-tools python3-libguestfs guestfs-tools``` - -* For Ubuntu 20.4 or Debian 11 +Install the prerequisites on Ubuntu 20.4 or Debian 11 ```To be done``` -### Fire! +### Hack -> Note : the following scripts relies on a kickstart tuned for Intel CPU and GPU, but may nonetheless on other systems. +From within your favorite terminal : + +``` +git clone https://github.com/PhyllomeOS/PhyllomeOS.git +``` + +Hack files inside the `leaves` directory. + +When you are done, move to the `flat` directory : + +``` +cd ./PhyllomeOS/flat/ +``` + +Then, merge the kickstart leaves into a single file, a process known as flattening. Here, we take the Phyllome OS Desktop edition optimized for Intel(tm) CPUs and Intel(tm) graphic cards, also known as `dhi`, as an example : + +``` +ksflatten -c ../leaves/dhi.cfg -o flat-dhi.cfg +``` + +## Fire it up! + +For testing and development purposes, Phyllome OS can be deployed inside a virtual machine, as a guest hypervisor. + +> Note: it may eventually switch to container-based development. + +> Note: the following script relies on a network-accessible kickstart file tuned for Intel CPUs and GPUs. This script will automatically deploy the alpha version of Phyllome OS, on a Q35 virtual motherboard, a UEFI-based firmware, virtio-devices accross the board, 2 vCPUs, 4 GB of RAM and a disk of 5 GB. -Adjust it according to your need. When ready, copy and paste it to your terminal and fire-up it up! +Adjust it according to your need. When ready, copy and paste it to your terminal and fire it up! ``` virt-install \ @@ -70,18 +109,60 @@ virt-install \ --input type=keyboard,bus=virtio \ --input type=tablet,bus=virtio \ --rng /dev/urandom,model=virtio \ - --disk path=/var/lib/libvirt/images/flat-dhimd.img,format=raw,bus=virtio,cache=writeback,size=5 \ - --location=https://download.fedoraproject.org/pub/fedora/linux/releases/34/Everything/x86_64/os/ \ - --extra-args="inst.ks=https://git.phyllo.me/home/kickstart/raw/branch/master/flat/flat-dhimd.cfg" + --disk path=/var/lib/libvirt/images/flat-dhi.img,format=raw,bus=virtio,cache=writeback,size=5 \ + --location=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/ \ + --initrd-inject flat-dhi.cfg --extra-args "inst.ks=file:flat-dhi.cfg" ``` -### Licence +``` +Starting install... +Retrieving file vmlinuz... | 10 MB 00:00 +Retrieving file initrd.img... | 79 MB 00:02 +Allocating 'virtinst-inlu7cmw-vmlinuz' | 10 MB 00:00 +Transferring virtinst-inlu7cmw-vmlinuz | 10 MB 00:00 +Allocating 'virtinst-2dd8ghse-initrd.img' | 79 MB 00:00 +Transferring virtinst-2dd8ghse-initrd.img | 79 MB 00:01 +Allocating 'flat-dhi.img' | 5.0 GB 00:00 + +Domain is still running. Installation may be in progress. +You can reconnect to the console to complete the installation process. +``` +The process will be launched behind the scene. You can open `virt-manager` and connect to the virtual machine to follow the process. Eventually, you will be greated with this screen: + +![greetings](./img/greetings.png) + +After you are done setting your user account, `virt-manager` will automatically start: + +![greetings](./img/desktop.png) + +## Phyllome OS + +Phyllome OS is a [Fedora Remix](https://fedoraproject.org/wiki/Remix) based on [Fedora Server 34](https://getfedora.org/en/server/) designed to leverage hardware-assisted virtualization and VirtIO-based paravirtualization to run modern UEFI-compatible guest operating systems locally. + +The goal is to maximize ease-of-use and compatibility. As such, Phyllome OS intends to become the easiest way to virtualize modern operating systems, by integrating pertinent open-source software such as `libvirt`, `qemu-kvm` (and then the `Cloud Hypervisor`) and `virt-manager`. + +A user should not have to manage Phyllome OS: it should be able to pick its favorite operating system and Phyllome OS should run it, no question asked. + +Do you want to know more about Phyllome OS design and context ? If so, please have a look at [the white paper](). + +> Note : at the exception of open-source [Darwin derivatives](https://en.wikipedia.org/wiki/Darwin_(operating_system)#Derived_projects), Phyllome OS **won't** offer support running macOS on non-Apple hardware. + +### The Phyllome OS Project + +The Phyllome OS Project relies on multiple tools, including the following front-facing tools: + +* **The wiki**: Have a look at the [wiki repository](https://github.com/PhyllomeOS/wiki) for more information on how you can contribute to improve the documentation. +* **Issues tracker**: public, read-only issue tracking is [available online](https://kanboard.phyllo.me/b/CH7qd98J2v7egmodk/development) +* **The website**: the website repository is [available here](https://github.com/PhyllomeOS/www) +* **Code repository**: GitHub is being used + +## Licence * [GENERAL PUBLIC LICENCE 3](./LICENSE) -### Acknowledgement +## Acknowledgement -* I would like to thanks the main contributors of the official Fedora kickstart files repository, and related tools. +Thanks to the main contributors of the official Fedora kickstart files repository, and related tools: > Adam Miller, Bastien Nocera, Bruno Wolff III, Bryan Kearney, Chitlesh Goorah, Christoph Wickert, Colin Walters, Fabian Affolter, Igor Pires Soares, Jens Petersen, Jeremy Katz, Jeroen van Meeuwen diff --git a/iso/idhmd.cfg b/archive/iso/idhmd.cfg similarity index 100% rename from iso/idhmd.cfg rename to archive/iso/idhmd.cfg diff --git a/iso/idmd.cfg b/archive/iso/idmd.cfg similarity index 100% rename from iso/idmd.cfg rename to archive/iso/idmd.cfg diff --git a/iso/imd.cfg b/archive/iso/imd.cfg similarity index 100% rename from iso/imd.cfg rename to archive/iso/imd.cfg diff --git a/flat/flat-d.cfg b/flat/flat-d.cfg new file mode 100644 index 0000000..b4e4cc9 --- /dev/null +++ b/flat/flat-d.cfg @@ -0,0 +1,87 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# X Window System configuration information +xconfig --defaultdesktop=GNOME --startxonboot +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/d.log + +truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available + +# set new default background (doesn't work. Would have to call a script on first boot or something) +# gsettings set org.gnome.desktop.background picture-uri file://mnt/sysimage/usr/share/backgrounds/elementary/default + +%end + +%packages --exclude-weakdeps +@core +dejavu-sans-mono-fonts +elementary-wallpapers-gnome.noarch +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +gnome-initial-setup +gnome-shell +gnome-terminal +nano +neofetch +pciutils +qemu-guest-agent +spice-vdagent +wget +wpa_supplicant +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes +-gnome-tour + +%end diff --git a/flat/flat-dh.cfg b/flat/flat-dh.cfg new file mode 100644 index 0000000..8f1e8a8 --- /dev/null +++ b/flat/flat-dh.cfg @@ -0,0 +1,96 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# Run the Setup Agent on first boot +firstboot --reconfig +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bh.log + +mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images +# virsh pool-create-as --name iso --type dir --target /mnt/sysimage/var/lib/libvirt/iso # Make libvirt aware of this new directory by creating a so-called 'pool' +# doesn't work + +wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /var/lib/libvirt/iso/ + +# Add a network bridge. Still need to declare it to libvirt/virt-manager +nmcli con add ifname br0 type bridge con-name br0 +nmcli con add type bridge-slave ifname enp1s0 master br0 +nmcli con up br0 + +%end + +%packages --exclude-weakdeps +@core +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +guestfs-tools +initial-setup +libguestfs-tools +libvirt +libvirt-daemon-config-network +libvirt-daemon-kvm +nano +neofetch +pciutils +python3-libguestfs +qemu-guest-agent +qemu-kvm +spice-vdagent +virt-install +virt-top +wget +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes + +%end diff --git a/flat/flat-dhi.cfg b/flat/flat-dhi.cfg new file mode 100644 index 0000000..9ca1e65 --- /dev/null +++ b/flat/flat-dhi.cfg @@ -0,0 +1,146 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# X Window System configuration information +xconfig --defaultdesktop=GNOME --startxonboot +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled --service=mdns +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bh.log + +mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images + +wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/iso/ + +virsh pool-define-as iso dir /mnt/sysimage/var/lib/libvirt/iso/ # Make libvirt aware of this new directory by creating a so-called 'pool' +virsh pool-build iso # Build the pool +virsh pool-start iso # Start it +virsh pool-autostart iso # Set-it to autostart + +# Add a network bridge. Still need to declare it to libvirt/virt-manager +nmcli con add ifname br0 type bridge con-name br0 +nmcli con add type bridge-slave ifname enp1s0 master br0 # to-do : generalize this command +nmcli con up br0 + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bhi.log + +sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci i915.enable_gvt=1/i' /mnt/sysimage/etc/default/grub # Load kernel modules in grub. + +# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd +echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf +echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf +echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf +echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf +echo "kvmgt" > /mnt/sysimage/etc/modules-load.d/kvmgt.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) +echo "vfio-mdev" > /mnt/sysimage/etc/modules-load.d/vfio-mdev.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) + +echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested-virtualization + +dracut --add-drivers " vfio vfio-pci vfio_iommu_type1 vfio_virqfd vfio-mdev kvmgt " --force # Instruct dracut to load the vfio drivers +dracut --force # Regenerate initramfs +# Doesn't seem to work +# dracut: Cannot find /usr/lib/dracut/dracut-init.sh. +# dracut: Are you running from a git checkout? +# dracut: Try passing -l as an argument to /mnt/sysimage/usr/bin/dracut + +grub2-mkconfig -o /mnt/sysimage/boot/grub2/grub.cfg # Update grub. Does it fail ? /usr/sbin/grub2-probe: error: failed to get canonical path of `LiveOS_rootfs'. + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/dhi.log + +truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available + +# Create a file to autostart virt-manager +cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF +[Desktop Entry] +Type=Application +Name=Virtual Machine Manager +Exec=virt-manager +EOF + +%end + +%packages --exclude-weakdeps +@core +@hardware-support +dejavu-sans-mono-fonts +elementary-wallpapers-gnome.noarch +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +gnome-initial-setup +gnome-shell +gnome-terminal +guestfs-tools +libguestfs-tools +libvirt +libvirt-daemon-config-network +libvirt-daemon-kvm +nano +neofetch +pciutils +python3-libguestfs +qemu-guest-agent +qemu-kvm +spice-vdagent +virt-install +virt-manager +virt-top +wget +wpa_supplicant +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes +-gnome-tour + +%end diff --git a/flat/flat-ldhi.cfg b/flat/flat-ldhi.cfg new file mode 100644 index 0000000..1528193 --- /dev/null +++ b/flat/flat-ldhi.cfg @@ -0,0 +1,503 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# X Window System configuration information +xconfig --defaultdesktop=GNOME --startxonboot +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome --activate +# Firewall configuration +firewall --enabled --service=mdns +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all +# Disk partitioning information +part / --fstype="ext4" --size=5120 + +%post --logfile=/root/bl.log +# FIXME: it'd be better to get this installed from a package +cat > /etc/rc.d/init.d/livesys << EOF +#!/bin/bash +# +# live: Init script for live image +# +# chkconfig: 345 00 99 +# description: Init script for live image. +### BEGIN INIT INFO +# X-Start-Before: display-manager chronyd +### END INIT INFO + +. /etc/init.d/functions + +if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ]; then + exit 0 +fi + +if [ -e /.liveimg-configured ] ; then + configdone=1 +fi + +exists() { + which \$1 >/dev/null 2>&1 || return + \$* +} + +livedir="LiveOS" +for arg in \`cat /proc/cmdline\` ; do + if [ "\${arg##rd.live.dir=}" != "\${arg}" ]; then + livedir=\${arg##rd.live.dir=} + continue + fi + if [ "\${arg##live_dir=}" != "\${arg}" ]; then + livedir=\${arg##live_dir=} + fi +done + +# enable swapfile if it exists +if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /run/initramfs/live/\${livedir}/swap.img ] ; then + action "Enabling swap file" swapon /run/initramfs/live/\${livedir}/swap.img +fi + +mountPersistentHome() { + # support label/uuid + if [ "\${homedev##LABEL=}" != "\${homedev}" -o "\${homedev##UUID=}" != "\${homedev}" ]; then + homedev=\`/sbin/blkid -o device -t "\$homedev"\` + fi + + # if we're given a file rather than a blockdev, loopback it + if [ "\${homedev##mtd}" != "\${homedev}" ]; then + # mtd devs don't have a block device but get magic-mounted with -t jffs2 + mountopts="-t jffs2" + elif [ ! -b "\$homedev" ]; then + loopdev=\`losetup -f\` + if [ "\${homedev##/run/initramfs/live}" != "\${homedev}" ]; then + action "Remounting live store r/w" mount -o remount,rw /run/initramfs/live + fi + losetup \$loopdev \$homedev + homedev=\$loopdev + fi + + # if it's encrypted, we need to unlock it + if [ "\$(/sbin/blkid -s TYPE -o value \$homedev 2>/dev/null)" = "crypto_LUKS" ]; then + echo + echo "Setting up encrypted /home device" + plymouth ask-for-password --command="cryptsetup luksOpen \$homedev EncHome" + homedev=/dev/mapper/EncHome + fi + + # and finally do the mount + mount \$mountopts \$homedev /home + # if we have /home under what's passed for persistent home, then + # we should make that the real /home. useful for mtd device on olpc + if [ -d /home/home ]; then mount --bind /home/home /home ; fi + [ -x /sbin/restorecon ] && /sbin/restorecon /home + if [ -d /home/liveuser ]; then USERADDARGS="-M" ; fi +} + +findPersistentHome() { + for arg in \`cat /proc/cmdline\` ; do + if [ "\${arg##persistenthome=}" != "\${arg}" ]; then + homedev=\${arg##persistenthome=} + fi + done +} + +if strstr "\`cat /proc/cmdline\`" persistenthome= ; then + findPersistentHome +elif [ -e /run/initramfs/live/\${livedir}/home.img ]; then + homedev=/run/initramfs/live/\${livedir}/home.img +fi + +# if we have a persistent /home, then we want to go ahead and mount it +if ! strstr "\`cat /proc/cmdline\`" nopersistenthome && [ -n "\$homedev" ] ; then + action "Mounting persistent /home" mountPersistentHome +fi + +if [ -n "\$configdone" ]; then + exit 0 +fi + +# add liveuser user with no passwd +action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser +passwd -d liveuser > /dev/null +usermod -aG wheel liveuser > /dev/null + +# Remove root password lock +passwd -d root > /dev/null + +# turn off firstboot for livecd boots +systemctl --no-reload disable firstboot-text.service 2> /dev/null || : +systemctl --no-reload disable firstboot-graphical.service 2> /dev/null || : +systemctl stop firstboot-text.service 2> /dev/null || : +systemctl stop firstboot-graphical.service 2> /dev/null || : + +# don't use prelink on a running live image +sed -i 's/PRELINKING=yes/PRELINKING=no/' /etc/sysconfig/prelink &>/dev/null || : + +# turn off mdmonitor by default +systemctl --no-reload disable mdmonitor.service 2> /dev/null || : +systemctl --no-reload disable mdmonitor-takeover.service 2> /dev/null || : +systemctl stop mdmonitor.service 2> /dev/null || : +systemctl stop mdmonitor-takeover.service 2> /dev/null || : + +# don't start cron/at as they tend to spawn things which are +# disk intensive that are painful on a live image +systemctl --no-reload disable crond.service 2> /dev/null || : +systemctl --no-reload disable atd.service 2> /dev/null || : +systemctl stop crond.service 2> /dev/null || : +systemctl stop atd.service 2> /dev/null || : + +# turn off abrtd on a live image +systemctl --no-reload disable abrtd.service 2> /dev/null || : +systemctl stop abrtd.service 2> /dev/null || : + +# Don't sync the system clock when running live (RHBZ #1018162) +sed -i 's/rtcsync//' /etc/chrony.conf + +# Mark things as configured +touch /.liveimg-configured + +# add static hostname to work around xauth bug +# https://bugzilla.redhat.com/show_bug.cgi?id=679486 +# the hostname must be something else than 'localhost' +# https://bugzilla.redhat.com/show_bug.cgi?id=1370222 +# hostnamectl set-hostname "localhost-live" + +EOF + +# bah, hal starts way too late +cat > /etc/rc.d/init.d/livesys-late << EOF +#!/bin/bash +# +# live: Late init script for live image +# +# chkconfig: 345 99 01 +# description: Late init script for live image. + +. /etc/init.d/functions + +if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ] || [ -e /.liveimg-late-configured ] ; then + exit 0 +fi + +exists() { + which \$1 >/dev/null 2>&1 || return + \$* +} + +touch /.liveimg-late-configured + +# read some variables out of /proc/cmdline +for o in \`cat /proc/cmdline\` ; do + case \$o in + ks=*) + ks="--kickstart=\${o#ks=}" + ;; + xdriver=*) + xdriver="\${o#xdriver=}" + ;; + esac +done + +# if liveinst or textinst is given, start anaconda +#if strstr "\`cat /proc/cmdline\`" liveinst ; then +# plymouth --quit +# /usr/sbin/liveinst \$ks +#fi +#if strstr "\`cat /proc/cmdline\`" textinst ; then +# plymouth --quit +# /usr/sbin/liveinst --text \$ks +#fi + +# configure X, allowing user to override xdriver +#if [ -n "\$xdriver" ]; then +# cat > /etc/X11/xorg.conf.d/00-xdriver.conf <> /etc/fstab << EOF +vartmp /var/tmp tmpfs defaults 0 0 +EOF + +# work around for poor key import UI in PackageKit +rm -f /var/lib/rpm/__db* +echo "Packages within this LiveCD" +rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn +# Note that running rpm recreates the rpm db files which aren't needed or wanted +rm -f /var/lib/rpm/__db* + +# go ahead and pre-make the man -k cache (#455968) +/usr/bin/mandb + +# make sure there aren't core files lying around +rm -f /core* + +# remove random seed, the newly installed instance should make it's own +rm -f /var/lib/systemd/random-seed + +# convince readahead not to collect +# FIXME: for systemd + +echo 'File created by kickstart. See systemd-update-done.service(8).' \ + | tee /etc/.updated >/var/.updated + +# Drop the rescue kernel and initramfs, we don't need them on the live media itself. +# See bug 1317709 +rm -f /boot/*-rescue* + +# Disable network service here, as doing it in the services line +# fails due to RHBZ #1369794 +/sbin/chkconfig network off + +# Remove machine-id on pre generated images +rm -f /etc/machine-id +touch /etc/machine-id + +%end + +%post --nochroot +# For livecd-creator builds only (lorax/livemedia-creator handles this directly) +if [ -n "$LIVE_ROOT" ]; then + cp "$INSTALL_ROOT"/usr/share/licenses/*-release-common/* "$LIVE_ROOT/" + + # only installed on x86, x86_64 + if [ -f /usr/bin/livecd-iso-to-disk ]; then + mkdir -p "$LIVE_ROOT/LiveOS" + cp /usr/bin/livecd-iso-to-disk "$LIVE_ROOT/LiveOS" + fi +fi + +%end + +%post --logfile=/root/ld.log + +cat >> /etc/rc.d/init.d/livesys << EOF + +# disable gnome-software automatically downloading updates +# cat >> /usr/share/glib-2.0/schemas/org.gnome.software.gschema.override << FOE +# [org.gnome.software] +# download-updates=false +# FOE + +# don't autostart gnome-software session service +# rm -f /etc/xdg/autostart/gnome-software-service.desktop + +# disable the gnome-software shell search provider +# FOE + +# don't run gnome-initial-setup +mkdir ~liveuser/.config +touch ~liveuser/.config/gnome-initial-setup-done + +# suppress anaconda spokes redundant with gnome-initial-setup +# cat >> /etc/sysconfig/anaconda << FOE +# [NetworkSpoke] +# visited=1 + +# [PasswordSpoke] +# visited=1 + +# [UserSpoke] +# visited=1 +# FOE + +# make the installer show up +#if [ -f /usr/share/applications/liveinst.desktop ]; then + # Show harddisk install in shell dash +# sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop "" + # need to move it to anaconda.desktop to make shell happy +# mv /usr/share/applications/liveinst.desktop /usr/share/applications/anaconda.desktop + +# cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE +#[org.gnome.shell] +#favorite-apps=['firefox.desktop', 'org.gnome.Calendar.desktop', 'rhythmbox.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop', 'anaconda.desktop'] +#FOE + + # Make the welcome screen show up +# if [ -f /usr/share/anaconda/gnome/fedora-welcome.desktop ]; then +# mkdir -p ~liveuser/.config/autostart +# cp /usr/share/anaconda/gnome/fedora-welcome.desktop /usr/share/applications/ +# cp /usr/share/anaconda/gnome/fedora-welcome.desktop ~liveuser/.config/autostart/ +# fi + + # Disable GNOME welcome tour so it doesn't overlap with Fedora welcome screen +# cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE +#welcome-dialog-last-shown-version='4294967295' +#FOE + + # Copy Anaconda branding in place +# if [ -d /usr/share/lorax/product/usr/share/anaconda ]; then +# cp -a /usr/share/lorax/product/* / +# fi +#fi + +# rebuild schema cache with any overrides we installed +glib-compile-schemas /usr/share/glib-2.0/schemas + +# set up auto-login +cat > /etc/gdm/custom.conf << FOE +[daemon] +AutomaticLoginEnable=True +AutomaticLogin=liveuser +FOE + +# Turn off PackageKit-command-not-found while uninstalled +if [ -f /etc/PackageKit/CommandNotFound.conf ]; then + sed -i -e 's/^SoftwareSourceSearch=true/SoftwareSourceSearch=false/' /etc/PackageKit/CommandNotFound.conf +fi + +# make sure to set the right permissions and selinux contexts +chown -R liveuser:liveuser /home/liveuser/ +restorecon -R /home/liveuser/ + +EOF + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bh.log + +mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images + +wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/iso/ + +virsh pool-define-as iso dir /mnt/sysimage/var/lib/libvirt/iso/ # Make libvirt aware of this new directory by creating a so-called 'pool' +virsh pool-build iso # Build the pool +virsh pool-start iso # Start it +virsh pool-autostart iso # Set-it to autostart + +# Add a network bridge. Still need to declare it to libvirt/virt-manager +nmcli con add ifname br0 type bridge con-name br0 +nmcli con add type bridge-slave ifname enp1s0 master br0 # to-do : generalize this command +nmcli con up br0 + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bhi.log + +sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci i915.enable_gvt=1/i' /mnt/sysimage/etc/default/grub # Load kernel modules in grub. + +# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd +echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf +echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf +echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf +echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf +echo "kvmgt" > /mnt/sysimage/etc/modules-load.d/kvmgt.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) +echo "vfio-mdev" > /mnt/sysimage/etc/modules-load.d/vfio-mdev.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) + +echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested-virtualization + +dracut --add-drivers " vfio vfio-pci vfio_iommu_type1 vfio_virqfd vfio-mdev kvmgt " --force # Instruct dracut to load the vfio drivers +dracut --force # Regenerate initramfs +# Doesn't seem to work +# dracut: Cannot find /usr/lib/dracut/dracut-init.sh. +# dracut: Are you running from a git checkout? +# dracut: Try passing -l as an argument to /mnt/sysimage/usr/bin/dracut + +grub2-mkconfig -o /mnt/sysimage/boot/grub2/grub.cfg # Update grub. Does it fail ? /usr/sbin/grub2-probe: error: failed to get canonical path of `LiveOS_rootfs'. + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/ldhi.log + +usermod -a -G libvirt liveuser # Make user "liveuser" part of the existing libvirt group to allow it to interact with the guest-hypervisor. +chown liveuser:liveuser /mnt/sysimage/var/lib/libvirt/iso # Make the user "liveuser" the owner of this directory +chown liveuser:liveuser /mnt/sysimage/var/lib/libvirt/images # Make the user "test" the owner of this directory + +# Create a file to autostart virt-manager +cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF +[Desktop Entry] +Type=Application +Name=Virtual Machine Manager +Exec=virt-manager +EOF + +%end + +%packages --exclude-weakdeps +@core +chkconfig +dejavu-sans-mono-fonts +dracut-config-generic +dracut-live +efibootmgr +elementary-wallpapers-gnome.noarch +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +glibc-all-langpacks +gnome-shell +gnome-terminal +grub2 +grub2-efi +grub2-efi-*-cdboot +grub2-efi-ia32 +guestfs-tools +initscripts +kernel +kernel-modules +kernel-modules-extra +libguestfs-tools +libvirt +libvirt-daemon-config-network +libvirt-daemon-kvm +nano +pciutils +python3-libguestfs +qemu-guest-agent +qemu-kvm +shim +shim-ia32 +spice-vdagent +virt-install +virt-manager +virt-top +wpa_supplicant +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes +-gnome-tour + +%end diff --git a/flat/flat-s.cfg b/flat/flat-s.cfg new file mode 100644 index 0000000..bf9dba2 --- /dev/null +++ b/flat/flat-s.cfg @@ -0,0 +1,73 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled --service=mdns +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# Run the Setup Agent on first boot +firstboot --reconfig +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%packages --exclude-weakdeps +@core +@hardware-support +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +initial-setup +nano +neofetch +pciutils +qemu-guest-agent +spice-vdagent +wget +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes + +%end diff --git a/flat/flat-sh.cfg b/flat/flat-sh.cfg new file mode 100644 index 0000000..7a4edb8 --- /dev/null +++ b/flat/flat-sh.cfg @@ -0,0 +1,100 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled --service=mdns +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# Run the Setup Agent on first boot +firstboot --reconfig +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bh.log + +mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images + +wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /mnt/sysimage/var/lib/libvirt/iso/ + +virsh pool-define-as iso dir /mnt/sysimage/var/lib/libvirt/iso/ # Make libvirt aware of this new directory by creating a so-called 'pool' +virsh pool-build iso # Build the pool +virsh pool-start iso # Start it +virsh pool-autostart iso # Set-it to autostart + +# Add a network bridge. Still need to declare it to libvirt/virt-manager +nmcli con add ifname br0 type bridge con-name br0 +nmcli con add type bridge-slave ifname enp1s0 master br0 # to-do : generalize this command +nmcli con up br0 + +%end + +%packages --exclude-weakdeps +@core +@hardware-support +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +guestfs-tools +initial-setup +libguestfs-tools +libvirt +libvirt-daemon-config-network +libvirt-daemon-kvm +nano +neofetch +pciutils +python3-libguestfs +qemu-guest-agent +qemu-kvm +spice-vdagent +virt-install +virt-top +wget +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes + +%end diff --git a/flat/flat-shi.cfg b/flat/flat-shi.cfg new file mode 100644 index 0000000..99c7a21 --- /dev/null +++ b/flat/flat-shi.cfg @@ -0,0 +1,119 @@ +# Generated by pykickstart v3.32 +#version=DEVEL +# Keyboard layouts +keyboard --xlayouts='ch (fr)' +# Root password +rootpw --iscrypted --lock locked +# System language +lang en_US.UTF-8 +# Reboot after installation +reboot --kexec +# Use text mode install +text +# Network information +network --bootproto=dhcp --device=link --hostname=phyllome-alpha --activate +# Firewall configuration +firewall --enabled +# Use network installation +url --mirrorlist="https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch" +repo --name="fedora" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name="updates" --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +# System timezone +timezone Europe/Paris --utc +# Run the Setup Agent on first boot +firstboot --reconfig +# SELinux configuration +selinux --enforcing +# System services +services --disabled="sshd" --enabled="NetworkManager" +# System bootloader configuration +bootloader --location=mbr --timeout=1 +# Clear the Master Boot Record +zerombr +# Partition clearing information +clearpart --all --initlabel +# Disk partitioning information +part /boot/efi --fstype="efi" --size=128 --fsoptions="umask=0077,shortname=winnt" --label=efi +part /boot --fstype="ext4" --size=384 --label=boot +part / --fstype="ext4" --grow --label=root + +%post --logfile=/root/b.log + +localectl set-keymap ch-fr # Set keymap to `ch-fr`. Alternatively, `us` can be picked. +dnf update -y # Update the system +grub2-mkconfig -o /boot/grub2/grub.cfg # Update grub otherwise the system won't boot properly + +# In the %post section of the kickstart file, add the following as the first line. Probably useless : leaving this uncommented for the moment +# See : https://www.opensourceforu.com/2010/01/roll-out-a-fedora-remix/ +# sed -i -e 's/Generic release/LFY Fedora Remix/g' /etc/fedora-release /etc/issue + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bh.log + +mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images +# virsh pool-create-as --name iso --type dir --target /mnt/sysimage/var/lib/libvirt/iso # Make libvirt aware of this new directory by creating a so-called 'pool' +# doesn't work + +# Add a network bridge. Still need to declare it to libvirt/virt-manager +nmcli con add ifname br0 type bridge con-name br0 +nmcli con add type bridge-slave ifname enp1s0 master br0 +nmcli con up br0 + +%end + +%post --nochroot --logfile=/mnt/sysimage/root/bhi.log + +sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci i915.enable_gvt=1/i' /mnt/sysimage/etc/default/grub # Load kernel modules in grub. + +# Load kernel modules by adding vfio, vfio_pci, vfio_iommu_type1, vfio_virqfd +echo "vfio" > /mnt/sysimage/etc/modules-load.d/vfio.conf +echo "vfio-pci" > /mnt/sysimage/etc/modules-load.d/vfio-pci.conf +echo "vfio_iommu_type1" > /mnt/sysimage/etc/modules-load.d/vfio_iommu_type1.conf +echo "vfio_virqfd" > /mnt/sysimage/etc/modules-load.d/vfio_virqfd.conf +echo "kvmgt" > /mnt/sysimage/etc/modules-load.d/kvmgt.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) +echo "vfio-mdev" > /mnt/sysimage/etc/modules-load.d/vfio-mdev.conf # Load specific kernel modules kvmgt and vfio-mdev, for Intel (tm) GVT-g and Nvidia (tm) + +echo "options kvm_intel nested=1" >> /mnt/sysimage/etc/modprobe.d/kvm.conf # Add support for nested-virtualization + +dracut --add-drivers " vfio vfio-pci vfio_iommu_type1 vfio_virqfd vfio-mdev kvmgt " --force # Instruct dracut to load the vfio drivers +dracut --force # Regenerate initramfs +# Doesn't seem to work +# dracut: Cannot find /usr/lib/dracut/dracut-init.sh. +# dracut: Are you running from a git checkout? +# dracut: Try passing -l as an argument to /mnt/sysimage/usr/bin/dracut + +grub2-mkconfig -o /mnt/sysimage/boot/grub2/grub.cfg # Update grub. Does it fail ? /usr/sbin/grub2-probe: error: failed to get canonical path of `LiveOS_rootfs'. + +%end + +%packages --exclude-weakdeps +@core +fedora-remix-logos +generic-logos +generic-release +generic-release-common +generic-release-notes +guestfs-tools +initial-setup +libguestfs-tools +libvirt +libvirt-daemon-config-network +libvirt-daemon-kvm +nano +neofetch +pciutils +python3-libguestfs +qemu-guest-agent +qemu-kvm +spice-vdagent +virt-install +virt-top +wget +-fedora-logos +-fedora-release +-fedora-release-common +-fedora-release-identity-basic +-fedora-release-notes + +%end diff --git a/img/desktop.png b/img/desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..5a62300ba5b67002f0db8dd28867e87c926b0add GIT binary patch literal 24626 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 literal 0 HcmV?d00001 diff --git a/img/greetings.png b/img/greetings.png new file mode 100644 index 0000000000000000000000000000000000000000..1675f11431fd74d02a8521e3abac46d581660463 GIT binary patch literal 67507 zcmb@ubyQSs_%=F-f=G!dEhs6{-JpUX(%s$NodVJ!-6crF&;tyObayvH!_XaPpG8C%)I5u5ly zpf?~KN>AOz0AwWb)wB@EPdd)5iYxihK`NtiMRVb?q_Nr zg#KSzwgrpl3M?e>Py4c(xcr`z2;~U{)8EI!1>Q*B<$YsxMAg=>Fr|8ns-Inek^>ra&^!v0vsr|X~eL#_6AA_NRm z*@7N}gwa#R*0Nbl-QTpM@Es@^Ox=ohTp0gn{!gOK^Ju=wD1FK*As6x3K{PeC&1fVS zv_J{{AR6jV$>|d$_-}_LZ@WW3M6?v4p3G>kathmtSE*|0wk}OQ7S3owY^bibjUD%bcZH|P&C&if%9GFk_>|WZr3p?WulDQr#3?E^ny-iQ(mi+nBwQ^ zJ{ctwz}(0lQP7)~pjJv{JQmI1jG6m)Fm+csTE&H*h5N~c`H8Ztw?V^$?oAx^>kceY7drNt}-l+?5eX>Nz}6-u|s!5#&78dblL6eig6 z+J!w(!s?=szo|+;{wk~dh!;##i)F5x)p+su@odYgs)0PKl+Xgvke+ORnN_TC33GXi zV&H``3aO&u{?$Wy#qB~FB^2MH@V>=ey&$ZLCET?7M@FzvGzGB<7C;fPqM<$QgiFqB zYDV(&iitJG(llW?XwOtiy-1buLOLmZf=48|e&yPlb&2{;7A8AP0qh#oyV zprGX?a+A_xtCgu@6VYIL{Oc_+Y^0r{!dT&Pa{pI>NUrsFJ-wrn>CCW=VJ4>3BE{r( z#+c-PS8h*y^!KWbn^vU%`Mn+7QXqYL(TkEXvA2g(VEPu%?;^BY0 z!>Bd@dKHEp`yn7Ap{dkw_KIZv{K*p=_fk$%(Z6%GgEg5|?XThm`g!Z%DHpSol9B}l zhi6u1b2_!=V}oZ)b=olHt%{fPkLJ|$@-2j4<~59eIpy3AW@0{fP23Pr)1s!YCgtZY&PDR zG!G&TLVPAMC1T2V(2Bp%5+ zTm*fnNSR>26d5vg)5$nw@xi~SFf0u1=}enefofXw^o|k|=KWRfO3U!Tz@o~5`4XgR zyUJK$i()oYM?RD>*{l(!Vpg9-SawOaNNGj#Zx!^Yxv=D*&wr(D=FzA)!U|^+HX}`% zk|P63jL6d%+B~P~Xn*lp)#GM`^vTIR^42}a*_gqZl`CjzE|~Ng;e1GnOZA$jX_IwVRQlfLd_r zZokQJpnH4)l?>anm8BjMr>dg;YW%muo5y33ga?oT z?>E@ERVL=~(O0TwW4oTZ@6!KT*rRA^J`!m+8g$c}`Ha4gfVy3kQ?%G~<*N$`&D0a# z+h7uMSY;{=?(;J5l;Ch_+Qkpgu)=P_&&@{Tij`}FuZeGQK~D3we1b?AXf=yc%X~M~ zDS8r_+#60C9=~s%X#H^8e69(OPfzFZ4e|2)7!pfGN*bofLL#lD6g@MRxMpmO8djHM zUF?pQFeiScspg^3w>P9zom;?=-$f4eFs#i}AAn}R<$AdxIze_Xc9B&=&EYA6k zq#7?R*@lOQ>+cqGlN)xG78BZd>;xWb576AV>p(bqZTblY&D^}gTpR zq$8&D7ZEDvGxgs?)8-SMkDS*%Z>R%~jy9vxIuznH`wT*9!&aJ#GG$uc^WS9l#*6%$7viI9 z6%06s)3{nuu?@K5(PLx!loFhY6}hR)_W|%z$b5I4#ccQHbn2E|?!i@x)4O-Pt)(r# zmu*%h`lsgt2kW!&$at*}i<%7=^I&=^3hHjHf!21hg!}1ueFLM_Q`fB#iqu3SNrTp! zveORE^Q=qv(^F;)VqPH`Q4}l;? zE{G|72S3{7`nHy+i|b2zXqx#j{Y_MEniq;U6^Vy;<=9Khh7E*! zCgMZ~BWXA~Yx%xH&|#z-JX-`((y6{-J+|eqeyq(8c3QY+H1ky6@#?p_w{2ip-zm}Q z%UkY@QPa}ETu-7^tqbkEyF~*@-S51Wjf%S1936Do|D_ZZXnkO`Oe!2{(%roNygQ5^Y!ApoMQsdRv3}oyKbvI3kjiS za4Oe@InCWfsPLY_jk*}#Wfv8tkW3VB1m&ikH=X^OTv!7>8JQVU0$QA9m9F_Pj;wpn zBuxIB?1deOO|N2baPZc27GYKZCfVD!-z1VD2hDm?2e+6z+q_Nd^>^suzdBx=RF%9q zwqs}z{`83`$AlPLOyjiQuwuBu4A;@fpkgWH^Eg-{b_cu9O-@$5bsm$yb>@`NWRgBo zrp-TUET2rR+MwK{Q<5=L4Kh$^6~8Iq4i81UI@uOg{rc5+yV*<2HB1VJHajoxaq|2? z63OJzjTrcer3ljE3po}jSs^^>67N7C~0tp#iX7w5O8 z-OL~)jLnUvaJC(1M!1CDwq`$`nqaD>aRd6<@eBoBtmJE+i;&IXVj2(EQ*wHCN^RQH z@l)-R?jP9U;fNKUZHA0GZ8`lQp!exI3!a2h%Pgz;C2SH@U8;@-F>tIMoXYkHNtET9_J)Z8Kg|-Kicam>(FqoUR zTu9M7RqBE&86V=~L)Le@CI_PDwW7q;uqFmE40uLk@?ZH)E_%l2M^i0ZPubMYkFQjy z6f4u>csjuhes^}tsjGjI5oMCh4M_$Z;rI4-_bPj8L1biN@^Xq2FFiezzAAQ!XsA`g zw*`FsMx4jsff5`s4YanU9x>0By$WLOv-<^uR#Cn1X{z(3%#4L(L}W}^&Hcwq3|<%L ze05iz`A*!aFL7R7PTcQv)L*R=EhJuJfhsJUx&=x;l)_?S;!2ka+d*jDnF9AUhj7r% z>Ro^`)Kf2YLrp=<-QTp3XG2PWCeJP;(E1_*W?y?TKd!`Ru#)fGpa~f4)hFrEwH{Pj zbSgawGGyJrno6iuKeFyH`KI^C$JL5J?)*`^vRvMd{V(kuIUzr?yuqE=cy;mXvppA+ zvt-cR$)wqr?J2BLR+~EY@t$gxVuy)SfAwhk)X|4!_76)=wD0LQpQ=pU+%*3B^{aA| z35$tIzPr3*ou@CU8k)LJA$__{qBmxaen~m4Fy+XCyB??fbr(l zk`0hUAsy9obF(m4XvSk6f8kQmAk_*+!+D#)z{+PP)YRluR64p*Nm1gqvLa`DgE|`} zv<03K4%<`TZ1jZnbVtBW{$3uMANeUYxZJk!i!_?PIS_J0RykqPD0xJfB#~48W-+~x ze&j(lQEk~F;1@Zfo*xm^Se!0;op1t~Of{=SOb{2oJe@((AtNvR_EKWCx(uRpCh0|52*nyXh?bpJ24wD0e zbSRtNQ-#zLmjU$J^%hS}#PN9x9;dOZRCzNEt7bNQW@`|j(#jAU?CI;XsCcdBP?p@I z=~f06;L4T>^_|d224HP2=4jZI9^BG9NT-C%FcwjGmZ&0hUh**Vk@;bn1ed*@5nKM% zm21-`0n0mMjVBZCK(a|Xk~3!RvE=CXXdjn^WW&p{g82458_gXSkL{GUtX$L-L?Gaa z7On1lhXg2vUB~?kl50p<2p2(mKW_TG<@r6SvErpGJ5%9pIgjDkml4_Md}@CBaG#%K z2)(mVFM$YwQz9TX_4K%6G#H`gB*Nl7AE8;pB|5xcZRGE_xlN{t)BY?Xa-FW^VbzZm zW7p1bA2BX)(-m-xJH$m-HB+slCA_wj%Gve(*GeLA>PH)T&hNTad^da#j2jJN%o{+F) z$PZN}BpK7MFH*TL>wfz|8-oH_g)}`8ocdgU6!E#;=o#+LRfVX*8{?stwci|rP$cL` zr7bh2j~<6f7(XW9$XY+%o{bg4iDX~;Ac?WVVZP#bcMI4WvRY(JgrNqrjU)j~qyc=T zA_yMN0QaqZnwJB6y2s%w0|S^h_`8q>7`3v*Nf;BYt(jE{oT>C`nSJa{Dv)oXoGT~)QGXMAxqUk{nvVYk_>LW`U72Da$A z(R5gIP@jnQ+WwKtlP51<#S^JHzTTK4n)I41+4b*~&Fr46OFKsG@*7*zAK>+PalG!; zF)*((Uj5{HAts)SnucZrcO!jgk$+Ah_ z$L3fWqLCC=YHhlE4{k_&DFsV(WsE)sF~7LtnI?ComC}Yd6(7{8-LPWW5$Xc#=Q3a5 z4h6@1%`RyvC9hs_P{c{A@66oX)Z1N{cFO`$TwyWhSpzkY4UpWql5OSZlRIn&&Knw7 zv}=EFaJ{lz0@Y>bUPs)rdW+ zlKrULb}gMGf6pAXfX_Ew??BkzPI0n390oWoq?7ahG`U1$Lgs_b8s6oS2Uk_*u_1YN zvftl!KJUAA7IuDeL56uWNob|BQ*F_&ATD_P^kc3?az(G`8-+(o?^T3USr(n-T~*(2 zNTzoX-n)?iI}91vQorlHC*#V;?!4p0-!y8=@)G$h%y=0Soyc*|0-{WJv@O1#@Z?=Q zF7$N4(ik1NIOzpm^X}KbJA@9sHqzVdzm{BTVNyTm#5v(BpeQ>we;;3L|b| z@N{gvSEdRl>WJyiEdye4qJiF3YfWN3k&V$G+}7j2aCMZ?8#V9HldCNamb~xO9ft>9 z%5b!ca5(lL{9H=g?UcYP1x;onzh0v!?$HE9X_fAGB#|Y$L$J&d@IpYm8-*Y5M zu4lAMTt*vtw)xM2-4bk+L&hX(UN3I+8cQF7FldiZWg%lgU+4CI*TF+07=p~0eNtN# z5+Z;nw`;A~a&g7Dfxw-U8lyhlA%i!_(D{~yqErdGpPvc2A9FivjFzgJ(y}+J9vUO= zz6#0e$wI`dwm81>s_LT-3}l_}cUpL`*g!;@8n9oRH60GM9-h3}n7)63i``~-?;?Ji zW;QH4sWsDh#V=UE1HfO!Qs71^b;Kfslvg2zJz1#MO0;RgB35DTMP>2@apM+WQPCZ! zv9R*nM_w(K?k2-8Joj8d18I)_QTU|j8G}Cp1G}Vzv+Pjm=3#5^s=~1&tAFA*f`M?m z|H!I|jGZ#cBv)$f2H$AMjZwKy@)McBKd%*_me{h@EiRXL81#34CxaXFHn=g29&{EKwv7fjndp__(ftCpHRdH>H-N719YVZ^Nd ze-ZV-O0G;X<9Atqfg#fVY>JM5fo3cdng1ZAFUi>D^i z{tM3bqo|;U0p`N5;N9PGa1DH?&9qtRj{c+&^DpMLF$VklfY1yP1?ztg%Y6D568}HB zY{G&P28FwM?^xE?PBf`SPrOhw3nKfGY}w?i2Cs(>c&OUlv>5Lk2DJKo*RmZkiEexS z&%`S~R$C)WkLyX@BtsTF&l65J`Vt0yd_<(Crb88!=bv1(C3HL6H#iHqN3Xd((z=iP z?I(11IduE6^C|)g|CL=7gKRYJp|=?I9_(`OdFye&5|9x4uyFm}DYKsvxdJI_Eoi+S_y)Cvdy$bOIj*kR@AYr(NyU zb-HDYVnt|0`DO2-RR$2G-t0trVUytE?*I6+hvaCggBlJ`lE;PNnhoJ9UgsW|Ka`}K zv(6XQcFY8l?y12|Yym~Pe3e#<;V7$}hslLtQp)!Q-8NywY*7PSCiMbN3rrm4a8JgF zY{^tSuaPP5vIYC=*LeOPT}=tnX_cFo+gwtZY)FpXAn`S0Ad*0LBKT$`2r zass23+>Vmm8uV$Edb^Rh`?aI4BOdfaXk1**c7SPr>)p#%o7}&->gmOETM0tvhty0d z3rFC!KH9`yi+k;Hy&a-qRa)Eqxr< zL@b67kKxYtj2G6fgC~!>k>OF#Nidr$?FQPKmsZag5i*v#uyO`CZBN&%2eD4)&CHhSD^HVJ^fK%4Pr zXYm*IxI5p!=Dk}RRkuC-Tz`0kI_I!MSEK<=bK8eDsf1hMAw4KcD?`)I($cP`#+u5Q zCtB_UeOpF4Wn-RPxLyrtZMr%Gh2W!05fa452^DQ8O_fTHb^G+qr^(H-(ga;?0b9HeeIhIDH$%gEF(T)mJz?wuwMTPeU z+_@8KcQ`3lrcBqDc>9c`&&Bs=YpW^Pr2jOdampW!2nb5_#<$@JU2~1TBO}aTzlu#a z>LG&`i&cHwmbIl>?C+V-d;z2d0FTVLWR;b7JXEeagML#%!+l6_{!~~6)^+)oZ=W8u` z)z;MM=TW1gqb~Nwm0rAlEoyI1?ytj29VeQb z+OricnFRol_B$ir3mKY1TM(tRTX415ww(n7&`7DNg9dS~RKw~yoak8w_^}I5r{2qI zO#?a7hNf#!db$^Jyv7ZxtNqSb;X&e?-5a~Dp=D#S;F>8;%ce`=tMk3y(zm{~Yq+>& zwlF7$j_F@^MkVzpFGz_nboKPO?&s`o9#;HK!W0n(vM(}*K5Tm&RHR;&lTw3$g=nnvS?4{b`IB@={v4D* zIa&$f)H@OaOy~vdUZX20OZf4tjpce?%gfHxo85Z5%VW5g+TJntZdIzyI_p9*&)|Js zD%9y1*hs>dFMk|l*YQ3csSr8mRo*?bIAst9141jM`{R6LAj>F%82HGTAV%>=u8YM1xgKNp7uKlH0TZ?f zkkq9!0U{`*?75N3;;VIkIOu-grb>iCs8($W!)&^BXaED%%cpgrABs76iLI)dz|ccO z-Je;Py(C^zUu|Cip~RfSB4W+lenxNpRv!TMr5mNMW{TW*i|R>c%XNk$U=y6iS|l05 zg2q(R<~19x6!!N|k)~>W+I7)u7IrM=Pv1;U35VegL=W;0rZu=-diI~+oE6Y8N<`yo zdB*a&odZP<0R8td8-GsQ#<)2OrIAxZFzzFCQ~Bt@t6_`UVqjds^k? zy}*Dr%&-UW)qvkX`#ajs2Un`0hKHSIC99d&aD$7Xw~edFE*5ffvUqkY#()S$+}&Os zbmyYhTm|>~zSsI=byd?9Ct=x4+_}H7aB+J9G^W~F1=uk1EF;W?be@RwbX)s~YbKvhZP8R~Ss0gaM|Cq5uzZ|T@#9fN}O4GcKm zhkq?AD--A6lLru{{@T$&j2bCM11HJz29ia0Xu0SitGrnWa!bbqM2ci(MHldpgn){= z8t4x}l^Dz&c^C#geJ^S_uTCtLTfv#!xw#09mc;!I646oISlF-oCoE>jnMt2F*!=>y;F{I^UG&i_2_|zK6Zvju%Dmn1HZ2>xXNd7vEwinX;SNi;9{+JdMC1UaFmo$bzYy(#W z>vRsJ(%!EVTGk#*?mF_Uc7$70o0$SH+H6ffJlf>|5;oN4Boa^kJ0nzrm*95Y>0-LN zq~O6z5+I~PP9FcNs!EWX!rM6Ao5T#Wzq{=lt(n&xC}EyA5KQIJ;}*E72`}`zb_*8! zdNW#`#sxzIl8<)y-3_kzsQys%w+DxRwy|Md@3OcYO>b~Ht)C#p()?qD#4^%j!UzTn>EqsqRQ2crxnM+i@P-0OK1$ zk3!_m5jQ(F6D5nyVuSpz_oe@6Ww_WdQ`scQ3`Dh5aJX6GypP1IfMXT=C)c~Wx!43U zFxm9hR?XeAb#)_;1#x7v}h9llYZb19!w_Mw6fPDZo z*2otGq({*Q6J`tnJdgh*NG8JnrF5hg;lS7bw2}39ng8Zj7Lr{ZLsLy&UU|U}mJn!> ztLj}Z2&k#4Gv9yxGiD*7aJ&Dre)1%SBOhUG5NA|Yz64KVPXMJ48X1}4N_dQrx%($& zJrm38bND1DrLDTO2F{qQ_r$Ew3a6~5=0M}E+dEqN?Ci>y@x9;MEUDfz2Tx6L zj>wJx+^45b2`>zDOrjDKyMdgjySLYBjA^DyEL#e`ps%m5UAZ2b`Da>w>K|peKqzIM zowvC!2dhPLOZAqX{lJt*P?saWfQNhRY{td0h7it{0zXCX;OydgDH zc-#)gQjh_Ye%tyw^TouV-c{YM46K*9xWEF2?gXMTmQI^bnX_|O!-WFQQl}~yLXK>y z8r;q-4{Nd=X38CCH3kE0;a-0h0(gk|qCLlYk1 zdRI~oFl<{}Oxr7bxy`A3Y+=}~TGcf-_9!bO2z#3-zU?u_`g-|Ng_Ig^W@Nfo!q2Er zNa%PyXQ^rkzLhcdy1FZ+JiE?w#Om}^Po7-X%v;uFI~dG{)2(fgP%@Qygmg@(^AclP zLI?}TgU3x3a04iNdV8tZ+2eM1%~w`eZ#kx`@?GurPF+3Z&~aZ4*V=6eJE>ge1K=?g zJ$?A+Ud1vauY(GLU%BKqJ)&e?eRB&w!+$7ptP#`4lgzh$hvrlDsNP#f;mgrd@zj~a zBS#T0M;blcENeGx6pOCPL^}ysbQzr%PmqBx*yZf2dS{Y9yPD#j?e})TY)7l?ICS+^ z%aqa3u+0@|*v(!l7RKJ(@YZW$ioTBSo=F}zd_iCdNv^*UoZ7?C{kd8?T{LB04Ef5H zD%sQ1oB6dD3C*`F_)yGrcHNru6G5&H9yvL=w5+Ub@hf2uz+MBWfk{hOxWGd2H?Q;E z!AvpNuk9Nn!Q<<0mCCe0k#LR}lNf>w>4fO-O>6C){?W4H>DbYL!@27aE)#29b4AqS z4F=dzMZkBSB1*Fcr}S6u#US1yWVVilzXZy3GD`jlB;K`6t80p*0*T~1VL1DpwA$$RyUwDsANI^ki zK2wbax!!a}VNXtN#J>eirPN|UW;HC-nlx|QqJ}^>r~Z=6@Lk1nEKXmSuo1kLUp-I{J6EuGcaxbQh^Xx=mA6GH-` zM#{4~?Vz8chMF0zp&EFKzLI5TfnV#1M=uc<$|sq^Eb$f)m0wfil^J2dT%(w0pKxY= zZ0ZV7gH=`oS|%hSB4?fLU4PRiB=ULHT4=?(vgEh_=+^H&N1N^L=$m=gINIxHO6}f1 z03j)(3h!h@qs2khVo>uN-9mFo!3lW+cO+Z~V?+%KOT@PKw>ophqzZa5bF55z_p}d?L zmMQeOl15yT@c?#|#qokSH6D;cD!Zke11ei^m18w?tigqE9PQVd<)E5#etQmHM z^3|wY*5`D$2y&5AR<^+a3B2C+?S*wPqJ_W28KN)qsIth^$3wD&Kvj=^W@r0}F*L+D z?#&?lh>!17vugO>Z+HyfICY(!!<88L7bBAfj4t`_ruzO;9n-I`yG=`RF)agKG1@R4| ztFHX~0sIYiM8O*T-jLe{+R(W6eb%>kuVv41+1AYlI^Wp73LQRkeqWa@fB9;B&sJea zaY&ZC65h3Z)0Um zPMnD1TKNTMMCW?q6nZMn(T5Nb2?^Qu3}7{UQCH^$0tX>ZBAte1b~Ni+b?1gg1QkAF zO#1jaYMSTp-e>JlhEhSm*>aMyl;1$$BM9?(uCzA&?Qb?KvJ#_@LJ_TA|}gz5cDhBI0*}M)2U{ z0CWE972@l-Sdu-0B{BUA&yP+nb9WoW5r7rj5i@jdaBfI5UFD67i}TO^E^KN`fNXm% zBd`9&kL*Q!Z?j2a>vnM@+IITDjD$+U`g3m8s6*GenAmt(RZRfVsAe0_0k(!!LTmC3 z7#Tb%C~AV@m>gC)W}hNS<#uL>{R;oHyZWQ>z^A+HYRWGN{dJaXFYAc7G$eU7BLspF z6kZUp^Z2*RTByBKp^Y=8V+F~|$%%>;^0P>pnwnNU>^sJ^Gl`Ox4gQA)(Xfe>KJRTk zNVJ+kcnRfS|PsaK2zsPspi$ zJz6?+cGE5!HW2lIrueRZtql$m5UX*a~%u@7x=P&<*eF5H>X*AVKi}(S_y-ZKBPHm{8hT@ z$Q-rEc3(ulwisHRS_P$#o1RjzGTwHhwUugDDFa5WE@f($otfEH&Ux*r+nGUh!c>}H zjWa13nIJKEe))ikRee9WZp~H){N+)NIz3>W9HEF}pFgz`uONJUYmFKh}HOlbVf*UP_@JEA+>Qrf7c{MF!voj*~#WAd->sRVT?`jPv%0s zX&TZsG~Sf|=orC^opf$Z(82R>DNrax z9B^f>@glLsAYPHyL?8w${Z+a`*cs6+NB+2OvD1CQ^;FR^$#v;lRgX%`h*<&D&$Xi} z1~!*S_x5$}z8s2ZXsV0o-+T93_e?Hv2$puZhk*D507Bo<(f!IE<3Q?a5p2xa{oXF} zj-Gnu%QBX%+=yy>b0WHq)09WChB%8hbDL?IZq-aF9u9z+D>v!TnNa5g0f`?>os2BY z-68*{TF@`jOe}nS*rFj5E$1$V_~?lhYE=OpD*$r>(x07^vt-R#K$o9S4Y-|)b5sY^ zu&)o=(sbVsF1Ve?iNXhA1o*ZE9KUg{dOVnWnC^{kPC?mYR`2`o7dTy@`;p z@Y0zx+doFxPvevMV~7UVw~J4~Z(&V~VB+0Djct2*qU z8I#em&e3yFoouyS(eWhN7hzx7=N47c>I1s`lQfI5LG#(Oi034@5hkrkBom+?wH|;G zc>d~@guT3dm#!&&buc{@UPoCsTH!08>>+AGJzH&&>7k1(xhe3xjj@%T%|b~3F}+dj zHvu|DbxB;T$VSZk-mO;CD&p62nYzhTk2PXU3uZo%adQ(S_X`6CTd|PAZTryqMs7th z90fbLM82x_1Q&O?$oS*9BCr}BS0@I?>-{mYmpP8%;rvO>wr;!$0O45eS7TD6Pyk@e z_Kq4v(o98v3=Ia8J;XH3CiX}?=P;J*RdB8A`hi|Gc=p6Yy0i9XSEv4Hn0bJ!)~S$0 z0CDEir?%DP_O&Yk4Pn2w$@@-SU}sfni0PDR8-E=c)*j)SfhT=)b=A>9xxL+u9@m1* z?~Exz+FMKJq4)xpkMg@shsd#B{&4J@1g0H0I^sUpd()1Yu4)r-Pg|UwU{01mML?}Dho}d zAp-229VvUF+Y&C--0^>^i>-uoR7-r|=r*#Jb>mC{+RQaA|N7UKtA`tu3G;ha1oNQ-IN zRh=ma*!!&PngjrUe2$InYvS6L)&*kZTZ_l! z{!%QSzH{%a-5A1y$8P_)wzl>zk^7SdI6{QYh!4mUX#Kx~<4PW*q4@@@M2m}K1E$K) zzb@sEe>FS4Xu8MWf37MIcmRO49X>awuEi1A0~H$uwH2}Bk;oTitz@orw1N71^uL+d zUL5EEgbv&~Y!E>2=sVeB350t1J*q{DN5KS5gR{w!Vt%cz*(k zEk*>&7{G0Sjazbr-j1@0TAL2I$|gQ9pktCx3@n&=@@E3%DF7>K*?OoWGe7_PYmwn*g3bIR`IQ|K0@(kKv;R&h87_)zKu=rz#?2b*tT0I?&9l;B>V1u z2h%MtFMresz>DSr5p<|tam`QnR^6Lplw3}8{2A5D& zD%o4sPNIatBv*9xRO;-hS3AN0CiHT`Es!0Cn|zm%6BR`PI;5ayj{~xQ_GF1-R)P%M ziRg~LR=Gs!KL8U7N8$Ka`LSUH_@ZiQB+DRgBH&OF80|W!`|d8xO1O>eYd)Fd6!T}w zj9!H$U)r=$J`APF(*vK?_>CjZn|zBBJbjy`>jQF`BufP}u;*?i~GhI731P0$(M z;Di`%qx}G?nhW9mH02&;#b>i+%@Hlcr^=#ZMng>Q|7xoG9_qNi(r~_zRasdn(+QwY zq`-(R=b<_kDzSaW8A%mstU~(w&MPNL90z*13O->>Vpzs8+rpP37M+H{D3d&20s7+IR zE`CB#vR*_5gTVlTY|vV^{;s21?5U(J=K2WOO6%v$kdflUC_R(zjzY@Nwqt+KGteR} zRnt&a2AQbri~>V666a-`d;6GzH)wwU&HMLJ2?=<> zM$X8S3MQqu>%QgYPRh&6bA@({Ii>V4ag1?iZ2?SuYQTO%pK$ zg?`n6+LbHQRjw~Qqoh=vSN_9C0NA>~bv;1&TXq}*3NKuNgHNPcx~+d%7J-3}pI7?{ zUrUPCq?9O5e{ExJf!Po9Q|I5M{!tPkA@a4>xS_x>sW+7DapmQ*yq1{7Z^1f`h$E7Z z%4KzRR|CVuo;rPb@L@oE@j)5+$=*m7E&wiarX&lRs4!_ttr|KS)8iC=&+EdA8s(-* z{0o_m1b_F4i=Mi8th*Y^YYZ@ose##KtK`xDIV1PfudMe^{`Qcg=u!U<&icQ?uYTre zVVen4(y#uhXaOJ`SJl7Vm`HXJ6!gCcq={Y3|L4n*>E4hvNT3>3``pYn*oLiAF~ks}a~FB!fiS?fY8`x>sP%0+mW3ANI&F$ z%*@O;zTS!+3+j}TDNma#2Km+K63Yzx2^7Jad-t=f5@{Z1Dj-UUq_H9G$v1Vbs|g8#0Ul;MfZt)AvFhJkZqMnd>?F zOF6a7|L%E;hR5g)uy44}QDT;i^HO=7M!;GESLg6SU_rO%AX-hHpxv3O!fu#<(tkWD zu5kCmc3hCU3oQ0@-)&q$Nx|*^_FiBE$yr#i1KL{r(Fsj0zRA>T^>2h7_RxT()z$m_ zP_S#(lgv!#;dMJDdN&sUJL1*DcdT{w*8i=`8fR2;a&JG!VyH>d&E=riIxJqxaIVIN zoRShS2VFHbtIn6O_{%nuJMYOI*m|4T#<-Fe z1yH5#lVMN$uU0{qU0TXm1S8?J_6{KNOaT5ki)<<%|Htc6?HbAy^qpYkmPLn*^l!?L32Hii zfu@`QOjhAIqQ#pSJ- zaf-)8;{Q~QT9=BRFI)%EW-^)TZz4baJBr95E*tqxN)XC)Mn-pcY93SDUwa=&Bm(%t zPl}2_^@(Yi>3!0b2~(xXO3g#Qs<)ucZ*<}ygF-24d$5&2{lII8#HbIZ$ZtKoB>C(`&jZv@}bWRZUOJ_$I^bh0%LP`_h@+aY=zmh1Hb@x=2` zENtwDl6Wn^yaJ9Bl|~vp6r?&4|LoCa(Dh|4i_1;o##Aj&NHRR>I}niYv3-9a7+qDe z02tDvH|I-l*F9Hul5Ce{Z1 zhn$y4AW=~%eG9kOm#d4Gty{K-`}Gl*d#~czw`zcwk2rp}o>4q~5E7FxNiG*!d_HK| z=8i$pd}-us9;fIkBlvxV)1pq)oKpi_Kw;d()fOYU68a3<7g=pPffc zGgd?!)j04B5N$P-qE5o# z?n;Xn15UV=(Sx{S0*o2+P)W6eeE92Yt2@495;f<+mAz|M*RlC|3aK<#x4QB9@ywP? ztk8q$9kSQJ?@CzZ{)s|bM0RjgVQRK7Lrwy~7d0w|25LTAxVLd6nVy8vt241+n zvvvEg_&hMgO@>DzEUa+9mvOxj8t%5zIBo7Yy%$p5uvBfqQ@D=^0?7+JLI=8@GZMJR zoU!Y`=LTq6W8>5GqpSw16W!=@wQpAY=ArsYIqH)NgsT3x_WivawJy6#Rv`e#x9@hU3)wmH#@y3 zw?*efzkmw}^jx*b_7Uhqm>aB$1Niw8OtC0&JIls{)sKRtSd#|0O`ngl2f`iaZAa0s z7G4XCNbP%l0Pih=8`CVqB*gRXyJV^$RofOy{l)g>7QJ!Ud-v;J*JKWrknMSng$#&> z$1i$bxO&6Q_6`9t{;<{k9Z9#tYjiY>blR>_pH+V$-V&+%ORfBhEDf?OJM3@5Suzdq zbthYQ1keX`y;$srWnu8xM6BDlm^7Y^(;OeCAQz?Um#AAA5j#ngy3ge1nUS)*UQVCP ztxZW>Uh zw4A29QK@SU3=l{;Yu+f;t}xpp>RD89t~(^+)?CbX-J|xnv0kn*Ty2OWnwS9inHj)Y z*uSqarvZVQJFJNiKp@HX_f){eAN@vQU$c<-2dGeAo>yL3bQyMvnsRP|Zy-TzT?rDB z1A6r;$;1;BbW9BZ;)G|OYt=5Ck_057fav}z5ZE3@OkYAV zfg!$H1@r-U{cnN&Z)TzYFKxp5p9-=G3;_B1e@O5D6W9MQq6fD9zs!#R6J}?1#=cT# zlkEpI353OqoUuVTa@`7hyI=a28Sy|tihpyTfk0VrqdtT4O^^x*%9cUSQx%k8FbEX? z963Y9QwS}APkbIEWFeUh*iP>UA;)8z0AH^?h*t&k0f6KIAnXAk-~oW{0l?xv04yXx z!hZm$NC1t89@^<20K6Xn(!_xtg2W#5i7%8Buod?Y!1f>{@ExG5fR$tD1mfMB2U05@ zBN3saA$x9zAQ3$we?Vl1L?mAE09^V3Kos=n!Jz1%AQ5#)BF9;QheY%t0%?+ru^$kT zJs@Jj;s!V-`oJ;ohxVg~w%J3Q0NDmT^u>qlD{K9sE&9;Te`qTawgC6{JsXv`u{l*gNCtq0aiSC_aM;A319^N4_rh2paKlG)=W)>wS;Q< zH|Gr;^-U~HVU|7c8AwG5F_#mY%=ioxH2K8Z_-kWmZvBPgcGWqy6tw|er>qQS&snNx z$UcSrSBVM~kcC7c3aEV>i^ur`lQM~?(oT2Tik!5;f*ZmUc9>Ui!;Xtmby1vlc3y&j z1t4nnA=cx#MEC(o=pfAqBoPUO*5a`>O-v=8PL%4N(7!+ZKfN_&Q?WwZx zm2vxH)92bY?lQzxQ9x!o|@@J5sV;30>!qo!xUBm4QKqOg5J z5#G5%q39YGGwxwdP&_0X;F&zlNTKSh@kxDO^~O3YwZyGU=;OBo@dffi!!OHN=HZXZ1tcy^a(tWB90`595s^pIj;zGHen2= zPfyGZZR>x7UxlZv4J%L@C_h@&i4)GZM+s7-0c0E`o@={jlQQXB7hOc>cn!tL%1D z0)|;Ag$|*rE3nYwccRqxZQk@`Y7gP3Q>Fs7tO>fX-H-uienzwtcvwC=9EVaEmn3P96TR1itf+!5a6R z3#6-9PjEnX4R~76s_6@z!r=BTMP2{xZvi4)^QDvoHN}5YAGm@PexcHM=J1;S#s)0& zCm4@3Pn;Xfy%^voU>E+g*BHR36A1FrzehRb(+7Z{us9w_;c<7bnSRK85d98#fUn zNI;;;P;s<=E;jj5tU&75y~_tE;-8X3o>ejvS)1d)t1y&fwZGm1PHpVZE_%Q1?qX3j zE=@qvdyvi6;y&OJRMb*Fl%$Z0&;gR7d5D*J!vH}AIRgP52*mpt**-Kw3cQdB7+6r` z+}P%3c$t8OgZf2V%7}u=?TN^q4aatKMsv3no5+Y!K~8n+5!P$!p*h|V3>(24Z$|HflvAsUORX z2|Btmj+l4dtY;2e2^NE&9!ceW_x}W|9bI^;?PPQjhG^M3D_5AE9xdF@cr2^tCSM{L z9qa~^r^f&?Da}ZLzbZI`vOAK=RI zKAM=Bpl!0=85uooM38>_ZENnO0_*izbJabIUZX85PwM{qwMK6x%Je9htC|}k+Ymd& zUupdWIWvNaC4dRd_^3%|;@?amZST=kn|TTC+KIrL%!bdqAN$?(%iq$|M|XDzD)o1a zTqon=l?rGnGH2ZVS<28c-eV>b^B?bgTgIGZ&tKjqLjfWUB&Ehp7>dt7^X}xYdDVT< zF;E*0>k(;~%k=huIyiFh$k__H2pw3~h`AX<9lr1K$wo3bDkI{6@BN_;=IM^I3>$-_ z94{vC6nsWKTxh7aI$^a?S#*ew)>|o5eAXwt06Wpi0Lx%pEsZPVJ`$k%Nw7CGbNAC| zqV>p)xI}D7Y}byh5XA|P*a&0lc_ZStcDTIr z2TN=R#`m3km?5hHJLkN&tp>_NNv%vy+wtNnvq`Iq_cL>ISWl3q?+FCS4mGzyO;K$F z?S0R{8h4J+EnRQV`RZ-a=82m5rUN7QHj{UYqb3amBDFqbkFM85&b}!@m8Upq4?bzH zwj6hFI|#Qb`?!fmK)$XnoK*1CRglP0Ki&OhhmD*Fj7SsW_ez*K&&r&%AY*=b;rzU< z;VLFt;x=}V@u}`>?awwt>9M{}F zcW*0B@E&OP184@dd8K@#wej%yI}-a=6gXTY%F!^?7inJQwiM+r=5kS42kX0)uYXnV zaQ^S$n>9`KI$!hdd|gC_d}YPCAZjpDUg!`&t=g5Pm6Oa#1>HA84FmVu!>-$|DaBH+ zvr8ldr{qm%`K}u2WC=tMe_%%8$;R3vMg#peqA;S%XQZ8yXt$ye0XZpKU|BUwzFbPb zdpPjLymU0}7MyZ{V>b*uMmuFRTu(d%ayAIQaFLs}^ad|jsueY1{ z9}~5eoN&yP+}*vwe?gH*oj6c$*lJ7EjbSBEAXapDmwT0GbfdVp;MQp9zZR6Aucl`9 z(Y^Pwq|U_9KkS>8(b(;UNDhq*X06>cpUCB^TWYF8@5~&_%9r#Ku_Vw#Ch}e~`MsWH z%9s>lMNV=9v!b3~Cl)6dA`aFGshKN?^uEm1Z?`dwz++Nyesw{?V4b)w$d$aAk#a^9Mf;?i~55RYwsl%Ax_t%*Fh`R zkslKzv?QM%e+H1;_tI3hgnb?o`P*+8e~dS&my9%)FhWk>C-16}_n@b+Jn0BmjK;}J z0|H4%g=~bR{xq}WsH=uf^@!2pNBt&Ci<#43pL=Z)J50PY)1bKSbW_E{$*8E>W(0&AL^w5pA8Zp#4&0^Cx1v#fq(yhX7!Rc?4S-}JA3t>y760fG?b^xe3#IN zV%$6Gk#;WfVU>%h7Tb4*e~>{R@M7(ZA!7aG6_NqA8?nkG&ZiwiyTCV6pxeZisUbBzLX@lM zV_ayV8iP{WqvF9nvne`PTz{speRHmxf{6xPnLYEx%l*jWgIBQpBM_&N@vylAVoJf* zytgNHX9u|OQQ{K|Gh0{9Gez1p?~L$Sur|s)Aj! z$*tZM`WN`bFo$9E4j?c|i(zBE!=oDl1${y#v(Bo)ffq5zkYRJFc+kvlRvPDK+4<7L z0(wdn@}FRUjG_5%5ufk$^0VR6^1xIkAVv{Cd}6K9u=1wc|6^Gy)o*c(Nb;S^qm|sc z#VMhp2%!ROK4dwzdC!LLpjfokS+%qJ+SE3^iZ|}UyeT7GX-!O@j3{40Le2uJXldZ> z*Nk>38;TZL;n~RTek>4w*RV>V9v#WI1*9&00_fnwVM)=P`_~gi*O>Y+HYELa9_C}C zx+1t}_~S8kHJBSu7Cl7HlxGBmP5Mnly+Op!zj;c;OAfs{d;JCz)%sYc!sWoY1iqg! zww7+AOOM3RFOXU_i7+iq3PT=4dfJly zG??3~M@Q9cW@poXz(b$Y5X}KH_RWrLOXzsqm_@pc6c%#4KTp1IL_c#MJx`9U{1XC+ z)u7~u{jK|v@jCv(f)p=k?%AR^TI@OoxNER)w&N}fZC#!?r{_cDbLcpC9+0btKeY#n zGUAKpr>oh`Lz_`W1--F^eMYD+5bRiogUI{9W9k@$kl zVM;<`5XmU4at#xBPq)8}J`8pc58sv3gjJX*lTYlrEgb@7Qbufk{xwf*-VTqvq(``d zJdTCc9cpHs8tUmx{V~i7;7*?Jp-kWqDz~tY(?gi@Fja|J)3bm?G_0r*Oh~P5ciriT zal{L-jn*i>Zz&)Zi5zVsW61hHg;&Wb&iLppRdTEZ-YU+u!!1W6_WF&VD;r!*`Xo zis4Lj)PJ$~a$rE>4Fa`B(4_(8VB(62k=WmAW~!hpytm}m!MBmFYZgjl81nZ4h3ePc zkToxpKzMt%h5d6p8;Vf|k}4H}jDOt|Y-cKEI_I{)v3)6Yw|JliYA3N;I>ZJ`AEIq? zh9|4Jjj4?utzO2HNh&bC;GI~oE-G8pJM|JIiF%O$>Wl{bb>APhgL@~4(7!L3M&7>x z3|TpKMyE>Y*F(xzP-)FDosg?kHV21DMnZg#;f0(P8~3>*K(f3akg)CH-LUcdOMH?0 zuHl_Y-?q|}%78X`)SxQc?Zv#7gMSw3{%%?AUhk0oyEc2OP==sjX@E zI+hZix^r+IPfHycr~8$vnuVGjW?ty=*Q%PxvFaQbDN|TLk}53qX+Hbh3vHeC8FB>y zNU~{z7AS!Tm<^z}w5f#`P3WZ(tcC^eX!R27hz1enw6PX8O=Hd0rS|3Oz~^56^15@F zoi9!0HXOq~(GSds=}n}q0O1icGFuM9DNf{+i2b6Y=C**huW(HXgt!mS2-q@u9IvN* z(syF<8eWj2ei`Ubc(Phmn(=+Mxr8M8c|6mhC@AX~8R-^&H#H3JzJ=$|3JU?n)hyww zRFYwdST-M@BkMO?tRyX_{x6)-UQXU9>-PXhybH|>d3z5i7l?l zMN795k<{Yv9RtL{>t^qrK_KSB*CN}V*mNrc8pCcVA82jC@I==6q}Nb`JSVG#y=Mv`FI1^tbWc z3qTRQY4=~6+ACl|h)jE6SmY7Nfg#|}I7 zk0+%d0acvJxqK@KS>NxUR*69~_6Hm%sXSY&|CbGK=DEM3F=Hw{-CJvZ`QWNS$@bf$U$%U6@2Ieoii0asvh_!zTgKbGe zCSrMbzriy$aIRKhiBTvCnD^-KlwPgv z#YAbKp>|hBqz3F}PWnxj|AY25Du^6MyLJj2V2Zz7b5J(phWn(JVq7pJ%b>O60I1so zCCqG6;&PFd81KPF_}zdmu=b@9Iq_abBk;WGna%9JCzG9;0>$WQcFzqvns`E0;&1l1 zqQ#ivDK16CAW)`PM#+({7)t{csq1EAYV(EDYDl&gD0@7fb8^v`tx-&yb`(@0j9kwA zlRJM}s1_aYW>DLI>_AP6=j?DJL2=xUp#7WVgo?zx2A3scqsDYNZ)ma_7oVqpZP8GS zw;XrWjt#X$D30;N%E&)^+k2Yunggv{UH&U*Uo2PojY`o+JYJNSzi2|vPo*af+kWs% z72y|9%svLT5digbG#1YF{3J}JKL;p`Nns3a%q)vpKW(%xp?#>AG|IL&MdjCkR)7j4 zAdOx!29@tFqaRgCDLZ|cvsfbduln>7WH3FxDRG|_WoihsG60rAW53ULeCD}2BuU{% zE946K&Q?aaw-sg!OpTVoM7il9b zI_@TOd^!ZGC~n7uROAfFcoEyz3SV+&MZL%y^95h zF_|W`37x6YXI>Sr&K3)uU>cnV8m!j}@m@~cGmOV5P#WTnhim#}ir4NqR=E#uVM8lf zvg@warZL}jHlV$R{XCF_`Ge83G6-XswThOz_@z~-XXR}TF*K$pc zZ=fC*%eCrW1ALc1;QP$qN0SS)nxp<4BejS&e>Bbf@?T@V?1j^LLd$7_^Y(CV7!Vo_ zEkP#lRP~2XN!-oH689Wg{X+FZVpSys5aXLQxktL%7-=uj+UGF%M`l)6-tdbtW9_<8 z4YwEl^93C!m9`ut%r>`BH^K5B_xrCkaam%rREdGsh@(k;4nE03+xVI6 zQXYddHi~r^i>*o41fzt#x$qaITQ8s^jZT-$nmRh0ZfOrG}(V~5;a!b5UFwj&7p zE$woLv8kzFpRenn69WS^RVlh_C*IyHH%T3XZv( z#cd5jc{FjQ3aDAGSUjjdDCp{m}r181PD11`;5>f5`0`OTi^L{B<;-aUd}r z7oH6N=>~03f3z0W!ftj-$0XF*uhK|=5hlcGmrjk;QpSs(+Mf$3VCaH^N zs#n1c!x|fjx>WUI^8*gj*{(7@3u*#+tb1xe#hS)w_|t>sRZ=qq9nXhzT;zNDxy)R6 zd3oUt2?a)r<$f+(1d-LA4(e_aw;?QF$Q-ydGxi75Oi9D(Ahfcd=D)0Zr-FrwO&zB; zIzd@nUj~v-*Zq$do0X%86SSwP=;kbF_198ffkzvNv71emLiA&j(qpPtxT;oS)$wi_ z7=!ZC+j#332Yzq3LBKEK9g-?Gf*CBhs{70>C+Ej<-qAAKIKtwW8e4S(FLRmBltIHbM;`G|$6)HGN}V|HvTj<(Oot@Pey(ZTDA0jFG#*OrC~ z5677>-+;AA4N}iTXv*U4drRYZD5x`%|bXz`) zz@VVm)K(sT{%hGqRt-8ZQf@T;UF@>syXDD1FIraf2hTbjizm$A#y$m*l6;-o?p1{KSCEZTcv3P&~zZY4O1U%lN@E zzFi>g0oCrekkC#}ySl~>`H2>M{d)Wv+|vLr$?nK?{T9~}!ZH7Re64AjcvdWEj(CQO zp#;ZwwaE)7vfMBr;xxlRobFnfVJq;H2LB*p;bzXijmuhvD|TGF+~ysuR4!?L5E-GoR^Eh(X7)tgdnUo`Zc*vxGaztTl4!e9j82EP)+brj^#Rb0s+P_)n6|HCEj4NexYb z)$278k_nDvelt@)`(N1NGSc0r9}gDtD3{KHq-A=v?XQa%GDVI~@cE$y7x$F>b_W7h zY`&FjN&U>}scPyc^WTpLVfk=`dI2JHxO4@K(mqFMjs9)JJ5{b=a%!yfUGP1$zhvr^ z-r6e?1%wq2?qu%|xe9@d;s;Hpc*BW%&6%WT`|X-u72$T)p<(*olFnV%}Qge(LnM!|U0E>xA*A z^*~>?@2R%>pkYMyKv4lGhJSD{=$W*-UkaQs@>_RH&B#z?%2OY|>Lh6`bqYMGlZsX> zP{&&(Mwg$6E`*|T?fG)es|;gn>iLTcEed~E z5P|5rbzOeHj>;`Mb^n$47f^Tc!*7$-&Yl14*H?e0!FRSf?r+>I@VVEo*ZEt^18>Lp zN#>J!2QvN%*n;OKJ75~1Jee%Qx4%rkssJU>tdKoxG4KJV&*gLN)*FWf&tV$k zvJIoQQ?`ZcxX()SLl)JzFP0XSvQV;4-;!DX6ZtIRz5Yq(dg{|#)vc|#UeCQ|xq%#j zZJdFyIMYh!<+szg!!0@G{%b;XOGctbI_^ePnMTgn)qy9!h~ztl%4K8O7b{QI%0U(2 zYXB3H$Si*mZi8+xextID=`n%ezHkcb$~kxE6MM z#MDkXg-*rbuDx{T{WZrRBHwFyBT-OE2o(RqzwK?5_zJ0@tp;ZKD-h_tn{fM&l_+2L zKka|3c4;y>Hlq*+WBcQteO0U!!iV`|TU$~H5wCkQpQBIOu%QMkHY_b5D!Bc1jaZ+n z5&wE?p}+oAsAhI+7Fh=17Ny^^Ou`XF(d0;lEBt zK|y-l^h|baC3=5+X7k5YoxT3}If;FwjgwQ!-CDMdhzDoe6$hyO6`my;=#Rz`eH)8- z>Ffbc&`1TV{KewQ$Tpc)=uV^0pSvFOl&NhpN}_5!{~HIz#;a3FFbkTB!;hQy+iy02 zZ4qP5ni=4@zw8;4l*Go;dHHMs+9>F$1#zE6N3AuK#m<^D*I28ZmTOK8{kfC?*-zl2KxB%kG?ObiX;-)S03c^Y}|IK4e z|MfbiS7#zYlboxxDqryZ*oI*(76G3*TKP^eG{pMD`?gvP3`<83)NG?j?Bd6L8(3Ky zue!zY(*mm~!*m4iKUDjdSTK7%SY%!r>cZGk({{n_uFdL= z9L*~scDGFCVE#q-g%5}=I#hhw)Ir~?&f6_1;KC@1(=pTvL12r=x*$A%Z2Va1HW&md zW!9Qzq!R+3@PyKkz9HK^$57uT2u_?IIx)|@JyC=9%-azdLl-aZE*PKVN)H1U82h^a zN=Pd6zP`iO=OBl^wi;c`Fcu~Ob##+MG~qg|%t^r2SE_5=(qzlFhIEHdb3=ge)yqHP zxH`6FMbKtPlgl!y?{}Vsmx7iyP6pxEBn`t zHe%_fbt!K%x9#+VYs%Z;d|O3z!$Ck`;Ct;Nptbv9sPPijNBfT(?OB;V9SFN(I@yFgfrhz*zJsdf!qHUC#Oc7^Kw+O!xP z(HdCb+R*I8>we+B)kS&P-WbS{uK$|$7ti;r{WhF5AWiMGhnp62fw>Tv#=KA3%j#~ZkvTW^I1o#hM z97I>)f30Dl|99?Z96A5PyIOR=L_#qCZ3OnJCEVNJPf$y56~o-zbMQI+|LU? zxK7M$RpnoDRsVH?Yd_^JlJ4_oO`F)pg8Hxmd!Oz?53fhAWmOV8soL28Y)IffkRTyge0~d>+Q!)@F2WK6l_+A^n~LZ}&&kwwZjA6$H*T9!Cr>tic;sqfLxi zElTcxmx}wSb8*~QFmBr2QnLIanh_jb)KsP_vNve!@DA>K2|o)Brv)>{=EoHW(Rq@h}M6ZVueO` z1?4u!zhid4V(Sj#b3JuQseCu6L<*_T2}r8QX>aWsR#4t)NLn&Du1pkEU)Z+>))(3u z;ptpxcaN%Hr1-sg^r#2s>OxWiA$N&DJ!h5mN2@! zA~`!N_m{t4DHko6m^fWW?AlHr+}@S>91PE^eZYDD$E!ce;cCB(aysz-oZz(G?%E<+ z=^r%qz{k`6q$!vfh}LydsH$;@sHofG!R%{fl+|q1Ij1hudf_XH#>fur} z+qO0u%D!=eX=D~v^nicUq3Mb_ch_w^<&h^j)eV=?5{(Mg4KanO$){&?3n@aYefRG= zYD#(t1bl8P$~5X4yYRa>Pdf2H%eeS!VZdD9mQB=;Iz`tEw zdHo)e?px=fFGQ_(#4^|z$>z;2Vk=nHr)7-jcX;gxU)-lC@eyXdTwmCm@U1Gc`iztejFnDT<&$+W;o1GV5Zkynu8LeCU2JB zsGmA9zF2yNz5oICr14gUW@k2W7PELJ-p5RGelPKqa(67x;}A0(DWQq*Wz{IL<|!Wc z*c-8#`|HUR#9?2+_c>1E6X$ay6rgea5GGUftR-G*Ynme42uT1lAKFwb;OH zUeus+%vUbTY{nd??n_g07OVo^?BEdE}xb_on9}67USuYL(Z8_vftuH4om_dUfu$HRtIh1J3fY!{r$dhj4!XGhtMGje(U% z(YBtRO-mNWXh5ZwIMC4C+L3 zBqgtwyD%EQ=_e^paJe5veImM}OesAMQ+UE?@^V8W|nbjF!57ufdimC+kt#*37?`$0fpuw9njoZ4ic3e4A=1r~` z`f=3)d6p-A_FVJ7*CGUYUeh*p(a@wi1VBpf9@V3)ptW8wQ_@8Xbyla43 zS?{N=>Wr=7YYlu`)$EZhAtNs-{`C6k1GNgJ_xL=;9B`fVy&ueQ?vcZq8#@ajxIIF1 z)B{-T*{H6duv(j*J<(uI6s4%gE6SzHjtU9Jsmpb*%hI4PR|p`wp8F}s0+K746j}z> zAhK$NWUzRqvP3O6+nRadjho$wX52mhADS=L|YxepI;{e5B>v zwh{mb7Q3t6SB&mkT0M6dYO1Td4q_{$Q6BSXdB?%~jub;Qy3)b9gz66X*tNX0z*e^W zYVW*iDMc$>S6Tj`5l-R9Z{J@kOb#7qlEK#Cp+g6Vd6TWByS)uwPR>Fv;ntS}G2gv} z*@0bdb(A+M+J-JgaPJ+>9mge}@6iU3ajX4-l0X0a44!tb50G%rRtm7*3{%_gNup2T8 zQVdkL6b!fQ-wef8yM8+ONKvTwOIH*cbZJ1(Zy?J>-*VBc_=S6PUM0@=z*{`_Ss1Gb zN{NLoaI|mfYRZ%Une{t0nU6(e=aTM-h`YxkF6pM4h6th8mOE}@vin*e%hMu_^h+YP@Gp^@>N|iw9m@SD~r|_0a zx(#ieXc8kY-Tg{4l<6~bc9+G!6g!iLWAYsRC(Zcfmd>}jgd$$;TFg63mBl+6+V9rA z$I!|*PHTItG)|i?aBa1CMql=@Z8>Y;Ne|CQ_E9Vpy-gbjtE56*H)U1DmYFj^nhstz4198#D~JGb2nDa7M05U^9rW2Yb$S+bje=S9^I8 zae8_hmWli61NG=9hsG!xL|wFqp$1HVe)MVF6()|6%Qq!!LWTk!R`22b8I?d#oaSo(EBebStX7ygZCwLpglr4J?cj zZEUX-7h#j?gdy41Ifk(lh*4_q49CE(ST)gUAbglwn;WM|GtAM{dz}}&^15#Ts8Ieg zPYtn0sAj9YwzwYrq%gf(b=pOeSE{`6Cu4(I-#Pxv=K|at=i)5NmgEE*sf4};IST`d zlp3(%2k}>U>R};T#3$g{OWjGCG)>B~Jxyf=7GSZH1;;8&H4pOCg>6>G6=NNzLy7A} z8dPPH{gu_o{gMlLgJU&rbouO@7|*;z&?;`%#Nvg<^6E!?pX zHS%jsSyLv(*UFz5yyM}Fv4uv*udwd-@3 zcXL#?nOMH4w-*1p*>KzT1hwk#^xV#D21`r#XtFxmySC)#OFJygZ*-q&VNLug!wm~65+322kFtj$YBxBOeS^Ev%mz`r0O`XYLpV!BNe;1cfs zg|M>c(rp${+cH<*lUK8|t6sd_uV-L260_x2ZO zgkJ`bej6zN_haYTYC|~6>DvF=3lQ}McCLk~g4hHUys$7At&0wu`+GylF@eax)tu`K zky}&QPP{FzmU7m{`;O}u2=`>F!B05KVz(c`^(%C+^O;?*8PC8vhA~F9-^?@!6#QEaTqhu}QUj-31=1<4&bF ztR&K{%crv=uvK{~<>CbTiRpNImnBK~@fkLGXvangfhhHU6mVq_Ey}#x0q9BC@0sK7 z{otzYongpROHdGEAzH*YnwE8`k(#rBONcTLqZA=ar9-uUSUVaI$gm)D$0ZrL^^-x9{i54g%l=994Y0!MA|2+-kevGId5V zQUx9Q{_yODS91tcH2mluJDu60ZLWX9O6bIo2`!oKm%2*AtKINE&}J7g;5n(h38T3X z8=Ce+r?PumDrF%%9g*`BPA?fB+w71{h4ty;C3PwmD$2?Mb2kBNF=MxfSSSH!^KG|# zHfbN_v`;6(>BeA!J&9%A`*mzUQc89#KC`VP@b_)UjODpwQqRb-I^pAJVLlLD>MrXS z0?~1~DmU^R^N`0VLdq8R7lAw;-`olC;MP^N{+t6Zb2Qd$vcB%YsgQDtFIE`v$+uY% zV$96wEM-c1Dn=BM_@0QEl6`dr&s}giy5nCahDAn;I6XdNoyEaPnst@&&MVKM;T)oH z+ZnfR++Oou56#d*5PHb?K&-l8x_V-jjZ8r5WYg+1*vM1<-fqo@qELP7q%rDlAC4U(`KJPTIgZh|J=R8|=%yKCrSu^mPq)&Yr zUP`^M&$Qh5$>Pb1=)j~B#uV%5(Wi}t%@gj4m()3ub*Nx2suD^W3>5kjG%LZ|8CT$8 z^@)jAm0Z2I0oo+ZZ-~#I%G8y-mBe87M8l`yGMQ+7s{0{ zzNmx~Jh~EU>HB5;h*Yfh$@TbZMH5N?zrzq&nh>zElWk9i)_W67LPC7`r>_2t{iA*R zE?6J1s>`tMD#8z%$53J49=&@JC04rJRL&>tn15s1M;C@4F%3VkFD;-2eckZ_I|lK2W2cyq@L+2n``z2 zwoL?!X5vM(kba1%P9l@k03BZt(<7#bn&}I$SF?#x>~(nkXU-o~?Ht`CZx#feKWvwEUx zx#k3D%gQojjX50d^5_rjei950TkF0d}AFJxb0JU)4YFO9g-ahDZe zZ9WT?KJI9tZufj<-&C6NV<~Nhr*0Iak>DqW2=LIKf)5k!kAuEB9F?Oa%^Nb8zM_!q zMK1vk;T|sEy|{5!-}&JwhTRWoJu)RaPd|J6OmRcvId#rJ--rh!vK)Q_4CqfM?!S)kKYLGPvO6f=aq zClJ6*yY05MmKA)nRJ!&RGx8viest5(Y9{0_HtB_)P%NJ|`u+JeCb`Y=nfnw{2LjhMh~lvnC9uiVzZB*SWJYYWAo zkCfYRQxkpUailay7RJNQqudJN#o-G*U$$Puu1G&*i|dI+yyN+hzm6FnFF-UkOF>^# z!$%E?q`e#(9feW6528FP*jCZkC#rUwn<%oj7mQqNbu7fhw8$+|=X};)#NDI9ZMOYm zFDX{P&K^5FT!#POD(`gZE9c?a7nRhBz1u;vT6mz>i;#A!Op!=v!4-F%nCAG=@q0tR zy9RFSEqsDt@Q~|}?OVx}kntx^R8d2~@v=!qbr1mEucNrn+4_))T934$Rj2h;?eLO$Msw=DXF3CFaLzaw+1u^vUUNxPEkWHuYQ- zxT)BA0XF@U)$KJoaBFbczwyjW<)#}Ag$!Zv&h%1zg8#VG^9V3O%fTDJ`)jcmE<$O8 zAs4L&9WKS19?1?$p*g|tDkyK?U@Up(fy<|f|3arV%l{X>< zy_B=mNw>h`4z)H|bIDQ-RfOOiC0ov7dLJ>1XX;W!3vXOM}B3EI*$o}#D9H`gQ;7CRp9p0GFa*=O$=!;|@7I8$Z% zxCPvmYaOX9+`N&!iFNaP0ryQ&u96lCDwd@4H#7Y+Se(Ko#*GEH3i@r2d z$n)`wz#F%jh7-lp^Yc7+Jo-3nZace5k3D?OG$JEUKF4NaZp(>3hkt1fAE7esnU&J2 zN-7Szm+IF)=S$lgTM`F*-Z$+_tE+Px23(fQPV1Lx3E%y*Qc>r=`2zj)wra*Wj#d)w zc7z85#uhM9`>(R5J1i|x^G|pKT}5j5q6&gi>&UX@QQD4y^?u90RP!o9<4WS_YtW#i zq&Jy0aB1{$f~=-9Y@y`G&FXW70|DH>H=nfHwZ5!WPaF5Id1f~WAE7!3a}H!3nR2B# zk2lu-uvwV=KC6LQ9bL7D0Ax9 zxdd_MH9{^H-8`i)D(z?0SoQ08a<8-I>9J5nZ&Q?)kNdS(>f5eqlrja;pwqzfeq1Ie zwf{&Ehz09%+f_pcU1;PiXTn*iWKd(eP(XrFwV2MOyr4AQpRo{z#EEAnS_u^6{bh`9 z-Gi4zo7xLx_J2!(7X?)y5V5 zHx^g8tNcxE5Pbf(k0{M$wwGa(~`gKLyV+slp6}4T=6;@Z%#pV>93TLG;c3So%GT=tgk3Ex_W8#?~7_&-C(OIs>lvuHc=<4!2q<|=(0-eXFXd~( z=eAPnIVO&H86GycczXu|j^c!8ydcq_`?N&xMqJj0@Ht0DbP9I?!@~ELGF+J*rJSV| zvLD1E(mAv_RaN9A97Z8kW3iRfE+4pEJ<|UI2FK%(pfcbEcIh|~;aPozg`=Drbm7?_ zQ*9fg#3d>CegmNq;9q-9KmU9VmW-!yfPtJ)CR6ZOX6~&G&VNz;Hfw=8hIbXgMbCR?97M^`| z?QiYq*dw&)f=jRcD@xa8`Jc`1e9E18p`*6g+?=4xK}$VDuvi-Zfux(dzTTRze}KE^ zMd#j;=|W?P*_0Hus_^|r8`U$pgO-_{v+UYDH2wv5w)LSja5cQFmZ-e7k!~--Ho7Nb zecfZ;_dxm?F+)`K+yBAdTSe8?1Z{&j1a~L61a}WE!8y3QI|K>tZo%Chf(Lg_fZ!0^ zAq01Kn9cjme=#?+X69!Nw$R%4FQBVYy$5}Qb{kaYPR2w zsILn7@~rkN2m%300u)4+0jS*wl?elG^l6yX##;FxvR)Gz=Qt-2lmu2jQb4{Kp6hj0 zTybC^A{N;`UJpD!nUkvp`#jDNchLxk6J&k}7~#(QV%P1gf8xeJzTAFO{5&SixAn=t z2WoCx+}V>22BFn=kHyL7Hih8GtDiNvVarbZ>OP!6+|~U$zp4>WwN&w=-u&vH1ow2d z*)8#*dYie#^r_;SQ?q5`LD=@1?enee)`wIglT=c{Z)4vtA$x&L--3bCDaagj0)Q9TpbrZS)-S=c!(;ZJK9V4G-Zu{)QCr)Nf+s7- zc#>#o5H`&AZAQ&~UdreW_fH=Pr;bjx$ygz!kMTUl+L|6M1yAL|Zi7>oG;lP8fZZ(w zM<_u+v(Ingj^?wdUdRq3*%x<1D%)P&;)8f==uRt^5dCuZcJcOcNc#28(D|hxO&ObW z7xnT<6V7S7QX5=jnJ$_!J2R7YLQkbP6EYBYxq^ zW=s_5_PE!nV@6GzZ_QTd7H*s1#v1x_JWVn)fG?x%)EcSa%-iq04S}SQU(rNkNM^Nd z+tMnx0U~@)KU^HiAz%Zg*X%nnefFdokx_3hg?TfXVX5oiW6i$G08G?_+q%bYvrmp6u`hxK<9hzR*;Z*ptOWW5k)s*BjPx0 zD9nK5d*BDL6Ex@9;p2-6dm^EH%_UvYLP%Ieb%>j-8Dx?+45X7`T{`(Tl-C_)sG%sW zc{8vCEukr z+m6MP>qDZ!2PIvP<<)~0FLVPrTir@ZvKnXB%(Y_MqMDQyRco zB^bPepch&2umeMv<%NDX+cY-*Jx&YS6zQ*^Ph4%?W2c2+oh5_dBeklFl=51XptMAQ zLalB^X^tQT7xDjosn#}8$z6iVL!Xr(%!awKv&>< z{qyb_bHWWY;N5XP3t6XQOwvn3#&zWq8XJYxdNY3&Lk~!cW1UUk|E4a=sR;PZYntof zrIl^p_PXB&o@-_XQ}hk|4q_n~4ePN-H5s|=deRDydY4YoZ}VfnU7rne_8-DYZ`1o4aa%9c!%;Hf-?wTw}W9K$y;2Y-@ z-9IVhP#-%_+2pbPOke759{Ufnt0(C*+VN2$q`U5UqQCzJtbpKrk%fPT&SX!?%1-;v zdHsI!f`EuF6{t6=G+jKKh9tJRE-0D2?<+S`msXobk0{^28R1=Epe+CLeM}=__m5tV zcG{r+tzkMQOKD7P629>0?0#4~LGU6}sBx*cqSCP^!NBp9>4x~~WdD9%NR4geC?^VQ zokyO-Gg`~}fsb^4Kl|Jo=b^o%0&M>&@_eb&C)wj@kEeA!))H4-{wi*Z3aMm!J`yVg zINu)x6~tT5J^gCGhj3Zq<5ba&nsLZE-5?K3$AW7r7TKeABZoV^wxVYs&9^gn{@&xE8$cF-ObAB1N=cqh`Pvz@M0y#CmwVJxbf#S3ug@xQ#yw8;F@Ti9+TZSP~JaITLT1&x{bpXAAt`@o&O5F6|1eGcNnm7 z##QX2u0FkYs;Ko5(Yt`I$d*uu@K}h=y+MO4P|BDXjzB~WTOzA-O8QE!&oF!TfS)3; zyDz*{qTc90+MuPf>*tOJ8k3 z9>);$43#Plf%!*-P>`gnxk7^HBF91&V73$`AF~A1do&% z4AfS*o|;T9ye>%(u^sc1kQA`6XJ4y8XBvH(^4SjrxLmLvEgAI7%oTX>bI(9biyu(B z5S1kGj8r)8@0mZ5*l=%-y28T6b*cNYwRyT|oAF=_Vdq|-$F@h$8?@IG=2@<#inBAu z>+2R;K`Sr!b(WwtrqFp{`1z5caF)AVYzBwz#cTL_R^9WmZH<(zErWr-FVZ!3M+Qo& z+sRz(!|u(8QBt3~j`Qnyzo412$zt{H0h2!Ok3KvAc43nG?m9pI2H#&O<%)ilGu3%Y z2cG}Y_uBZ2v#R=Jo-o?onm5|(nUcShlB1>0lU9Qn+iBO{X~>Rak1u6=hj$&o2T;7h ztzTMX6gbN?%yr9dffCKgRsRq*1VybtEU z#uM)K-@?FD0>HW)T6F@uwf>D7otmFV)#k1_c>7}KPGnQ6M0)%8YJ`D#2pE3gPhnrE zGXDsTjL3rY^-M(lwOC@-XCkkn(Ue-=Zwq8=DYkegmpV8%h4d- zwziAV-u^^6d6wCSR-y9Ozu}~$8jh^-Z`TRo&S#%Jipt7p$&Hp9%sphEil?teq14n# zZav5hVJPU4NsLo3=PxR$_tS-tRCQTMZV$0`!c4=l%yW&yVx*4Ot&{7(3SDJg;^wItbZ*XfOacMAEcxa&mHh zaWR$YJG^yxNUx@;X>LdQj=ES*i~&#tz$3)!|JoUIS_E)rq@>_{81*<_Oq+heL{Ej4 z*r7X4{Jf$r6TLzT$@*-x%IOS%R&RPwllQ-}Ho)0mY2h9-kWGWQ>A59DnEUG$H{c;`^*0oBJ@ z217PV+QEbnIc)0eLR603ZLcJvFyiu3Wzi1o@p;OPUA@H6dodaDdsZj55|y@ zvN{UDSDEm|#v?ylQ9xEsPKvmdoiMV0=TymB5CRfPc2suLHO|NQ@D6_S=27*~!8DO7 zSu?rMgy8i?e!;C({{GxhJ`w$K;xim%H$|cX#lp4;-V2q(0tO%zr zdW!u0*^zKqB7<-1k0ZJthrM=cgfPj(?tObdU?6_m;4`23n>Dt3$^{b)d8diYNkTyV zm|%~9n;?^Vpe=(&DH1Z#tIQUAp`*-qinpimUeTS@XCH$I;IVi&dR^u#R4wa|#(lrf z9QzBo*>KG}wxYUw+wJEc0R#ez(W*C=GlaEb=rD}B-RQRSKV)0aZ=L`=rYUFt^gyo7 z2ck}ksr4d^E1k<*s=vK?UeRu;0jWUQtFcHeInCsSX`$!`XTACFK4>>yr+nrU=g+%i z6$8s|nzXLufbZwn*^M+lZf~8!B12K5*N8Zp$|SD^lwP`6F3maj!g{KXF9tvnB8Tpe zJ3A$5>*>flu@UF6U^-?t2g1z@+_;cwynj=1oFeEFKo}qb?rEzD*HrGLsh)@vx_9c_ z8_YXjbB<8RiEeS;cp8#669|Vf;05%5E47u4Bk_Y)blulEl5J(m!uqdmtBc+CO3Qdt z5L46Bp=*w(Urw8CNh%Lli}BlQk#!mxgykf6QE@T8 zrd}I`#l!mN@EKH&fWTCG#}lClnIw8v^O1piHdlS6Pe3&)05=$~J^9sjXFs+Qedtqi zB$B21t2pY*pA3sjQ95j~j(Cr-1Bzk0(CSvqO3ct2+`-4cpnTw9=3SUY)Q|5P^=>X0uDfJO=HZ+I z2Ik~MKP;uTl3qtwpx$bFfK9TUzvKPx{gba?QiQ_ap7lL%ZG#qIVEYdXD+S#7W9@A} zTmTf%GnJFi2i#OuL=L!~jTyAO$@s)84)N)Gz6HnrXCqb?XcWl=jJOf28|P=_DC!7I z`PAnVS;=HamyVolqbbwQ+oV|Of{$s_!rOv8sjOf}H zpcqpNOA~=m*vvEzk%2@%NL-u%!pc6@eqd_J`Z>9|PvlsOw7QxkEcNV)8kG(mQ4)Dg z`uR+W9{?_d49QN|t&Ry-EhH$6>9#p%5)z*MNHafU^4cOhRP zv;sR$^>knS1}Txy_3cfmzJ;OTqkg#6@p32TV-Thfq zNA|xLrdKf`Zm<26TH}X|wW4*uIyX2F>I~;L?T_f5@7#|R{M~|*Y_H8SjsJjhD*sa# z;794eM{#|B-`5+h$a`!pS%e(3SZ4{e$}4=P^0hS#^nv!u6|eJqudQ{KwNMq_9X{b zLLE}b&|gd|C0eWiqHvn-)=i7dwiBpk57^jiV&HOe2q}7L^h=-eKrx|aHgp(>j2<># zhu!9n1B3cKkof?}@O=`E4?Bn^Ge3$(>mRxiHyES`Gt55qkISz4uR`+#5G57FOq3+v zuiHG#M0o6ap<@_dQ#Jr$1Eu+Y6V{b63F{=GW8k!BqjC<`c1RQ$+%%5L2w}RCc-Z;F z71oHtqo04nKp+3M^-AmHwWPD32y6aXVe$M>RZFD@Y2s4l3oeqK3(VKYiLIEg>dk0@ z5fN6i?mrjnI{6XFLcT9Sb$~sG&j=jbYrxyiq6==FOD4g>Ba@my05d>eF~Vi+=epGF zbuKgnT_Bm6I+)|_oKvy76SkdmiV)1vywn^0kX#gv0@RFcS#K^_Dk$C{mZVL*81I1;m_*k7EDXaB$kDi6t zUj8Uv>2AKjLN81RWaEMua}?(Os7?it!p$ZyBPrgZAU7;+oJmn75*38i965QfMo1M+ zk#B~oD$=zH&%$F&ha`09E5gJ~k`dBv2GYa`hI2YZ`QnwK&8E;TTQZTl>nc59hmcU$ zRnSvG3>XVjsfW=!|8t|D7$M~kNK@ovHE%*Q=SKM$Pc%SX;qV@UA`k#tm!z_6kMuErWx|IomCZa@oadxzyzxSDPky)qmi7j2hZ0hRd8760$ zm6-Fxztd^jbb8*Q04RGJN z+kAH@@$d2Dea*Jna`#x%NMVcpcFm_I!!g~%QJVHp|7M;{(%5P49`=$<`lBR*AuoKY z;!L?lV|#R{*wY6n2)xKoF0MrrO*SU_w*riJpaTjeOmefBXufrQ1dnKP;kbu$S!B#u zb8sS`!~4`N{XJtPBI1UDS`RVL^-C*wLf_VT7RW&j5d*iFbtD_HLWEPEnyBOJl9f`j z{VteodZc>3{DJ|s$AK)FFukx4?dK@0Hn&*kQtreX)7|ZG|I*#JP)@0j`+N}stpllm zq9mdA#YJF>EHmJ_WNuNw8>mjonPtqv+&}LBBD8)tHdN=e5v}Fr%HiO5^GWb_?XI5y zrGJY!eO)nCezE@Vt(``Wm0GD{PEccP8Qhs)DR|~AXyGhqiFoC*SKCZd)5ClD-NU?% zvq;v&9%5u+V3O2*;=A{Gu|5+AnQ?Mv|N2>>YLcpy!w+jos7OYr@HXK}wkf^crdnQ^ zN!;k;GDpSP!b$k2Kfk2~NhNU*vl2ISbS}yLA+vN#Z-ziV1JfIMZcd%|>n)5}L4CMZ zpAiH~EG=Mq<7n=h{rqY0*lCp+2Kcw-nR`Nn^~LG1C4gTAKjLAVld(>_8eM5483^tK7+85IMnoWfIYmW8>}}OOE3z&GMF55+ z;>zekCmxc3Qa)R z#L=lS;sr02$M`|m^?on>o#%h$>a>2aW~mTGXwGnjfXU^vxN!i_I9j{K=+#F}U7>%g z$lIuCnLM&$Em&C%7I1KZ$S_P5S2ND<_9h;q(bVewQ|s_?_lp~|9~3~4M}1&O=y5B= z4dArm@ViX1G_r9Bm@`qhTuUnzm*yo7nmOooTQDGMtO3G}RT|a30O6T&)3T9lY9*EP zR_E$B@QqV0S{O^~R@l+SBav?1+vfS+j#v&rCp%x=!B(KXGp*36j~D&CLmBuBTyuu|7_jG%l#g=cXVQP;XH;+ zQK*-8oMIU9czTN=SP+rU+hG_rf66SN+vhqaFe0mc=suGgASY1`iDF?d|zxQwDm;62QQqIQldMZJqEQYZtM~*@1RM-c{$G?zR zx?|>3=Vvpokf16nX|_|dc#MV<2V{8oT=!Ym7aMT8K6jb2kOr8s8_$pFbZ(P)nEWaJ zHIEJi#cKUmLcrm1y=Qmvm1Bi}DfF7XxE$Kd#s6IWSz8OnGx&xv&Qz_O@@rlqk;>R> z+_iIiLV%U4#!W#`QoVliqPP4|a#(@=ZhJzKur!StjY&cj_!Kae%y%j*7*GHm!qiRR zrt%CIT@<213cRlIuNhY(kEAI3aY<#E?mSEk{qui0?#YXT?la&m#z&ZdV2DEe{cZkh z|DERrL5D8byEceAwaSIz0ZJ5o_C0q0Nyq5N=wcUj&RV`zxNWgxpSx z%-E~KxvNwih4)X*-&hX*XS!hC5e*>;2`ouwctXC{sLvnu6=PPFYK+s8Isx=sAvf4? z_j zJpyHwiMY=XgfQqb$X%qcMpQFP3tr8j+r1yd>|gCUqX%NFXDZn&7483Y-vY+=bw%U; z@o{K&ade**HXlhkM;UHXRU#T@#S#DE5z*Az91`EaHZ#48(P^i4x|+7oF?Yfj7}~hJ zz?C($@y!bDtI#zE@DFXSbna^Y122EFh(|2T&67Lw6mpOxNW|Qn4~QG5vC=V_$C)*V zFjk5rErd6Q_unT$$g^Ovb%_0%Re?;(rWhd!7@*qh9~&~(mi_|g1hwsrq77E0?=t}cO145etY zkz1;$s`+nYVVzZspRHJ?pCFx261PWKSBP14NwQC~Bk1A*cffd-Xza@lg4kAf!Uwul zQ#n>pToT<|j=kNmY`Sw_#UmV}E;lI-4xTRW&lV2?Ah#8|Z{Tzd9uq2dx0G8P034nc zo1R4e01?kEEM$&}88;H|4gQdU=snRyX1M;R+m8wYW39bMH(Oe3pML0c&3?bMx|RTV zi5rRAOT{9?3O<3#WwG&0V(wYRu@%r2EWTI}!B5kSK+aKP&a*UFb`W9>zLp{=x)EHh zr^x|<_$gS(k4x!1S>L&zjitD-d}LqO)icyILcVZ%HkwP;?cUVKhE_ICGJv}GS@#Qt zNc8o)*aD?2E#nJz;De1}g2{P_@r28ph=~8*cl!Nq$ev=)FPTd>DpfAeglnlHO`_36 zX0~-aV|67RXR=4;Y_Q623dQQ}l^4ydglLD;Uw{-1AVWZx_y9FDL^eXGKeLG@iH;D4 zju5hm6jon27?yQrkaAL~fZq|vZMsr}i=D<>Z!^3KQgX{V0$Pu*py5;N97=BfAqc_S z`qItO)6z&8R#rJgS{c%<;!ITf?;c$$;s zRRkf>2%%d9q3``Cet{Fd&MNld6+NwaMJiSjBLhMh<@?uo4rF*Wt4`$wPF_UBpgJ8f z05_r|z?kO3iw}BCpFh0NF?FPuhO^hj8?nOZuEJw#ry6r>BX4L59i80`3NCPtPl|O<*(CjhRi-YFH$9DL(2PdTjs#Q4$gvAOnpU$*-11vMH1+ z>f})gjhcZ$WFmy&LcN{nGyr)Q1qER)kV&O3fP;|~P}}_%(v?KP4<2`-T9gbuL>NCz z7(J}eril3~kol9qT1G(15?zXCfj>~?`QQIiv=DSSW-@7HvBWa0-4 zT{cejuo`+G!wSNPEwT=KMOlZqqpQ#gLCOrKpFPN!psx-piORfS7b}enf+i^(dO!QcgLSHNb_ ziGi`eTpL(j4psOY7svsS;KU?%r>K|raYawW*5M@u#Uy>pjma5Q-}_l7!8!c_N+JpN z?-U!l8%buVh~`{0d3dSF0$h6@u^r;3kt&%SPHs9?Bh#&=8pL~_rdvlsJD_l@_;%Zd z&FmUA)zys}2mFk_%MVT@GmnC_7^Lo&=1LbDr^`p~F{`)dF7jkY zSoLGUL?jY?ANy`Zr1#^9kW)Rd1~r5TPYg}p(l%BeLjsGck*irpkp^9Jt1MLTd`*wjfx`KKXm~+@K_{Y08t(- z#>l?VI6BU8M3C8r8N_=w=S&;7MaITiAlLwgTpKHmjS%7cqF8W*)lV2v;`H&vEdhdn zcX7v7g(Bf@*82OR%#==uBsAg&S=o(-Zdp|#)=mZkHQWWSUp)qXWC{BVz25u#56*t# zP*zieVjJKecER@b{am*s4@9HRf*AE!Nm+WX@#M2KvgVyfr|G<&+Ld)QU>f=AQ~Flh z8ZQp3p!XIW8fnkc*dghnkXt&?3hGEzOVx&cWPt=o!cj^3k`E8+bnL;&tnB|;oKx%5 zK~JY0D-rZqz`Vj|n*sm`=O(LZF~Ej(`}PvcwB79p!ghZ1y#p+#k@TIWCJv_+dq?mn zOAnO3(wT!dK*Rab^Iv_)&b#IIh;meCJ+u4s4y2+IboaXEomkVcvx~y(_Y9+$Q>kQ2 z8ro~oxRoF+1oO#(>ZRk%i*_RSb2JAE?Vt6b%bigt@XbPrJ}NLdWAz(WxW!f%#7X~t z59j=63}qzr)&rPE;%|l|$oD;;Q=>e={6cpoR*V~B5)yny6;FKF0?eOQ(?6=D+gd&=d(@WS@XA9rzEmoU)#v&q4}Nl!r6hUV@WQ z!5Y}UaJ1UZoW+p77r5#VU2M}%t*@i1XQlflMn^~2n_ZXygy7WrwRDJwhj9f}9Rei* zGKo}UUK~%kA3sI$bY1N_QtiC%uSi&|CPm71P7#Enz@n!p@Cmx85|t#XrkzK zt_PTm`t4LjPs5f#)Btcg#@x98gNqJjd&W8Aznl#qXG8=U$Q=3aqB~;+9{k@`*a-$= zIsbEAq5^sK|8tE9{GZ&6Tyo^qTqTmMd(Q(bnPiOjTYoDz6qu_rq) z1*>?AH&=-!W6d7UP03l9b-Zgq*hr@TZd$tM> z5uK1xG7(@PgXl!rwaFq>nr(sX47LCE9MB+e5+Z3J_rLK2l2iWTzjyxqO7{3)dlCj{ z9f*nj&$|+yw3b6tboC#;9r{hI{4b`|$alr~e{UB4clZC*Df|E5{Qr2h|No-b8e`c;b6-zA>RbjILhM`4e6aFf zSMf|zU$!aHwxQ2nIyh~8r;A8mc;kqxiF^z|25~*l5Ak6sN})%+1>nV(`H#f>UfBBj zYv+$X0A}vQdz`KYiUjf)>g^6N_1t!F(uF-7nya$#Tz1Z;kFJa-*L`{2flS2QAJUG7 zq>oQsz@dP;B}O`?PvZ6`$a>C8Hg=smxbm550HSE;XUZV-_6rXyRoH3c^Zo3Q5Pv26 z?eRu@{9BLG5aUysk`M9S#@B`PBS67y2Lt922(^NaWhf@o+RECVRL}i-k!`;nRTSN% z83iWTN^l`rd2p+}NCrB#0FN8*hgNDU$xhEgiye6H^(8XhT*>d^!w*9bQ+ImKpqATH zu&VGghGHIHl55xGUijpmw5cjqv)xKuncq3*?s!hHqtA^nkoNDDZ7Wx?*!-2Y`*N<9 zRv!;J3;+fo&bbosXPigpDDU zDccP3@6I*L}l>nT=3}z}RpBJNbTlf)hIx%TDq$C=z1f*Jc{k$nH+(#??!U7H> z0Q1c_;X1_AiZ>P70aeHD2V1&h?FHQ99=*Gtg3ADOI;~F!P~A1}s=JW5(d0p;^ZC%w zG?he1Cw!^VVt~0y?xP;@=hRj~!q~rNFBR$LNV}8ab2bXK4HBOohbR344WDc7 zGj(<_vTW=LbOEBWXN#1uw~^GK{jnUJ-2s)Eq&)=Z{P;Ev5K{Mn=#%zFR*dY>hUy zAQe62+DV?)W2e=7JOCnJj7$oibnJZPw_9rVJ%30ja$^e|+#=r^f*nnxiOVanCIqHS zVD(DN_WdxH(@h(OIyR8oWV96otK|W{S-fx7HDWJ$yDd24zdc?HAJ=UzJiY$_oS~t> zM+BJK5mMew$Ztjvzq97ozq9%wusQ`kEdvO!{g7fduQr-e4^hL9!q#$xM$7SEIBAAq z9jC3(z^M(HySH;w(!Tm_TDUwzeAfDlRleuHnv*7HfzZHGOXn^jY+3DuJo8+5savvx z2oOp`>UljmtFwPnyuQBeKX5g=8Ns>Vd|HowxY~{VwwfV0q~!A;)A_h;E3+^VUjYf> ze?MN!R%D?w*5EpMWaaZVB&?{V0StcL>!vptfZb&w~6|AR2dUsN=MY$kwsd_?PK~T8@|Z)A`ZHE3SaYiI}Db z3lJCOe%q1c&6!|BLCiee*#2TMHy_vf3aq9KbgP)sn?)ACD@LG#E_}<|KWU+uNuk#> z(@G*>aq+yHhI~>$mW5$AvcSeFSL=`JE)rj6JbDIt2#7MpJW)E=`cDrzM2_GBO6e^= z;hNs*cGK3Y+t}cvBoqX~4Y6%IQ%XSjq)mT2)$4EW>hj$`Sqsf^Jnd)kzhdmZO<^&f zI9~ch3WU3ma_=vbctM7FbrUDIy(hPu@?dSjw?A@=?FZ^wOsT-Zu=%|HZNo>EvCRs+ z)>Q}K>sa_3g7Dj%<9Q^SaG3Y0*HHOkliL&O^GaGb=1fyTeFcH=p{$Mz!?z1_y{6rf;+^ecx@JvZR}`^WjM! z?ovevI9r6ewm3M!r1{`ftzVc?;5v;nM@^D_ZH*@(=sq6>%Ab>K@m6Zr2lLszMGs?1G-# zT>5BKTE$ml1Q?)q&vIf;tg}jfw@BGCe-tQG-J&EY?#K2>m2}GL{}CL#elC?w4Y%K; z`(L>L=B{oY+XI>g1HjzZ&;wF1Y!e5N!}2OT7n$1i!ucS}zP!QLpcD z$UK+JOC*oJ+oyE!1Cy>$5YmTne@mO7$Ctw=wAicM;bfzt>rEcm?bf=XdwWS1{A%$^ zsHve1@9u_D{MnwTI8hA0{f$O|2@W2G5$*N8TMgCau?ql#L^Un9n+JKX$N=69v3d7& zac1a=Ir)6cz$Y9zGocT`;`K(g3#2JzbN`E^YHko5V!tkr8gMGMFst8?o>7aPmfj%KLs zgaWc_Of~|8*;ee9p8={UhZfV9Wg_w@ir40co4zY335D@XHj-xBbs(f9s{+{LUYawHu8Zm(OqB9_BY2wrLfO0D-ms zZI~+(s$p7jr&_IGW?~vZ>v>`t%jM&+cz9oS@1d%h??@@*j&=%GqIKW4#Gd!PHv*UJ z;8>?#EFQ0|?+;k~_*!FYj_!9Fdj>RLUoJ3?TD*1;eeSY0@QH^ux8KfY790Kj$G8)z zw!$|aaB-ROTO)d&8`Qu3WiX6g+Fgvq0`{YCIosxPX+}$bsJ~Nv0)jpDc6{@-9c%}8 z=8v7IJI=JtbmiqgzOwC& zI*EHNwlg<==<^@F)9$;r4w!L)ji>eeS6_R>c8;5_GXq$dWaso2zip|N93wq~*`7Rb zehhHN*n33Jf6WbbZ@0bKzL5#b?*#EX5y_L1M}JJZ;A=5Rypp=VzI z^$V5a!W!$|7vH&;c?Z;BSB)CA;S)%6q(@IiJ6ffjKS;IRr9S9QTMUogx7cR;9%7^8P8aQ{mz__E*!bxA{7tq?xuime_ec#?YknRqEjEI#_Yu0I z=KLf>iN1P) zCjuTeLpAbNji2M2iM%N}o_RBOP@xhMV$FYc?38>OPCg@Kq2YhSnM)~V zTsV|d`4aKe^5&{h)i@>E{%p>%a{G00AwNIg&cpHC`BKg!lyPCn5{0Aq*dv2(!Ze#y z(o?Uo64YeV>?z=W=H5{J^Iz73PRpTXweC%$%|d00X@{g|3^X(pApY<6e)At02RzrI zp+?GGAX&oc_V?I?2@Sr+78X&=bz1*yUtI(#3BRV7`g2q3I@MW^YMcl=^%}2VYd6~a z1I1SHn(Wuwr;e&LxWu}m6?m6yoE_oRxZxwXt3jypCxD36+{4gio6)kAMs#z^_rP>zL) zikGC7#==J{W!{`gA_ceL*RS2#0Ns;13-r!ph8bY zB{5f}?$#Q*9Y-RNY_d@O*_I`)oF)PFGhFwBgLAWcQ6_I35~#~YJzP%rhenl!pHRsc zzlv(@u6A%UmG$^p&r#fpqlfJa;asKlU2YfZ)$QwrbTi9(X)-p6!0BR+5FOob^V;A- zjqD+z_V?;p^=0M8 zxhL(o@w`bOASU~%X(5!OBrV%~t3FW=7()#HXz4&kL{wqwfP6_zB<@Hiik0GW*yrUI zn-^uO2AVmZlV+-4`p;}Ur=@qN*SF@UW7^B(vyxEOuImp-ndMHmEO1(;yZy46uEpSS zZE`}w7OUfF=Yy=G`*YB2sk&UaoPCt4^G8#e%d4w#?lT{s+gzNCsHaw;>kasZaRKMc z;xNJM@}oZ1YQBxApRMur0cp`vKEGzIGe;1jhKwX zg{mxj^sb2<{{2RlO1_vTwxcRfez!-*we{+%O0^0KmZG%3+uKcVy^!{cKP8X2?WTa~ zIa~6zOz=dh40WN(y;=wLM!(fbH2C%DyF=Rn4VS~W*v`(bo4bRVN8cB?ljSbyDic#X z4~=~nQ)z_^ZiOMG=daPzpS|x6d*TIabRFBYUjtv4J3XsRO#EFJYx<0)0=j)K)ohLF zCrlY-Qu@J-<4-QP#3f~ARX$qj$Z)|UX=tif4A9xQch2_HKPup^Pl{Of#@y2V|NfIf z@pdTg7Zab$_w$8?g&i@IoevC#CpkUdmUkvK^++DfJjS`c+DA?Lq&;KdQ^C@mT>*D< zQ~?5qRqB1x>s}Y)Cnc>t>2T-kYI1$3W95o>Cl0s+b_?|?FO;;E_Vna*CiE)xqOcl! zr-zMU`jke0=Hnaze*@vy&OgQmu1PdDGxSg9DuB9wr(>06vxE+|Xm1vUet5KaqZVqH zDaK_o`0MU%U|`_2osxDvg{8#*{P;REq7LZFN*}e8%xSCH^l6r(o_L|HDQ_w+F7*v2 z{mQdc=5c3V78aJS+doKN_ru1h9?6Rxj(NAID|;?o@TBTHc zs9o$6*`KQ-Nqz0S*DF20>gIzmhi_g2T7nNp9&zq^@qbBSnzEW{FUj?Lt`}TDf;dOkbAf^= z(W)lo(nCc}cN3YCpMb+^>cTyEZURJVI}%P>sd%#Nu%J<+$JYY?=ci_e29v_eKk>3I zxz*`%V{u>h3w`z2h~IA7!iI(@-p_0(ryDGWEA;XMo-wgfMIU{PoO0(soo?H(;&UEf z3~`>`OjjB(J>@6?N$X2mlc?VGE6>3GbxI%mKP$RUQmvx!Zk@2|sJ5e~SPl~68w9{_ zB=Tv2ie1HazGj?TxH9regtAZ;N4;FxU~gi;+`Bq58eJmsaIU&Ydq!x+v8NUoh^i*b zGg5vcyt3qE?1zVkPn_=xOsagVX`#|Qde;V*B&Doo@789nynuzqzYththkJ$^wtJ_a z`MpoGRa8{en(eex(2&%(rDA7G&5_Csj|sW#$~`&Cj)qbgn!Lsxm!F36+P{C#zrJ=& zVInGC=CXZ%aC_s^2_n+CU)FS@O7_tG#A!>F$-|}2`H9El_N1`e#b3$r3(f3Lk=x4^ zV3b2AU+7g(TdtFt_@CxasP=2!;$@02)gd7;)OwwCMbmWt{{HWRd~`c1_wC?r zud!dTYXQST^x{~8^NAXs?S%&wIj=vRHYW~emINu&#F3j*^#+tgb3IJ*lPn+?2ZMnuAd%J zyq>4S=jueE_1j%#;898bto!<>x>|?U44t&3xPIU+slZiAOh_PibbMW);OXpvfS@CO zHiU;rR?(B09 z1&_UdR?FrXuQ?VkEStFOe#|K2<*=xF=qZi%`SRaPrD1Iipl{f8b=m6c39oKps^el4 zT-%;Hsnl!KWEeExDu0DUN5#ecxuOjF)M+AF*5tSf(1fA-YcO={mb>)zB^En)tWyUg z>vZoE$*2Hk`r&d>nUIfTkPfG9<-6SPLtwfD9OS#>wWXxOgfaysM@{{db-db_o2*NA z6|xT2WJs+}Mn;Evb9^Usq6bW-X;n*YE-rC^(^0A&+|{#;?bgjFd#)d|BO_zy7CqMI z8bXn9>7(?3f`r!g-qeci)0s4w(dpVoglJz@&(+r0HNPnq$i zoO!Orv$+L~16g@B*BPr=LN+}d`s6g%hc07Qe6=Ro5RG4hhtCh+s-OMZd^)?3N(?+E z$^_i_IWBiJ|LyEl+tym=*W&sx0h=1nPscLQWXx1M3K5s*;U2J&#}pFs%*z$!stzFH zP{|ze*v-Z)eRbX3BrmZnuCR#J@pAet(qua`xYMkd%U@EK=V<^CGXL36GniVzTL1dZ zKi1~~halFVQope@mC>+(DoJJ8BYC&vcXF8+3dhC3D`8IBiA-q zBs}ZGYXYywNa?v^5aqx?&Vo0oPchG6+|1&Flnn|i z$Hz*UZK;RK;S6iTi9d-uY=nF!t%L?EB0VqN1^`i(#-@AOWOhktbob0x%CIWuBHJdH zo7&9mlC{-|V2&IC_t_^>zrr0h;r(^*(}r=wpJo;O9{WZ}!4~5$vK$uU)919Lnlt5e z_UrBHX9|zXLhC~9wF_$x>$R)vL`OUh$!XK&&W}2?mepi_#GNs2(PF?dcIT(~q=o;c2n7*E8u)H%vc&rs)W(vOIe4s= zw7VUaI~Rr7tW<^qipfB#2!tCgsoIlXBTee1tnb(^C}KVrfe`Cskq(Fak~c9l#K6e; zv)4_H&d}hEg#8O}|Lg0k*X{xB+;;Bza-C=N@=v=2drw0{LrF;~o9$Gl!_|slZin^4 zQV^(Nq%t_Pt#u4MN@Bh%Oy}_rghM0DXXbHFrn+fAQapLtMjQCm z{tCO2<8JBCW%zP>R+Qz~{yb{m^W+ za)nr4+ zp5H??Jh`Chao4Hp81K(BIYhw#45KwLj4LMf`;7-PZf9#A)|)TB_M>yvsw>Tgd|d{M zXD`qHTYFy}7FE};jfIa$JSqll07^MXN|%6icd7Ky$bdA8fQX>v&>_tb(hVjxGz=rH z!Voir#85+=wRxWReCIvqyyyGpT-W!{w=OTa*vwvg_FC%~_kI8NUQ4&gGCgiVQGmM$ zE)WJ|6J{df%`k*vgZWw zBPBDx(eA*{(9&OgAAFWZgi3(5P!Bz4T;UgzgGOdn!ADI&fM5`I(OUIg8Jy!u!5q|l zW>ERjom9z}n{%hg%`$9PD?0K#tzD{!uRcImf|0M?6Q{Ww3VHhPyREPKWrU@Bd0>mn z=IlvPX0M}O55NDWqMPsOB(ErcSm__Dq?Vm>-?`O3t|gV<0N4qq#T3!{#2Kwta|x4& z*OlTq^T6Id$^huokK>8&j`Fel8M*%@3uCnk{F1AvHXa2d?SUPgC&!R8~n{ z-Tj_KegojCbp8CAx@{^|*<(2kie~$_YM8_}H(;pEUmJb+5fkTLM4$tvc;&aafWX(9 z$@5n)t{+T!)=s6?tm3cDjckR-=Eo%_<_MJ-i<(K*V$YMBGcx>7lf^kh{;&)9L%{-& z1LLt+Gq0`wv`H7NoQ8NIi^1Xhwn%#An5jV9)Ug`pw6dB?z7(F(d21`H6l8jIy5)F@ zu>iJRClCL%Gj^;7k;3fr=mWseEs6JZZmXvc0}Tq(5VFCWBVDl+i-Gs7SNM|lHBKQ} z{QUhGZAg3j8yT7rMEC8T{nRi(TcMm%M)o|{E($i)JlFSQL1hJ>wMI=FO&XZH?)pTL zaO5m3?MG@I6EDA&8c9h>g;`THPnq`SHzGu1oh0&|=orW7xAyOxAwRuP*v_nlQ~n8{ z?T~}zw6;$|-@_g}=CY}fp$f80GoL~9&h_i_ux^EHTwRRA-TOW=C9Se52yX7qS&%37nz7m*f$Xg4Mn78h&NdiF_k zJG+95cTGJKy=FTG9MK1WvB=Fke45fJ7e>Q%@17C@j&-l^aiAB_9IcQ^zUN!oi&>UtEb8r;a~Qt-t%> zgWs|NyTNMYK4-Ddq(sKI#V1eRZynTI&`{DB%&BEx*2;Y?D<|u*^nJ|{9U2;nk5yXj zj7u%Pt?)(@V2YO7lxfRoq|ZiIS`A9CdB5JU^>Ox)kh^bl!8FO}@|G>&lQzL#$(ghS zsoB(i{!Zsl7-x}XK6-$<)Q_Eq|0>w*+a#*OjzLk z?Ke{_ot7WyM)p5Hbr!MEp~c3^x}a^G%vz|1N-(Z;PKz?%y;uQ6O8;69qZ(1Z!6D+< zcQ;Xw*;hb2MHx&pq5$SYRY#!JSUbT69Nt4V#x*w;cv6I8KRtQ}a0z-&t=dukjj@0W z-aY8+J}-SF-rohLmLXyybyQ&taj7ptBC2ebSE*ZnG&J^YEpIJOs_@(NVZa(@18?D8 z)$FDzud$wxpee0#npD2bsoQ@xLw%&jOq7e4w|^@ckOm(E`~_{N{CJEmWLvgt*bT(w zCT|mk>HVz5gZ7vHY4ADj@M_+;abwSa(#NPoA4D;K@m+q1PFY;Xy$B|*kyg9xco(Ac zL%G1GEXI3Q%R3yJy??5YgJ?uU$yl&E&3&9ifnj12b$>9;y{8VGO?`{`@ajP^1*sCG z!#;n3V`OjICc&lEelE2PF!r?CrK$A7@B)q7&1C@gJ&f_0oYVoANahcGKG&TBbAiD? ztysYf6?S~A9;N8zG+nMD$Kvwq&fU(l+T|BU~3KmCKrMxA5g{2Nr99fMbS(zzBQe zrM!|{=f&%u2+$({9Kg?T=wLRYRz}TNy)0ayv6S==1+}30%0GY7i(0+&8K0zMlOnOz z2e{Bac#I+R?sBVxVVp5%DDjfo(M0=B-2#Xcu{f;7M}4O*$R%J+sd* zd;gskvE4DxfGGI@JObJ1G>s)VpEB|pl!**p#m|Lb4S z@Ei9YY7D=_xsW>TguO@Aregd`#rMp2#}CVmDmd()3@n`_%e(_+w%*>}gh&H(&PDBY z>wVItYGCa>JC5#3$e8SNmu}kwSf4D38;ZG`tGf}mVZ?a<3Sf3Puk$V_DVeb4Dk=A^ zC%WNQDV1y*JD&&}RjMX2lD~To=(ZmgGdtnHB|i;IR#ZgW@xmcC+lgUs>SFO-9xcrJ@c%G}x6fi=$LU zy$*fu__u!rsx|)xobeuXLboge*QPe4XLt-p1h?OI!cy zA1N_+=ZoSqwoAn_K*yy*Ac6%2hAgm0!zbU%D-c4A`-6$6&#YOjd*d8xeAxa!j!mN~uPS3+a`b0`%kLX&5k*#{(a#$Q@tK5b;$2YcV>K{<3io z*a@3&HRdk(kxpa~g10S+h`RoMH^@JzTdBY!ao;KvKtf9s8vw~W>^8NRlLf1-b}87B zR9{EI-)jM!ARDqC!y57Jy+)oY<`<3&!X}6I<;`aD;v$gz{`MNy2H(_%T(%8 zc0}bb{rvFI*=0KIphI98owPSMz6#zfl5?deWpVey7YHd1jX~4!>(a%|mAZS*Sb(^* z-m+^9tS7R>C8U=^y#qh%<288JxN%((+5Q;hM0<8!v`jmMAnq8DrsNz+@EWFxPCOE8 z1Fm!cczwjygh+@%aRJDp3_zZXe#HA7zp=hPQjHbpH#pyt&>2_EFjhNMV5?v^85)@^ zPJEgs>aU;`$w0`}>MMK_LgAbdR&36A&=9cioy%J2)ZU96-`R2id>6X9WTF=fQbMk| zb{3|wfd3A~^ZXwaU(R$k_)}()-p#6;Li+Q4?GCtYG;W@d;^0)DcGgRmg2n(O3~z2e z$^AzyK(+ml%_PuMlm=It10RwH`%L@Sj+9uG9r~}tvH}q;|BK>VIEVqx84+qJwF@<+ zwFUZ-^v>A0*j)?Q@RIjNd|YC|Lf(M)o+D3W_`uFKyZz{U7se^Ba;cKxg?pCOjz3Sv za~brO9CUHA3+Y=lw%*?sK*`|bXI9EQ^`+f`G5 zWzY2;YESoMpmM%G006LaYi~2DvdVS9i~jKIOtRoIzaad(W~@|30%7Yaw`qJ$bNmu#JFLs-$1w3(2I-^j|Zuh0&|#F&MlnX^j!5 zkFJ8*+IOyBlMq|7?>T%@lq@fdi8GCo2Yd%GaBVeu!9gS-KT{Vo2y0x!^BaDxatpLuawpSw$<1o_oNC1A=owVmRs=d3nGi#h8Hvh@2#H6}Ew8zA;PuOXy z_)1T5krN>SI9TN1;2=b6I5jlw$E&1Fhy)0GHp#q|*l!ib&UWubGF1Dnnn(ItR<*SX z>bFNRp@(cyD(z8x^tljgGMJiVx0 z=KGrrTwC)Nj0q_7lH^dz1sLGDfhMuIlI{hcX+v9l<-QVO^Y73TUtDzI0v^QBYWw(& z@0b38l8?465Y3D1fGF40jeQ8=Wc|`TJ&*{4blH6COM9ON?5z)=Y({jmL#c>(mF&&- z7AdBdXLIbemiJr^Pg3CnTOpD1f?iPpKo|Hu!Wizm4T$>y$&6JyWrK?rY1dbjI*con zBnu;1K|%!hs()Zw9U@#0VY@w!A*DAGzajaV#whNZ=))rY)Ug5uWrVS6J?xRkK&V>E zW*Z8|1z_V%24M(`GQvH##b?_lYbGQt&S-Ino6=A*y$=fFqxj>_EfgjhvhuJdJIwnK zP~VxI-5#Y913`HGo)kztx;N2~V$Q$Vb%PH8b~`YN>g zH+tv!(S-(6s`od^0MwZE?QJZ-hEySt&-;dsP5C*9q95hHe*0$MmRb)%exQO`3#C}| zCF#~{vxVV6x^)cq9snT{B4TA_U#NC=!s##LKB!hMWDP>OqjKyW-q@rAnRpr2{-?#D|N`%|Pyn`2FKXwf*AMj|>s!i1X+E0gA1m zrNll$#Ib{Hv7y<)K!Vu)6h0tetd^pHk|S*undAdixO=pcFG&?nKl$}>vyEEzCN8!9 zbwq^D?m7~7p}?Xn{Y_h7fJuR2`Fl?Nf=6NrF}mfl-X=Y^eQ91KXs({(S9UpHfqDZG z#8XM8Sjn=5RN+0Xcd6j^`CvC7^}7|OJ_RVjK?O!XYzXBqfJRd&ZF;BT<}Yt zkt^xvy&ymZhO=fKVC}9ATf&HQ?LzeJjFGiVxAjWkFB6XbM7iT$Ak4;v&Pu;mo)L&2j4waW zy4X=}sa*F=3qWX2O{%2-jE!qY%E01VS@kc2Sc<*vdX0!Huy~K%^>C2MJ5APndAtjt zZ~+LNU11@(#<|a;G%Gc@m0f^H^+QKfoeui@HQ7w-7I;@XqO(J^P1p_QZcZhg%ez2Jk55e0wL7XI zBYRB)dGeslkJ2G8UoLDT2-elcz~YH(vwa?W-AUrrmICycd@mT}AKRlc;#i?f_ny?( zxw>>D63NUcZU|WZq1nPAh+Sur@H9nX_wxo^qIhBs9=3WYl||C!%PB^|0k^n-!L}Cw zhXyx$X!aRsoj%j!DnqutBYmyKBT$LPqn|fRj7W_Hi+2bS!`)|Hy2}&ICcsdKGDzDF z=$hpkm>hYq%qbEPknS7RR`PG6n544gRTAJ+*lD}pL5F9G>Ob@bH#*h(w%jaISorun z7$Eh6ix)3C%IK!(^HkeRijIG$h4^62LPXAk~>LYoS}-&JM0e0m@410|5U-mz9;_hl>hN zfMHx8PF-CYAgrWQoI5v=x_e##@BrSv-W)e?$}+jswLIL)HfyXY(yI(*_FuP8Qe_u( z8BqmgNu2E;Zj^z*45VJGNCqjHMLIe-HZPuhlYp}4x2ZF2Z&jsZl5~H-)p8_r_2NZZ zM#kcr5@US0A~UF^T5Xx)OX=D3+oMdA@Kpz_kDy1#bz;kW=}D~VwfRrSq0fuBP`WJU zX}=)%wj(apvC)Z8Qae#B7xs4H=k4?u3|ud^;~}vXBv*ci^3NTf&WnQ`N7ThUSF}SJ zknI9MI(vTN1RvXNTL!}_>kS)-Mm4tH{cMsr|2}hleYD85KE_z6QJlTw_w9_1EgzXJ zw4DIh6wCz!D8Zt6rpe0Ym0sIht*Z=PSknA-!ejX@$ca9?PeP9W&)AqO#P*-S@X2R6 z|AdCwQleq4H(@ZB=Cv*rHZuycebkxLosPmrOY9EdG2}0g zY$2~y2WOIU13S7t@mL?`I5^n0=P|7^1mz8-=@J!36_nR)!^4#T!(R!Z;)7;iq=yJu z5Q+?$3Q(r;zeK|;T&G-lH-9Q3_LhtgjX0ah;d&h<$)rBTb)gI ziFkr#Tx#$IdSZz<^lQ=&Xf@T4+DHYZJ*a$^!0sAHRmbACCJ7mo zrR78^I_((T{{vN)#s1Hzl9ZC+R4?khk{U}_Id8W%h=a-;pb~>Vu?Ez%f3r33{l?&C zfw|?i*Sl-(2jCHy1Xc;*B@SX!cG%EZb5j#yS&(WI^P1jWC-=>jj z2zRsA@i*wuR&7F=EcP4U;Gt zwNTXqSzYq4xx+bImi5Z1;(81Fwqg-_z7MT)y*sj}fP7Rql;<#oJ#SVcf*-wr_Zd=y z$~2&&!jY0aBZ<|8pYFQ|1|dA~#>u>%Z>IckY$ay3GT?cfqPf6IO`zjt(M&UyRnGU? zfBs72NZ>ZCdl)NusCxjk^m_ih#p_8#J2Bl&dm3KQ9$AW*+aa$mrCGt`oSYTqPXZ6WJ+8-tqPdQs!}SfK9ze1yE8h7+&J(PQ?ixX(7CnFgAT7+L zh@wEzz}_U*#L2kY6%`72J0H7+KS2epmb5e-viWQ(s0C``jzxO%T#165uXd@gN1r!hlNn*2|DPG;>@o`rta6ka5TIT0oFd!?C>uoB zd{)*CD2)b{RKSH>DXZ%PX*SFnLcyT3Ib%5>3tI`yt=5L7;vrRN96g&0={Hu&O3>P* zMn8}j(pN1epw%cUXuQo}KYz(X0VLA-7fAE-wD#P4O}~BnR_N!AMOM|J0-AlO=S!b_ zdkw8;P=D)N5*6QsV9j0}q!?_MAKVJw z(`2rg#>B(|fPJv1g2@4SZwFNX^}qX*Nz7ARWBKKONf;GYWaZ@IU4Op+(sWBPYOb;Q zGcB{Z7NE1n${j#bnbx=+rzt|KYn}{OFYi~Oj!|n z5w9RYW)Fv*ex2hFmNYrUCZfzWA7#qQ%5IVxh!w^qP?UYPZVOaL)%3A@KsW%Js7-e| z3Xo~aF*VN9S&1x9Hq1=^&TE*OFM_?5TXaBNNm$*Yh#j!gUG?>~-|HUT+eKnTz438Z z0HGr25ZE`g!y@1Lh}Z5>YfCb}OG`rWs{tT3RM~ZE_mK7&sF?eu+7Y+@DSPtZ;3?_H zudlBU1_z&YSR1rX7DpsgGm7T`1nWRdo)*~aDX+l=7}qP)NN&AUW!K4aVgTgmc_^(h zCB9L}Zfh1YUJdx2m9X8U2xM*iU}3iCRKH}O6DWPt;OOL_-}`+Fsu4~z78K01uuw}+ zZWRlh@Im(g=k|&@;1>r#=YrvHbdN|RyRLbQSyc09AuDOA+#FViiJf!GeI1&hCPe@` z6TEsLN2PM{zo+DbO@d*OY|hVkadoU%dEUWaFwGDAift zTGxK?;HBu4YqL`l1h9D3p2XXX=vomaFz~Sv6fksV6wrj)ta5|v& z!D{o-^KN}qkwHn3ZJ1OEC^`a#N+8r*M1g2bHfsWk3;Yi|71_){t{^zZKm@t;y-MQ}U^9F68ZmiC^kru4I`OGC9E%k{^2jW* zlXYR)pO|D3Gu1LNe+UAZi+t|E=KnL8^gURn7idkjBu)e+|bry(~ZvZ);S5}`1kMCNvdSP@`ho^$qBUG{6 zF!!r&gu0mk%J`Xxn#I%SYZ~BNp4bFal$mH)q7RCxmL;R#|5pCg^$@oBTJul3E1m7_ zij7g<&`-)c9`W{r1r+q;!SUDo(25FQjL|DxBwx#JnO9L0zOxwf?dSeQI2oCyIOOz# zE`GFTKcY@mBqLL%22UY?3;EH2RdVMVH2<%|zkG~lr9Toibv{WZy#|We$udtHDnYA; z;w6;mU6f8e0lMNno|2cc4+V8E_^80mD)uMW2NV6IlnJai@JJdC;0!`%b0h(xsZD>G^ql+%il?@9-M5QZf zFYO&9ueIZ>rvlfnoZ0hUOiFy=(g(kXeze)8ld>|r5cPS22BfsB($H-y-En>Y7?b#^ z1cPg^Yu=7k@>OT=>}${T`6&rEt&Oe{Hoxi#i>`NinuN=bz2~A7BTGM-7lh|QEKXP` zi`FSDD%o09C*m&Y%2*R7@3c}79Zgjn2 zch)nBxLB2`zC$ZV(pW`=3vQ=oOo0 zZc&okA8f>LetI!2Xz6m9&VRp>X9NCLa}p!o|9FZ)WkxVCR;lE(Iw8=^0VPxYXxE31 zhz)-hxocPBdCmEqm!`bZV4aD!mAcw+C#wZypj1{KZ`6s}`70q{81p#iFf z67vdXre|Sr1B$`=2z%plA5>f4ICqA_N{5>i`?S-@)J(Wfp#Q7o>J*2s_Nqs1@ZGuT znu8Cf%EOCseE5;l=UuxD)dASY5*sVE%4LDz4Kl0mNWB>cCXLg@T%fv}E>d9yJhE7a z{~y7WhU~FDoTjY`4#jY$DG8v|vN`u0N7|LEPIunUDca{8)=B#9z)H8-_3Ig3OcdA0 zK9yVgac+iERmwd6&2nQ`8E!{likzcQBontR8;Bv+qPeeYa1B#`mcXz{!w11&!vN(5 zJ^QOsB2N5Lf?e=|X00m{Vw>j8M7fw67O|4o){#D2Qfix?A{G)XDLDpL(71r_HMm(9 zlDCE@+BT!ma2Xl7xFb1^jArWOU}r3bm*JLf`pU$sR{n+>N( zI5@1XdsVMKdm*$cQJN88l+7Ystn)A;fbZJ!A%BLoFPBh;-e8uXa)i`Pm1HG`D~7|4 zzp@)j+**jHmE7n=p2?XjAja6v09L0`vBN@F2n_qv1Rg- zpP6(QP^(qnGr{U_Y3T||38KsuV=WwVN_?r|zw>=@m#4nsw*07J189G-LbC{xZcA}S zQ!^#Sdb~O)tNO6SqBvt!vp46<;*Ki!=`p6@x|*}CNHt8#CbuzZRbQqb^AX?)bD~e} zuC+<2o$t3#;yKz}x$i$v{B%tTuE}F)vd(*-0}Pl1G;F^g>7%N)bsM(Qm9b5cg9e1| zWMZpNL$y(Ai_{IX!_TWbi0PR0_b|n6{nzEGQ{id@oiACg9<{BRYlFg`DtWDPkXN_~hKJB6h1 zV+M3V=Z~5a5TS#MYn`a5xxPD@uq}RyvPQ@q@D-VTQnW^2^O&+4h?=qA+s8gwz8~N{ z5#CRhJ=JhqRn1|Cv!kzIAYw+)C0mIHzGpw|bb|uspzGeCH@&K?70K(8#G_A@5ojK> zdFYR0O1E{#fWeQ;F-bXXr%AewDVxovtn?6?xrzVvEKQjg%z>$RpOXoA z1B8KTtrHs*@2*)<33OeN%{;OFruCwo__n`vbXCSf5W#|ie^CfP;TdYr7*_ywBYo}z zU$RyC8i#=zd4!(6gQ*e{#0rWF#}*oNKYK@9avK~2pMQPK7C~pem7@VcT$#)OKtwWH z%H#0PK5_7CI&$MY2U1F^{7)|VYD0&MO^5{#fA&(6(E-i2fZi3FF zrrNg_pg+eCI=6v1E9rY(l!AGbrFj;{dvK5%FL=&;r#?RZoAF9LHUC8Y=2xDT)AaRDA4eatY{`%}gD?tOoljlY>2-H5 ztm)I2O`H9$ww9$nwtqj8 zkip%>45!_Td|(Rl%G-eqOL^VDKV=5K2rqsd;&u0}Q7{#(Q7F==X1<91_)JY#{o8?! z^jt%dRUb0=+`T=n_#@Fsz#Zs#OACGH%;~3>$6`%d~%vyw$31K48 zf__DVyMrf&7t6>yO9-Y;F0)!l2&^;MeRmlir5+2TFCFQeh%QE^T2b-;4Z-gigX!s& zr7~z11ouC2SFH1@*U8B4^lMvUY$D(u>21D;(f5v3;@zJ`?=IlAV~d^swEF9ddQ^}z z^tNox7?A5u-|T zmLuj@L_+9G(;MmKZuKG4>%fiCkl~Aw3N{+&Z9gfD%(6MW`-$hfWFYbHx93;tqcST1 zHV%IDWptLC)~&kP^sk6%Q#WxkH1%X;@uyJK z{F#-c=)&vB)bBL3$#j|zqp}o6PDn4GrS4Jbqm=#2-d?{&p*7s`g+I9`I_&AJ?S(bm zDFjl@%zrJpU$XU*E~nw)J73*u#YRZeTuA%tW;)Rhu*lTU&|*B#H$lg$t3BmwXGO(s z8Yu~90mFS+zaGmKJOzRZXmQ+L=4)G7XCD7$%DKo! z@WtkP*$oJ@5n|7uS6ZirQ1^bOAhn*SxBAohxEsyQ!|5reCH+56o}f+JJd$cau`3Yn zpL&?Gl^XeV`|APK=Sl3fc{eu4uV3o+dLsrh-C6>#-md6ao2=fG1U>v<^1AVp1MX*5 z`AjR4ZuH<)f#M7G;rmgIC*-=ppMx^6;q>ip!jCAwy?JGRr=TqqUR99(=qBWTJ_caE zYertdTvAmg!96TxwvMiy(uU#CAO$LV;S_MA z`O|k5ZhbE5d0;zt798Cw_!^p|@o=oYw)bW5Ws*yGH>5Ew=~2<7Ne@KPT_BwNT*?de zx=$^4v6=dxT*eGc U^qr>!X+MxV /mnt/sysimage/etc/modules-load.d/vfio.conf diff --git a/leaves/bhimd.cfg b/leaves/bhi.cfg similarity index 87% rename from leaves/bhimd.cfg rename to leaves/bhi.cfg index 0082137..0b86b91 100644 --- a/leaves/bhimd.cfg +++ b/leaves/bhi.cfg @@ -6,9 +6,11 @@ # /_/ /____/ # What ? This kickstart file configures an hypervisor for Intel(tm) CPUs and Intel(tm) graphic cards -# 'b' for basic building block, 'h' for hypervisor', 'i' for intel, 'm' for minimal, 'd' for development only. +# 'b' for basic building block, 'h' for hypervisor', 'i' for intel -%post --nochroot --log=/mnt/sysimage/root/bhimd.log # Beginning of %post section. Those commands are executed outside the chroot environment +# This is NOT a standalone kickstart file + +%post --nochroot --log=/mnt/sysimage/root/bhi.log # Beginning of %post section. Those commands are executed outside the chroot environment. Logging is enabled to help with post-installtion troubleshooting sed -i 's/\(quiet\)/\1 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci i915.enable_gvt=1/i' /mnt/sysimage/etc/default/grub # Load kernel modules in grub. diff --git a/leaves/bhmd.cfg b/leaves/bhmd.cfg deleted file mode 100644 index 09c6565..0000000 --- a/leaves/bhmd.cfg +++ /dev/null @@ -1,36 +0,0 @@ -# __ ____ ____ _____ -# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ -# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ -# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / -# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ -# /_/ /____/ - -# What ? This kickstart file provides a basic block to build a hypervisor. -# 'b' for basic building block, 'h' for hypervisor', 'm' for minimal, 'd' for development only. - -%packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. - -qemu-kvm -libvirt -libvirt-daemon-config-network -libvirt-daemon-kvm # Install minimal tools dedicated to virtualization. -virt-install -virt-top -libguestfs-tools -python3-libguestfs -guestfs-tools # Complementary tools useful for interacting with vith guest systems - -%end # End of the packages section - -%post --nochroot --log=/mnt/sysimage/root/bhmd.log # Beginning of %post section. Those commands are executed outside the chroot environment - -mkdir /mnt/sysimage/var/lib/libvirt/iso # Create a directory to store iso images -# virsh pool-create-as --name iso --type dir --target /mnt/sysimage/var/lib/libvirt/iso # Make libvirt aware of this new directory by creating a so-called 'pool' -# doesn't work - -# Add a network bridge. Still need to declare it to virt-manager -nmcli con add ifname br0 type bridge con-name br0 -nmcli con add type bridge-slave ifname enp1s0 master br0 -nmcli con up br0 - -%end # End of the %post section \ No newline at end of file diff --git a/leaves/blmd.cfg b/leaves/bl.cfg similarity index 97% rename from leaves/blmd.cfg rename to leaves/bl.cfg index b0736b8..80bdbc6 100644 --- a/leaves/blmd.cfg +++ b/leaves/bl.cfg @@ -5,8 +5,10 @@ # / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ # /_/ /____/ -# What ? This kickstart file provides a basic block to build a minimal, live, gnome-shell based (desktop-oriented), operating system. -# 'b' for basic building block, 'l' for live, 'm' for minimal, 'd' for development only. +# What ? This kickstart file provides a basic block to build a minimal, live system +# 'b' for basic building block, 'l' for live + +# This is NOT a standalone kickstart file # This kickstart file in particular would not have been possible without the hard work of the following people, # which are the current and former maintainers of the official fedora kickstart files : @@ -37,7 +39,7 @@ clearpart --all part / --size 5120 --fstype ext4 bootloader --timeout=1 -services --enabled=NetworkManager --disabled=sshd +services --enabled=NetworkManager --disabled=sshd network --bootproto=dhcp --device=link --activate --hostname=phyllome rootpw --lock --iscrypted locked @@ -111,7 +113,7 @@ generic-release-notes # "Release Notes" %end # End of the packages section -%post --log=/root/blmd.log # Beginning of the post-installation section. Add logging. +%post --log=/root/bl.log # Beginning of the post-installation section. Add logging. # FIXME: it'd be better to get this installed from a package cat > /etc/rc.d/init.d/livesys << EOF #!/bin/bash diff --git a/leaves/bnd.cfg b/leaves/bnd.cfg index 27b0b5d..06f7d3e 100644 --- a/leaves/bnd.cfg +++ b/leaves/bnd.cfg @@ -5,10 +5,11 @@ # / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ # /_/ /____/ -# What ? This kickstart file provides a basic block beyond the minimal operating system. -# It tries to go beyond what the minimal machine offers. +# What ? This kickstart file itents to provide a basic block small than the minimal operating system. # 'b' for basic building block, 'n' for nano, 'd' for development only. +# This is NOT a standalone kickstart file. + # known issue : name resolution doesn't work as of now # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. diff --git a/leaves/dmd.cfg b/leaves/d.cfg similarity index 68% rename from leaves/dmd.cfg rename to leaves/d.cfg index e1c3aef..bd8199b 100644 --- a/leaves/dmd.cfg +++ b/leaves/d.cfg @@ -6,39 +6,31 @@ # /_/ /____/ # What ? This kickstart file bootstraps a desktop machine. -# 'd' for desktop, 'm' for minimal, 'd' for development only. +# 'd' for desktop # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c dmd.cfg -o flat-dmd.cfg +# ksflatten -c d.cfg -o ../flat/flat-d.cfg -%include bmd.cfg # A base system -%include bdmd.cfg # A desktop environment +%include b.cfg # A base system +%include bd.cfg # A desktop environment reboot --kexec # Reboot straight into the system after a successfull installation %packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. -gnome-initial-setup # Add GNOME initial setup too. Does work. +gnome-initial-setup # Add GNOME initial setup too. %end # End of the %post section -%post --nochroot --log=/mnt/sysimage/root/dmd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/d.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available # set new default background (doesn't work. Would have to call a script on first boot or something) # gsettings set org.gnome.desktop.background picture-uri file://mnt/sysimage/usr/share/backgrounds/elementary/default -# Autostart virt-manager -cat << EOF > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop -[Desktop Entry] -Type=Application -Name=Virtual Machine Manager -Exec=virt-manager -EOF - %end # End of the %post section \ No newline at end of file diff --git a/leaves/dhmd.cfg b/leaves/dh.cfg similarity index 70% rename from leaves/dhmd.cfg rename to leaves/dh.cfg index 40976ce..d60574a 100644 --- a/leaves/dhmd.cfg +++ b/leaves/dh.cfg @@ -6,18 +6,18 @@ # /_/ /____/ # What ? This kickstart file bootstraps a desktop hypervisor. -# 'd' for desktop, 'h' for hypervisor, 'm' for minimal, 'd' for development only. +# 'd' for desktop, 'h' for hypervisor # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c dhmd.cfg -o flat-dhmd.cfg +# ksflatten -c dh.cfg -o ../flat/flat-dh.cfg -%include bmd.cfg # A minimal machine -%include bdmd.cfg # A desktop environment -%include bhmd.cfg # A base hypervisor +%include b.cfg # A minimal machine +%include bd.cfg # A desktop environment +%include bh.cfg # A base hypervisor reboot --kexec # Reboot straight into the system after a successfull installation @@ -28,7 +28,9 @@ gnome-initial-setup # Add GNOME initial setup too to let user create local accou %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/dhmd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/dh.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. + +truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available # Create a file to autostart virt-manager cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF @@ -38,7 +40,4 @@ Name=Virtual Machine Manager Exec=virt-manager EOF -# Download netboot.xyz # cannot resolve hostname -# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /var/lib/libvirt/iso/ - %end # End of the %post section \ No newline at end of file diff --git a/leaves/dhamd.cfg b/leaves/dha.cfg similarity index 67% rename from leaves/dhamd.cfg rename to leaves/dha.cfg index 5897b09..9a9eac0 100644 --- a/leaves/dhamd.cfg +++ b/leaves/dha.cfg @@ -6,19 +6,19 @@ # /_/ /____/ # What ? This kickstart file bootstraps a desktop hypervisor configured for AMD (tm) CPUs. -# 'd' for desktop, 'h' for hypervisor', 'a' for amd, 'm' for minimal, 'd' for development only. +# 'd' for desktop, 'h' for hypervisor', 'a' for amd # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c dhamd.cfg -o flat-dhamd.cfg +# ksflatten -c dha.cfg -o ../flat/flat-dha.cfg -%include bmd.cfg # A minimal machine -%include bdmd.cfg # A desktop environment -%include bhmd.cfg # A base hypervisor -%include bhamd.cfg # Specific virtualization configuration for AMD (tm) CPUs +%include b.cfg # A minimal machine +%include bd.cfg # A desktop environment +%include bh.cfg # A base hypervisor +%include bha.cfg # Specific virtualization configuration for AMD (tm) CPUs reboot --kexec # Reboot straight into the system after a successfull installation @@ -29,7 +29,9 @@ gnome-initial-setup # Add GNOME initial setup too to let user create local accou %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/dhimd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/dha.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. + +truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available # Create a file to autostart virt-manager cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF @@ -39,7 +41,4 @@ Name=Virtual Machine Manager Exec=virt-manager EOF -# Download netboot.xyz # cannot resolve hostname -# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /var/lib/libvirt/iso/ - %end # End of the %post section \ No newline at end of file diff --git a/leaves/dhimd.cfg b/leaves/dhi.cfg similarity index 67% rename from leaves/dhimd.cfg rename to leaves/dhi.cfg index d7b5f4c..7c16337 100644 --- a/leaves/dhimd.cfg +++ b/leaves/dhi.cfg @@ -6,19 +6,19 @@ # /_/ /____/ # What ? This kickstart file bootstraps a desktop hypervisor configured for Intel(tm) CPU and Intel(tm) graphic cards. -# 'd' for desktop, 'h' for hypervisor', 'i' for intel, 'm' for minimal, 'd' for development only. +# 'd' for desktop, 'h' for hypervisor', 'i' for intel # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c dhimd.cfg -o flat-dhimd.cfg +# ksflatten -c dhi.cfg -o ../flat/flat-dhi.cfg -%include bmd.cfg # A minimal machine -%include bdmd.cfg # A desktop environment -%include bhmd.cfg # A base hypervisor -%include bhimd.cfg # Specific virtualization configuration for Intel(tm) CPU and Intel(tm) graphic cards +%include b.cfg # A minimal machine +%include bd.cfg # A desktop environment +%include bh.cfg # A base hypervisor +%include bhi.cfg # Specific virtualization configuration for Intel(tm) CPU and Intel(tm) graphic cards reboot --kexec # Reboot straight into the system after a successfull installation @@ -29,7 +29,9 @@ gnome-initial-setup # Add GNOME initial setup too to let user create local accou %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/dhimd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/dhi.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. + +truncate -s 0 /mnt/sysimage/usr/share/gnome-initial-setup/vendor.conf # remove content of vendor.conf so that all options are made available # Create a file to autostart virt-manager cat > /mnt/sysimage/etc/xdg/autostart/virt-manager.desktop << EOF @@ -39,7 +41,4 @@ Name=Virtual Machine Manager Exec=virt-manager EOF -# Download netboot.xyz # cannot resolve hostname -# wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso -P /var/lib/libvirt/iso/ - %end # End of the %post section \ No newline at end of file diff --git a/leaves/lmd.cfg b/leaves/l.cfg similarity index 91% rename from leaves/lmd.cfg rename to leaves/l.cfg index 528ff3e..346db62 100644 --- a/leaves/lmd.cfg +++ b/leaves/l.cfg @@ -6,7 +6,7 @@ # /_/ /____/ # # What ? This kickstart file bootstraps a live machine. -# 'l' for live, 'm' for minimal, 'd' for development only. +# 'l' for live # Know bug: Cannot resolve host name @@ -15,15 +15,15 @@ # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c lmd.cfg -o flat-lmd.cfg +# ksflatten -c l.cfg -o ../flat/flat-l.cfg -%include blmd.cfg # A base for a minimal live machine +%include bl.cfg # A base for a minimal live machine %packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. %end # End of the packages section -%post --log=/root/lmd.log # Beginning of %post section. The following commands are executed inside a chroot environment. Add logging. +%post --log=/root/l.log # Beginning of %post section. The following commands are executed inside a chroot environment. Add logging. cat >> /etc/rc.d/init.d/livesys << EOF diff --git a/leaves/ldmd.cfg b/leaves/ld.cfg similarity index 76% rename from leaves/ldmd.cfg rename to leaves/ld.cfg index a03cd5b..db0bb23 100644 --- a/leaves/ldmd.cfg +++ b/leaves/ld.cfg @@ -6,35 +6,26 @@ # /_/ /____/ # What ? This kickstart file bootstraps a live desktop machine. -# 'l' for live, 'd' for desktop, 'm' for minimal, 'd' for development only. +# 'l' for live, 'd' for desktop # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye -# This kickstart file in particular would not have been possible without the hard work of the following people, -# which are the current and former maintainers of the official fedora kickstart files : -# Adam Miller, Bastien Nocera, Bruno Wolff III, Bryan Kearney, Chitlesh Goorah, Christoph Wickert, -# Colin Walters, Fabian Affolter, Igor Pires Soares, Jens Petersen, Jeremy Katz, Jeroen van Meeuwen -# Jesse Keating, Luya Tshimbalanga, Matthias Clasen, Pedro Silva, Rahul Sundaram, Sebastian Dziallas -# Sebastian Vahl, wart. More information here : https://pagure.io/fedora-kickstarts -# -# Thank you! - # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c ldmd.cfg -o flat-ldmd.cfg +# ksflatten -c ld.cfg -o ../flat/flat-ld.cfg # An ISO file can be created using the following command as *root*: -# livecd-creator -c flat-ldmd.cfg --fslabel=ldmd +# livecd-creator -c flat-ld.cfg --fslabel=ld # livecd-creator is part of the livecd-tools package # The resulting ISO can be tested with qemu-kvm, using the following command as *root*: -# qemu-kvm -m 2048 -vga virtio -display gtk,gl=on ldmd.iso +# qemu-kvm -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -m 2048 -vga virtio -display gtk,gl=on ld.iso -%include blmd.cfg # A base for a minimal live machine -%include bdmd.cfg # A base for a desktop environment +%include bl.cfg # A base for a minimal live machine +%include bd.cfg # A base for a desktop environment -%post --log=/root/ldmd.log # Beginning of %post section. The following commands are executed inside a chroot environment. Add logging +%post --log=/root/ld.log # Beginning of %post section. The following commands are executed inside a chroot environment. Add logging cat >> /etc/rc.d/init.d/livesys << EOF diff --git a/leaves/ldhmd.cfg b/leaves/ldh.cfg similarity index 76% rename from leaves/ldhmd.cfg rename to leaves/ldh.cfg index 5c5c960..27bb45b 100644 --- a/leaves/ldhmd.cfg +++ b/leaves/ldh.cfg @@ -6,24 +6,24 @@ # /_/ /____/ # What ? This kickstart file bootstraps a live desktop hypervisor machine. -# 'l' for live, 'h' for hypervisor, 'd' for desktop, 'm' for minimal, 'd' for development only. +# 'l' for live, 'h' for hypervisor, 'd' for desktop # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c ldhmd.cfg -o flat-ldhmd.cfg +# ksflatten -c ldh.cfg -o ../flat/flat-ldh.cfg # An ISO file can be created using the following command as *root*: -# livecd-creator -c flat-ldhmd.cfg --fslabel=ldhmd +# livecd-creator -c ../flat/flat-ldh.cfg --fslabel=ldh # livecd-creator is part of the livecd-tools package # The resulting ISO can be tested with qemu-kvm, using the following command as *root*: -# qemu-kvm -m 2048 -vga virtio -display gtk,gl=on ldhmd.iso +# qemu-kvm -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -m 2048 -vga virtio -display gtk,gl=on ldh.iso -%include ldmd.cfg # A base for a live desktop minimal machine -%include bhmd.cfg # A base hypervisor +%include ld.cfg # A base for a live desktop minimal machine +%include bh.cfg # A base hypervisor %packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. @@ -31,7 +31,7 @@ virt-manager # Install virt-manager, the graphical front-end for QEMU/KVM %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/ldhmd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/ldh.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. usermod -a -G libvirt liveuser # Make user "liveuser" part of the existing libvirt group to allow it to interact with the guest-hypervisor. chown liveuser:liveuser /mnt/sysimage/var/lib/libvirt/iso # Make the user "liveuser" the owner of this directory diff --git a/leaves/ldhamd.cfg b/leaves/ldha.cfg similarity index 77% rename from leaves/ldhamd.cfg rename to leaves/ldha.cfg index 86eaa3a..0302735 100644 --- a/leaves/ldhamd.cfg +++ b/leaves/ldha.cfg @@ -6,25 +6,25 @@ # /_/ /____/ # What ? This kickstart file bootstraps a live desktop hypervisor configured for AMD (tm) CPUs. -# 'l' for live, 'd' for desktop, 'h' for hypervisor', 'a' for amd, 'm' for minimal, 'd' for development only. +# 'l' for live, 'd' for desktop, 'h' for hypervisor', 'a' for amd # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c ldhamd.cfg -o flat-ldhamd.cfg +# ksflatten -c ldha.cfg -o ../flat/flat-ldha.cfg # An ISO file can be created using the following command as *root*: -# livecd-creator -c flat-ldhamd.cfg --fslabel=ldhamd +# livecd-creator -c ../flat/flat-ldha.cfg --fslabel=ldha # livecd-creator is part of the livecd-tools package # The resulting ISO can be tested with qemu-kvm, using the following command as *root*: -# qemu-kvm -m 2048 -vga virtio -display gtk,gl=on ldhamd.iso +# qemu-kvm -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -m 2048 -vga virtio -display gtk,gl=on ldha.iso -%include ldmd.cfg # A base for a live desktop minimal machine -%include bhmd.cfg # A base hypervisor -%include bhamd.cfg # Specific virtualization configuration for AMD (tm) CPUs +%include ld.cfg # A base for a live desktop minimal machine +%include bh.cfg # A base hypervisor +%include bha.cfg # Specific virtualization configuration for AMD (tm) CPUs %packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. @@ -32,7 +32,7 @@ virt-manager # Install virt-manager, the graphical front-end for QEMU/KVM %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/ldhamd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/ldha.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. usermod -a -G libvirt liveuser # Make user "liveuser" part of the existing libvirt group to allow it to interact with the guest-hypervisor. chown liveuser:liveuser /mnt/sysimage/var/lib/libvirt/iso # Make the user "liveuser" the owner of this directory diff --git a/leaves/ldhimd.cfg b/leaves/ldhi.cfg similarity index 73% rename from leaves/ldhimd.cfg rename to leaves/ldhi.cfg index e2e7c8d..ae8dc02 100644 --- a/leaves/ldhimd.cfg +++ b/leaves/ldhi.cfg @@ -6,25 +6,25 @@ # /_/ /____/ # What ? This kickstart file bootstraps a live desktop hypervisor configured for Intel(tm) CPU and Intel(tm) graphic cards. -# 'l' for live, 'd' for desktop, 'h' for hypervisor, 'i' for intel, 'm' for minimal, 'd' for development only. +# 'l' for live, 'd' for desktop, 'h' for hypervisor, 'i' for intel # ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. # Bye bye! # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c ldhimd.cfg -o flat-ldhimd.cfg +# ksflatten -c ldhi.cfg -o ../flat/flat-ldhi.cfg # An ISO file can be created using the following command as *root*: -# livecd-creator -c flat-ldhimd.cfg --fslabel=ldhimd -# livecd-creator is part of the livecd-tools package +# livecd-creator -c ../flat/flat-ldhi.cfg --fslabel=ldhi +# on Fedora, livecd-creator is part of the livecd-tools package # The resulting ISO can be tested with qemu-kvm, using the following command as *root*: -# qemu-kvm -m 2048 -vga virtio -display gtk,gl=on ldhimd.iso +# qemu-kvm -bios /usr/share/edk2/ovmf/OVMF_CODE.fd -m 2048 -vga virtio -display gtk,gl=on ldhi.iso -%include ldmd.cfg # A base for a live desktop minimal machine -%include bhmd.cfg # A base hypervisor -%include bhimd.cfg # Specific virtualization configuration for Intel(tm) CPU and Intel(tm) graphic cards +%include ld.cfg # A base for a live desktop minimal machine +%include bh.cfg # A base hypervisor +%include bhi.cfg # Specific virtualization configuration for Intel(tm) CPU and Intel(tm) graphic cards %packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. @@ -32,7 +32,7 @@ virt-manager # Install virt-manager, the graphical front-end for QEMU/KVM %end # End of the packages section -%post --nochroot --log=/mnt/sysimage/root/ldhimd.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. +%post --nochroot --log=/mnt/sysimage/root/ldhi.log # Beginning of %post section. Those commands are executed outside the chroot environment. Add logging. usermod -a -G libvirt liveuser # Make user "liveuser" part of the existing libvirt group to allow it to interact with the guest-hypervisor. chown liveuser:liveuser /mnt/sysimage/var/lib/libvirt/iso # Make the user "liveuser" the owner of this directory diff --git a/leaves/ls.cfg b/leaves/ls.cfg new file mode 100644 index 0000000..061a9c7 --- /dev/null +++ b/leaves/ls.cfg @@ -0,0 +1,9 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ + +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented live system. +# 'l' for live, 's' for server \ No newline at end of file diff --git a/leaves/lsh.cfg b/leaves/lsh.cfg new file mode 100644 index 0000000..83adb82 --- /dev/null +++ b/leaves/lsh.cfg @@ -0,0 +1,9 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ + +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented live system with a hypervisor +# 'l' for live, 's' for server, 'h' for hypervisor' \ No newline at end of file diff --git a/leaves/lsha.cfg b/leaves/lsha.cfg new file mode 100644 index 0000000..ca5cc28 --- /dev/null +++ b/leaves/lsha.cfg @@ -0,0 +1,9 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ + +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented live system with a hypervisor optimized for AMD (tm) CPUs +# 'l' for live, 's' for server, 'h' for hypervisor', 'a' for amd \ No newline at end of file diff --git a/leaves/lshi.cfg b/leaves/lshi.cfg new file mode 100644 index 0000000..dacc3f7 --- /dev/null +++ b/leaves/lshi.cfg @@ -0,0 +1,9 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ + +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented live system with a hypervisor optimized for Intel (tm) CPUs +# 'l' for live, 's' for server, 'h' for hypervisor', 'i' for intel \ No newline at end of file diff --git a/leaves/md.cfg b/leaves/s.cfg similarity index 73% rename from leaves/md.cfg rename to leaves/s.cfg index 6ad3d72..83d54fe 100644 --- a/leaves/md.cfg +++ b/leaves/s.cfg @@ -5,19 +5,16 @@ # / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ # /_/ /____/ # -# What ? This kickstart file automatically deploys a minimal system. -# 'm' for minimal, 'd' for development only. +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented system. +# 's' for server # Know bug: Cannot resolve host name -# ATTENTION : this kickstart file will automatically DESTROY the main disk and all of its contents. -# Bye bye! - # In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. # Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : -# ksflatten -c bmd.cfg -o flat-bmd.cfg +# ksflatten -c s.cfg -o ../flat/flat-s.cfg -%include bmd.cfg # A base system +%include b.cfg # A base system firstboot --enable --reconfig # Initial Setup will start after the first reboot reboot --kexec # Reboot straight into the system after a successfull installation @@ -26,4 +23,6 @@ reboot --kexec # Reboot straight into the system after a successfull installatio initial-setup # Install the initial setup package. +# Download netboot.xyz # cannot resolve hostname + %end # End of the packages section \ No newline at end of file diff --git a/leaves/sh.cfg b/leaves/sh.cfg new file mode 100644 index 0000000..1ec5ef8 --- /dev/null +++ b/leaves/sh.cfg @@ -0,0 +1,27 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ +# +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented system with a hypervisor. +# 's' for server, 'h' for hypervisor + +# Know bug: Cannot resolve host name + +# In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. +# Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : +# ksflatten -c sh.cfg -o ../flat/flat-sh.cfg + +%include b.cfg # A base system +%include bh.cfg # A base hypervisor + +firstboot --enable --reconfig # Initial Setup will start after the first reboot +reboot --kexec # Reboot straight into the system after a successfull installation + +%packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. + +initial-setup # Install the initial setup package. + +%end # End of the packages section \ No newline at end of file diff --git a/leaves/sha.cfg b/leaves/sha.cfg new file mode 100644 index 0000000..7f41237 --- /dev/null +++ b/leaves/sha.cfg @@ -0,0 +1,28 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ +# +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented system with a hypervisor optimized for AMD (tm) CPUs +# 's' for server, 'h' for hypervisor', 'a' for amd + +# Know bug: Cannot resolve host name + +# In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. +# Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : +# ksflatten -c sha.cfg -o ../flat/flat-sha.cfg + +%include b.cfg # Include a base system +%include bh.cfg # A base hypervisor +%include bha.cfg # Specific virtualization tweaks for AMD (tm) CPUs + +firstboot --enable --reconfig # Initial Setup will start after the first reboot +reboot --kexec # Reboot straight into the system after a successfull installation + +%packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. + +initial-setup # Install the initial setup package. + +%end # End of the packages section \ No newline at end of file diff --git a/leaves/shi.cfg b/leaves/shi.cfg new file mode 100644 index 0000000..c8f9a99 --- /dev/null +++ b/leaves/shi.cfg @@ -0,0 +1,28 @@ +# __ ____ ____ _____ +# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/ +# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \ +# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ / +# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/ +# /_/ /____/ +# +# What ? When flattened, this file will result in a stand-alone kickstart file that can be automatically deploy into a server-oriented system with a hypervisor optimized for Intel (tm) CPUs +# 's' for server, 'h' for hypervisor', 'i' for intel + +# Know bug: Cannot resolve host name + +# In order to be fed to virt-install or software like livecd-creator, this file needs to be flatten or merged into one. +# Here is how you can do it with the ksflatten tool provided by the pykickstart package on Fedora : +# ksflatten -c shi.cfg -o ../flat/flat-shi.cfg + +%include b.cfg # Include a base system +%include bh.cfg # A base hypervisor +%include bhi.cfg # Specific virtualization tweaks for Intel(tm) CPU and Intel(tm) graphic cards + +firstboot --enable --reconfig # Initial Setup will start after the first reboot +reboot --kexec # Reboot straight into the system after a successfull installation + +%packages --exclude-weakdeps # Beginning of the packages section. Do not include weak dependencies. + +initial-setup # Install the initial setup package. + +%end # End of the packages section \ No newline at end of file