<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Programmer&#39;s Hideaway</title>
    <subtitle>My Personal Website</subtitle>
    <link rel="self" type="application/atom+xml" href="https://4ac5b57e.programmers-hideaway.pages.dev/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-12-28T00:30:12+05:30</updated>
    <id>https://4ac5b57e.programmers-hideaway.pages.dev/atom.xml</id>
    <entry xml:lang="en">
        <title>Fedora on BeagleY-AI</title>
        <published>2025-12-28T00:30:12+05:30</published>
        <updated>2025-12-28T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/">&lt;p&gt;Hello everyone. Today I will be going over getting Fedora Minimal Rawhide running on &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/www.beagleboard.org/boards/beagley-ai&quot;&gt;BeagleY-AI&lt;/a&gt;. I will also talk about the motivation behind this little adventure and the future plans for this little side project.&lt;/p&gt;
&lt;h1 id=&quot;motivation&quot;&gt;Motivation&lt;/h1&gt;
&lt;p&gt;Since starting work at BeagleBoard.org, I’ve tried to follow an upstream-first approach for both Linux and Zephyr RTOS. This philosophy has worked well for Zephyr, but applying it to Linux has been more challenging due to the sheer complexity of upstream Linux development and limited resources.&lt;/p&gt;
&lt;p&gt;The Debian images currently provided by BeagleBoard include a significant number of downstream patches (kernel, Mesa, and others). While these patches are often necessary, they make it difficult to accurately assess the true upstream status of a given board.&lt;/p&gt;
&lt;p&gt;Fedora Linux, on the other hand, is well known for its upstream-first mindset and is widely used by kernel and platform developers. Supporting Fedora—even if initially just as a development-oriented setup—feels like a natural fit.&lt;/p&gt;
&lt;p&gt;On a more personal note, I’ve been using Fedora on my own machines for quite some time. It strikes a good balance between the bleeding-edge nature of Arch Linux and the slower cadence of Ubuntu LTS. Ideally, I’d like to see Fedora IoT or Fedora Server images become viable options on BeagleBoard SBCs.&lt;/p&gt;
&lt;h1 id=&quot;prepare-sd-card&quot;&gt;Prepare SD Card&lt;/h1&gt;
&lt;p&gt;For this setup, I used the &lt;a rel=&quot;external&quot; href=&quot;https://kojipkgs.fedoraproject.org/compose/rawhide/Fedora-Rawhide-20251228.n.0/compose/Spins/aarch64/images/Fedora-Minimal-Rawhide-20251228.n.0.aarch64.raw.xz&quot;&gt;Fedora Minimal Rawhide (2025-12-28) build&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Flash the Fedora image to the SD card. As described in &lt;a rel=&quot;external&quot; href=&quot;https://fedoraproject.org/wiki/Architectures/ARM/Installation&quot;&gt;Fedora docs&lt;/a&gt;, using &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/github.com/fedora-arm/arm-image-installer&quot;&gt;arm-image-installer&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arm-image-installer&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-target=beagleplay&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;                         -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-image=Fedora-Minimal-Rawhide-20251228.n.0.aarch64.raw.xz&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;                         -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-media=/dev/sdx&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-resizefs&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-norootpass&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-showboot&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;                         -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-args&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;console=ttyS2,115200n8 selinux=0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I am using &lt;code&gt;beagleplay&lt;/code&gt; as a target since there is no &lt;code&gt;beagley-ai&lt;/code&gt; target in upstream right now.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Copy proper U-Boot binaries to the SD Card BOOT partition. Prebuilt binaries are available &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/u-boot-beagley-ai/releases&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /pat/to/boot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-beagley-ai/releases/download/v2025.07-Beagle-11.01.05/tiboot3.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-beagley-ai/releases/download/v2025.07-Beagle-11.01.05/tispl.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-beagley-ai/releases/download/v2025.07-Beagle-11.01.05/u-boot.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;fix-initramfs&quot;&gt;Fix Initramfs&lt;/h2&gt;
&lt;p&gt;The initramfs shipped with current Fedora images is missing the &lt;code&gt;irq-ti-sci-intr&lt;/code&gt; driver, which causes the kernel to fail during early boot. I’ve already opened an upstream &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.com/cki-project/kernel-ark/-/merge_requests/4301&quot;&gt;PR&lt;/a&gt; to address this. Until that lands, the workaround is to regenerate the initramfs manually. This can be done from an x86_64 host.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mount SD-Card.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mount&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/sdx3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /mnt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mount&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/sdx2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /mnt/boot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mount&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/sdx1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /mnt/boot/efi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mount&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-bind&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /proc&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /mnt/proc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mount&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-bind&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /sys&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  /mnt/sys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Chroot into the SD-Card root.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; chroot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /mnt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Regenerate initramfs:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dracut&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-regenerate-all&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-force&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-no-hostonly&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-tmpdir&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /tmp&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-add-drivers&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;irq-ti-sci-intr&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Exit and eject the SD card.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;boot-fedora&quot;&gt;Boot Fedora&lt;/h1&gt;
&lt;p&gt;Insert the SD card into the BeagleY-AI and power it on. Once the kernel boots, you’ll see the Fedora first-boot setup wizard over UART. After completing the setup, you should land at a shell prompt:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Fedora&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Linux&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 44&lt;/span&gt;&lt;span&gt; (Rawhide&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Prerelease&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Kernel&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 6.18.0-65.fc44.aarch64&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; aarch64&lt;/span&gt;&lt;span&gt; (ttyS2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; login:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; beagle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Password:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;beagle@localhost &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;~&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ uname -a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Linux&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; localhost.localdomain&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 6.18.0-65.fc44.aarch64&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;1 SMP PREEMPT_DYNAMIC Mon Dec  1 22:47:35 UTC 2025 aarch64 GNU/Linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;beagle@localhost &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;~&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;future-plans&quot;&gt;Future Plans&lt;/h1&gt;
&lt;p&gt;This exercise uncovered more missing pieces than I initially expected. In no particular order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Some binary blobs required to build U-Boot for AM67A are missing from the upstream linux-firmware repository. This prevents U-Boot for BeagleY-AI (and boards like BeaglePlay) from being built as part of Fedora’s uboot-images-armv8 package.&lt;/li&gt;
&lt;li&gt;The initramfs issue described above.&lt;/li&gt;
&lt;li&gt;Wi-Fi support is currently broken in Fedora on this platform.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The short-term goal is to streamline the Fedora bring-up experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proper U-Boot builds in upstream Fedora&lt;/li&gt;
&lt;li&gt;Native support in arm-image-installer&lt;/li&gt;
&lt;li&gt;A fixed initramfs by default&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once these fundamentals are solid, attention can shift to Wi-Fi, display, and other peripherals.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for this post. Hopefully, this helps with improving the upstream status of BeagleBoard Linux SBCs.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post70/www.beagleboard.org/boards/beagley-ai&quot;&gt;BeagleY-AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openqa.fedoraproject.org/nightlies.html&quot;&gt;Fedora Nightlies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/fedora-arm/arm-image-installer&quot;&gt;arm-image-installer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>PocketBeagle 2 Zephyr DFU</title>
        <published>2025-11-15T00:30:12+05:30</published>
        <updated>2025-11-15T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post69/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post69/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post69/">&lt;p&gt;Hello everyone. It has been a while since my last post. Today, I will go over using DFU over USB on PocketBeagle 2. I will only be loading the firmware to RAM, since that should be the normal use case when doing Zephyr development. It is possible to do DFU to MMC or SD Card, so I might cover it in the future.&lt;/p&gt;
&lt;h1 id=&quot;motivation&quot;&gt;Motivation&lt;/h1&gt;
&lt;p&gt;During normal Zephyr development for &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/pocketbeagle_2/doc/index.html&quot;&gt;PocketBeagle 2 A53&lt;/a&gt;, one has to copy the firmware to the SD card (using some sort of MicroSD reader). This is fine for deployment, but it can become cumbersome when doing rapid changes.&lt;/p&gt;
&lt;p&gt;Using DFU over USB allows bypassing the requirement of an SD Card, thus providing a much better setup for rapid prototyping. Using DFU, it is possible to go from scratch to a Zephyr application without having an SD Card plugged in, and with minimal user input.&lt;/p&gt;
&lt;h1 id=&quot;working-demo&quot;&gt;Working Demo&lt;/h1&gt;
&lt;h2 id=&quot;steps&quot;&gt;Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Download the DFU u-boot binaries. I am using &lt;code&gt;v2025.10-am62-pocketbeagle2-11.02.04&lt;/code&gt; for the demo.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tiboot3-usbdfu.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tispl.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/u-boot-zephyrdfu.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;a rel=&quot;external&quot; href=&quot;https://dfu-util.sourceforge.net/&quot;&gt;dfu-util&lt;/a&gt; CLI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Plug in PocketBeagle 2 and check if it is available.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;l&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Upload &lt;code&gt;tiboot3-usbdfu.bin&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bootloader&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tiboot3-usbdfu.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Upload &lt;code&gt;tispl.bin&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; tispl.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tispl.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;Upload &lt;code&gt;u-boot-zephyrdfu.img&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; u-boot.img&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./u-boot-zephyrdfu.img&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;Upload &lt;code&gt;zephyr.bin&lt;/code&gt;. I am using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/micropython-builder/releases/download/continuous-release/pocketbeagle_2-am6254-a53.bin.xz&quot;&gt;MicroPython firmware&lt;/a&gt; here.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/micropython-builder/releases/download/continuous-release/pocketbeagle_2-am6254-a53.bin.xz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;xz&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pocketbeagle_2-am6254-a53.bin.xz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; zephyr.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pocketbeagle_2-am6254-a53.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;logs&quot;&gt;Logs&lt;/h2&gt;
&lt;p&gt;Here are the logs from both host and device to help with the process.&lt;/p&gt;
&lt;h3 id=&quot;host&quot;&gt;Host&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tiboot3-usbdfu.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                                                       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 302&lt;/span&gt;&lt;span&gt;  [https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tiboot3-?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;tiboot3-usbdfu.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;                                                                                                            HTTP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 200&lt;/span&gt;&lt;span&gt;  [https://release-assets.githubusercontent.com/github-production-release-asset/972828200/cf85b54e-eea3-4648-905f-c09fe970d4e1?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   100%&lt;/span&gt;&lt;span&gt; [====================================================================================&amp;gt;&lt;/span&gt;&lt;span&gt;]  304.80K  165.75KB/si&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tispl.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                                                       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 302&lt;/span&gt;&lt;span&gt;  [https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/tispl.bi?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span&gt;eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MzE4MDU1OSwibmJmIjoxNzYzMTgwMjU5skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;tispl.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;                                                                                                                     HTTP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 200&lt;/span&gt;&lt;span&gt;  [https://release-assets.githubusercontent.com/github-production-release-asset/972828200/8d57a55b-5bd2-4b9d-b391-909781bda7b8?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;-stream&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;            100%&lt;/span&gt;&lt;span&gt; [====================================================================================&amp;gt;&lt;/span&gt;&lt;span&gt;]  924.72K  376.88KB/&lt;/span&gt;&lt;span&gt;se-content-disposition&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Bytes:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 924.72K&lt;/span&gt;&lt;span&gt; [145.76KB/s&lt;/span&gt;&lt;span&gt;] Redirects: 1  Todo: 0  Errors: 0               ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                                                       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/u-boot-zephyrdfu.img&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                                                                                                                       &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 302&lt;/span&gt;&lt;span&gt;  [https://github.com/beagleboard/u-boot-pocketbeagle2/releases/download/v2025.10-am62-pocketbeagle2-11.02.04/u-boot-zAdding&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; URL:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://release-assets.githubusercontent.com/github-production-release-asset/972828200/73c288ae-6ed1-4ca4-b1d8-8e2b8ff7a479?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;P&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; URL:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://release-assets.githubusercontent.com/github-production-release-asset/972828200/73c288ae-6ed1-4ca4-b1d8-8e2b8ff7a479?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;P&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u-boot-zephyrdfu.img&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;P&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 200&lt;/span&gt;&lt;span&gt;  [https://release-assets.githubusercontent.com/github-production-release-asset/972828200/73c288ae-6ed1-4ca4-b1d8-8e2b8ff7a479?sp=r&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;spr&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;se&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rscd&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;rsct&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skoid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sktid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ske&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sks&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;skv&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;sig&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;P&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;O&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;J&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;W&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;U&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 100%&lt;/span&gt;&lt;span&gt; [====================================================================================&amp;gt;&lt;/span&gt;&lt;span&gt;]  875.71K  327.64KB/sDXwtXH4&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;response-content-di[Files:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Bytes:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 875.71K&lt;/span&gt;&lt;span&gt; [195.34KB/s&lt;/span&gt;&lt;span&gt;] Redirects: 1  Todo: 0  Errors: 0               ]tion%2Foctet-stream]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;l&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2005-2009&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Weston&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Harald&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Welte&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OpenMoko&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Inc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2010-2021&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Tormod&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Volden&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Stefan&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; program&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Free&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Software&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; has&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABSOLUTELY&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; NO&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARRANTY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; report&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bugs&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; http://sourceforge.net/p/dfu-util/tickets/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU:&lt;/span&gt;&lt;span&gt; [0451:6165&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; ver&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; devnum&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; intf&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; path&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3-1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; alt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;SocId&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; serial&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;01.00.00.00&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Found&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU:&lt;/span&gt;&lt;span&gt; [0451:6165&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; ver&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; devnum&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; intf&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; path&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;3-1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; alt&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;bootloader&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; serial&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;01.00.00.00&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bootloader&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tiboot3-usbdfu.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2005-2009&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Weston&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Harald&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Welte&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OpenMoko&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Inc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2010-2021&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Tormod&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Volden&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Stefan&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; program&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Free&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Software&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; has&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABSOLUTELY&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; NO&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARRANTY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; report&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bugs&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; http://sourceforge.net/p/dfu-util/tickets/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Warning:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Invalid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; signature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; valid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; will&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; be&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; future&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Opening&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; capable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ID&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0451:6165&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Claiming&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Setting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Alternate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;0 ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Determining&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; returned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; transfer&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; size&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 512&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span&gt;        [=========================&lt;/span&gt;&lt;span&gt;] 100%       312122 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;6&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuMANIFEST-SYNC,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; unable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; read&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; after&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; completion&lt;/span&gt;&lt;span&gt; (LIBUSB_ERROR_IO&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; tispl.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tispl.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2005-2009&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Weston&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Harald&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Welte&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OpenMoko&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Inc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2010-2021&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Tormod&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Volden&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Stefan&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; program&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Free&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Software&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; has&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABSOLUTELY&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; NO&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARRANTY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; report&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bugs&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; http://sourceforge.net/p/dfu-util/tickets/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Warning:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Invalid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; signature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; valid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; will&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; be&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; future&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Opening&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; capable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ID&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0451:6165&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Claiming&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Setting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Alternate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;0 ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Determining&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; returned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; transfer&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; size&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span&gt;        [=========================&lt;/span&gt;&lt;span&gt;] 100%       946923 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;7&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuMANIFEST,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Done!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Resetting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; switch&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; back&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Run-Time&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; u-boot.img&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./u-boot-zephyrdfu.img&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2005-2009&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Weston&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Harald&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Welte&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OpenMoko&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Inc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2010-2021&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Tormod&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Volden&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Stefan&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; program&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Free&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Software&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; has&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABSOLUTELY&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; NO&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARRANTY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; report&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bugs&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; http://sourceforge.net/p/dfu-util/tickets/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Warning:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Invalid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; signature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; valid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; will&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; be&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; future&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Opening&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; capable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ID&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0451:6165&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Claiming&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Setting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Alternate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;1 ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Determining&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; returned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; transfer&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; size&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span&gt;        [=========================&lt;/span&gt;&lt;span&gt;] 100%       896735 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;7&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuMANIFEST,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Done!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Resetting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; switch&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; back&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Run-Time&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; zephyr.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pocketbeagle_2-am6254-a53.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0.11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2005-2009&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Weston&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Harald&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Welte&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OpenMoko&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Inc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copyright&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2010-2021&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Tormod&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Volden&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Stefan&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Schmidt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; program&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Free&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Software&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; has&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABSOLUTELY&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; NO&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARRANTY&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; report&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bugs&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; http://sourceforge.net/p/dfu-util/tickets/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Warning:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Invalid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; signature&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dfu-util:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; valid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; suffix&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; will&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; be&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; future&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu-util&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Opening&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; capable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ID&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0451:6165&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Claiming&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Setting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Alternate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Interface&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;0 ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Determining&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0110&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Device&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; returned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; transfer&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; size&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4096&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Copying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span&gt;        [=========================&lt;/span&gt;&lt;span&gt;] 100%       459192 bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Download&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; done.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;7&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuMANIFEST,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DFU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; state&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfuIDLE,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; condition&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; is&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Done!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Resetting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; USB&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; switch&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; back&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Run-Time&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;pocketbeagle-2-uart&quot;&gt;PocketBeagle 2 UART&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; tio&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/ttyACM0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;09:56:45.642&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; tio 3.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;09:56:45.642&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Press ctrl-t q to quit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;09:56:45.643&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Connected to /dev/ttyACM0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;�&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; U-Boot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SPL&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2025.10-gebc75819ab98&lt;/span&gt;&lt;span&gt; (Nov&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 11&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2025&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 19:33:39&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +0000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SYSFW&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABI:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4.0&lt;/span&gt;&lt;span&gt; (firmware&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rev&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x000b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;11.2.3--v11.02.03 (Fancy Rat)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Changed&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; A53&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; CPU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; frequency&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 1400000000Hz&lt;/span&gt;&lt;span&gt; (T&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; grade&lt;/span&gt;&lt;span&gt;) in DT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SPL&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; initial&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; stack&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; usage:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 13424&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Trying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; boot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dwc3-am62&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dwc3-usb@f900000:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; unable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; get&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ti,syscon-phy-pll-refclk&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; regmap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;###DOWNLOAD ... OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Ctrl+C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; exit&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Loading&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Environment&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; nowhere...&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;init_env&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 10&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; not&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; supported!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Starting&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ATF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ARM64&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; core...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;NOTICE:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  BL31:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v2.12.8&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;release&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;:lts-v2.12.8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;NOTICE:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  BL31:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Built&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; :&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 19:32:42,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Nov&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 11&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2025&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OP-TEE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4.8.0&lt;/span&gt;&lt;span&gt; (gcc&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 13.3.0&lt;/span&gt;&lt;span&gt; (Ubuntu&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 13.3.0-6ubuntu2~24.04&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;1 Tue Nov 11 19:33:32 UTC 2025 aarch64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARNING:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; This&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OP-TEE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; configuration&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; might&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; be&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; insecure!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; WARNING:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Please&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; check&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Primary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; CPU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; initializing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; GIC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; redistributor&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; base&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; address&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; not&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; provided&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Assuming&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; GIC&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; group&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; status&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; modifier&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SYSFW&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABI:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4.0&lt;/span&gt;&lt;span&gt; (firmware&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rev&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x000b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;11.2.3--v11.02.03 (Fancy Rat)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; HUK&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Initialized&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;I/TC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Disabling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; output&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; console&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;U-Boot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SPL&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2025.10-gebc75819ab98&lt;/span&gt;&lt;span&gt; (Nov&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 11&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2025&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 19:34:58&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +0000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SYSFW&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ABI:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 4.0&lt;/span&gt;&lt;span&gt; (firmware&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rev&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x000b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;11.2.3--v11.02.03 (Fancy Rat)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SPL&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; initial&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; stack&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; usage:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2048&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bytes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Trying&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; boot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; DFU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dwc3-am62&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dwc3-usb@f900000:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; unable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; get&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ti,syscon-phy-pll-refclk&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; regmap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;###DOWNLOAD ... OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Ctrl+C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; exit&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Authentication&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;U-Boot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2025.10-gebc75819ab98&lt;/span&gt;&lt;span&gt; (Nov&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 11&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2025&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 19:35:36&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +0000&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SoC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   AM62X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SR1.0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; HS-FS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Reset&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; reason:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; POR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Model:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; BeagleBoard.org&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PocketBeagle2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;DRAM:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  448&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; MiB&lt;/span&gt;&lt;span&gt; (total&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 512&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; MiB&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Core:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  88&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; devices,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 31&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; uclasses,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; devicetree:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; separate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;MMC:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   mmc@fa10000:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; mmc@fa00000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Loading&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Environment&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; nowhere...&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;In:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    serial@2860000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Out:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   serial@2860000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Err:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   serial@2860000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Net:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   No&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ethernet&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; found.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Press&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SPACE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; abort&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; autoboot&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#DOWNLOAD ... OK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Ctrl+C&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; exit&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;# Starting application at 0x80200000 ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span&gt; Booting Zephyr OS build 8a72d776c5af &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Secondary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; CPU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; core&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span&gt; (MPID:0x1&lt;/span&gt;&lt;span&gt;) is up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Secondary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; CPU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; core&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2&lt;/span&gt;&lt;span&gt; (MPID:0x2&lt;/span&gt;&lt;span&gt;) is up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Secondary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; CPU&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; core&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 3&lt;/span&gt;&lt;span&gt; (MPID:0x3&lt;/span&gt;&lt;span&gt;) is up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;MicroPython&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 9999553aae&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2025-10-20&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; zephyr-pocketbeagle_2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; with&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; am6254&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;help()&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; more&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; information.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;bonus&quot;&gt;Bonus&lt;/h1&gt;
&lt;p&gt;I have added initial support for DFU in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;bb-imager&lt;/a&gt;. While the GUI support is not ready yet, it is possible to use the bb-imager-cli.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dfu&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;03:01:0451:6165&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;bootloader&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tiboot3-usbdfu.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;tispl.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./tispl.bin&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;u-boot.img&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./u-boot-zephyrdfu.img&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;	&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;zephyr.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./pocketbeagle_2-am6254-a53.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, &lt;code&gt;03:01:0451:6165&lt;/code&gt; is the device identifier. This can be obtained by using the command &lt;code&gt;bb-imager-cli list-destinations dfu&lt;/code&gt;. The identifier might feel a bit awkward, but it seems to be the most stable way to identify a DFU device in a cross-platform manner, since libusb does not expose any path.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for this post. Hopefully, this serves as an example for anyone trying DFU on PocketBeagle 2.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://dfu-util.sourceforge.net/&quot;&gt;dfu-util&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/latest/exports/docs/linux/Foundational_Components/U-Boot/UG-DFU.html&quot;&gt;TI Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>MCUboot with BeagleConnect Freedom</title>
        <published>2025-08-18T00:30:12+05:30</published>
        <updated>2025-08-18T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post68/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post68/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post68/">&lt;p&gt;Hello everyone. It has been a while since my last post. Today, I will go over using &lt;a rel=&quot;external&quot; href=&quot;https://docs.mcuboot.com/&quot;&gt;MCUboot&lt;/a&gt; based serial OTA on &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. Everything required has already been merged to upstream Zephyr now, so no special considerations should be required.&lt;/p&gt;
&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; contains a simple bootloader in ROM, which boots the Zephyr application from the Flash. However, this minimal bootloader does not support advanced functionality such as OTA updates, rollbacks, etc.&lt;/p&gt;
&lt;p&gt;Zephyr supports &lt;a rel=&quot;external&quot; href=&quot;https://docs.mcuboot.com/&quot;&gt;MCUboot&lt;/a&gt;, which is a secure bootloader for 32-bits microcontrollers. It helps add support for advanced production usecases such as secure boot, OTA, rollbacks, etc.&lt;/p&gt;
&lt;p&gt;In this post, I will only be going over OTA over serial. However, it is possible to support OTA over IEEE802154g and other transport protocols.&lt;/p&gt;
&lt;h1 id=&quot;mcuboot-storage-use&quot;&gt;MCUboot storage use&lt;/h1&gt;
&lt;p&gt;When using &lt;a rel=&quot;external&quot; href=&quot;https://docs.mcuboot.com/&quot;&gt;MCUboot&lt;/a&gt; with &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;, 56KiB is reserved for MCUboot. This leaves 640KiB of main flash for use by the Zephyr application.&lt;/p&gt;
&lt;p&gt;The on-board SPI flash is used to store the secondary image. So outof 2MiB, 1280KiB is available for Zephyr application use.&lt;/p&gt;
&lt;h1 id=&quot;demo&quot;&gt;Demo&lt;/h1&gt;
&lt;p&gt;For the demo application, I will be using the &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/samples/subsys/mgmt/mcumgr/smp_svr/README.html&quot;&gt;smp_svr&lt;/a&gt; example provided by Zephyr.&lt;/p&gt;
&lt;h2 id=&quot;setup-zephyr&quot;&gt;Setup Zephyr&lt;/h2&gt;
&lt;p&gt;Follow the &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/develop/getting_started/index.html&quot;&gt;Getting Started Guide&lt;/a&gt; to set up Zephyr on your machine. Currently, mainline Zephyr is required for out-of-the-box MCUboot support on BeagleConnect Freedom.&lt;/p&gt;
&lt;h2 id=&quot;setup-auterm&quot;&gt;Setup AuTerm&lt;/h2&gt;
&lt;p&gt;Download and set up AuTerm as described in its &lt;a rel=&quot;external&quot; href=&quot;https://github.com/thedjnK/AuTerm&quot;&gt;repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;build-zephyr-application&quot;&gt;Build Zephyr Application&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Build smp_svr + MCUboot using &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/build/sysbuild/index.html&quot;&gt;sysbuild&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;west&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; build&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; beagleconnect_freedom&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-sysbuild&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; samples/subsys/mgmt/mcumgr/smp_svr&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;DEXTRA_CONF_FILE=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;overlay-serial.conf&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Combine the MCUboot and application binary. The application offset should be 56KiB.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;cp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; build/mcuboot/zephyr/zephyr.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; zephyr.bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; conv=notrunc&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bs=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seek=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;56&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; if=build/smp_svr/zephyr/zephyr.signed.bin&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; of=zephyr.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Flash the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;cc1352_flasher&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-bcf&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; zephyr.bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Check serial output.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; tio&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/ttyACM0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;11:52:04.720&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; tio 3.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;11:52:04.720&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Press ctrl-t q to quit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;11:52:04.720&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Connected to /dev/ttyACM0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span&gt; Booting MCUboot v2.2.0-104-gbf5321bb6906 &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span&gt; Using Zephyr OS build v4.2.0-1763-gffb28eed1da9 &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span&gt; Booting Zephyr OS build v4.2.0-1763-gffb28eed1da9 &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;00:00:00.004,699&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;inf&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; smp_sample: build time: Aug 18 2025 11:51:48&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;perform-serial-ota&quot;&gt;Perform Serial OTA&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Launch AuTerm.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/1_Serial_OTA.webp&quot; alt=&quot;AuTerm main window at launch&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Select BeagleConnect Freedom Port.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/2_Serial_OTA.webp&quot; alt=&quot;Selecting the BeagleConnect Freedom port in AuTerm&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Verify the port.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/3_Serial_OTA.webp&quot; alt=&quot;Verifying the selected port&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Open the Port. This will drop you into the Terminal tab. Take note of the build time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/4_Serial_OTA.webp&quot; alt=&quot;AuTerm Terminal tab after opening the port, showing the build time&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Press the reset button on BeagleConnect Freedom and verify the serial output.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/5_Serial_OTA.webp&quot; alt=&quot;Serial output after pressing the reset button on BeagleConnect Freedom&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;Rebuild the firmware as described &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post68/#build-zephyr-application&quot;&gt;above&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the MCUmgr tab.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/6_Serial_OTA.webp&quot; alt=&quot;The MCUmgr tab in AuTerm&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;Select the newly built signed firmware.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/7_Serial_OTA.webp&quot; alt=&quot;Selecting the newly built signed firmware&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;9&quot;&gt;
&lt;li&gt;Switch action from Test to Confirm.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/8_Serial_OTA.webp&quot; alt=&quot;Switching the action from Test to Confirm&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;10&quot;&gt;
&lt;li&gt;Press the Go button to start firmware upload.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/9_Serial_OTA.webp&quot; alt=&quot;Pressing the Go button to start the firmware upload&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;11&quot;&gt;
&lt;li&gt;Wait for the firmware upload to finish.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/10_Serial_OTA.webp&quot; alt=&quot;Firmware upload finished&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;ol start=&quot;12&quot;&gt;
&lt;li&gt;Navigate to the Terminal tab to verify that the build time has changed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/images/post68/11_Serial_OTA.webp&quot; alt=&quot;Terminal tab showing that the build time has changed&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for this post. Hopefully, this serves as an example for anyone trying to have OTA working with BeagleConnect Freedom.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.mcuboot.com/&quot;&gt;MCUboot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/samples/subsys/mgmt/mcumgr/smp_svr/README.html&quot;&gt;Zephyr smp_svr sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/thedjnK/AuTerm&quot;&gt;AuTerm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Running Linux Kernel for Development on PocketBeagle 2</title>
        <published>2025-07-13T00:30:12+05:30</published>
        <updated>2025-07-13T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post67/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post67/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post67/">&lt;p&gt;Hello everyone. In this post, I will go over the setup I use when doing Linux Kernel development. I will be using &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt; in this post, but the same instructions should work with most other BeagleBoard.org Boards.&lt;/p&gt;
&lt;h1 id=&quot;setup&quot;&gt;Setup&lt;/h1&gt;
&lt;p&gt;The first step is to fetch the kernel repo. I am going to use linux-next in this post, but the instructions stay the same for other kernel forks.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone the repo&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; clone&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; linux-next&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Since we are cross-compiling here, we need to set some environment variables. I personally use &lt;a rel=&quot;external&quot; href=&quot;https://direnv.net/&quot;&gt;direnv&lt;/a&gt;, so I set them in the &lt;code&gt;.envrc&lt;/code&gt; file:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;export&lt;/span&gt;&lt;span&gt; ARCH&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span&gt;arm64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; The CROSS_COMPILE binary might be different on Ubuntu based systems. I am using Fedora.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;export&lt;/span&gt;&lt;span&gt; CROSS_COMPILE&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;usr&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;bin&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;aarch64-linux-gnu-&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Create default config.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; defconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;(Optional) Use menu config to enable more config options.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; menuconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;building&quot;&gt;Building&lt;/h1&gt;
&lt;p&gt;Build the kernel.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;copying-to-sd-card&quot;&gt;Copying to SD Card&lt;/h1&gt;
&lt;p&gt;The partitions on SD Card are mounted at &lt;code&gt;/run/media/ayush/&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Copy Kernel&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;cp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arch/arm64/boot/Image&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /run/media/ayush/BOOT/ImageDev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Install kernel modules into SD Card.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; make&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; modules_install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; INSTALL_MOD_PATH=/run/media/ayush/rootfs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Add entry to extlinux.conf&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;cat&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /run/media/ayush/BOOT/extlinux/extlinux.conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;label kernDev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    kernel /ImageDev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    append console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02860000 root=/dev/mmcblk1p3 ro rootfstype=ext4 rootwait net.ifnames=0 modprobe.blacklist=pocktbeagle_connector&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    fdtdir /&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    # fdt /ti/k3-am6232-pocketbeagle2-dev.dtb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;(Optional) It is possible to use a custom devicetree along with the kernel. Just copy the devicetree to &lt;code&gt;/run/media/ayush/BOOT/ti/k3-am6232-pocketbeagle2-dev.dtb&lt;/code&gt; and uncomment the fdt line in the above entry.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Eject the SD Card.&lt;/p&gt;
&lt;h1 id=&quot;booting-into-the-new-kernel&quot;&gt;Booting into the new kernel&lt;/h1&gt;
&lt;p&gt;U-Boot will now show a menu to select the &lt;code&gt;kernDev&lt;/code&gt; boot entry during boot. It is also possible to set the &lt;code&gt;kernDev&lt;/code&gt; entry be the default boot entry in extlinux.conf&lt;/p&gt;
&lt;p&gt;Once boot up is successful, the running kernel can be checked using &lt;code&gt;uname -r&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for this post. Hopefully, this helps people get an idea regarding running custom kernels without replacing the default one. There are also ways like network booting, which can be specially useful for development, but I will leave those for some other time.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Introducing BeagleBoard Imager Flatpak</title>
        <published>2025-07-12T00:30:12+05:30</published>
        <updated>2025-07-12T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post66/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post66/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post66/">&lt;p&gt;Hello everyone. It&#39;s been a while since my last post. Instead of doing the normal weekly update, I have decided to try writing something a bit more in-depth. Recently, I have been successful in publishing &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https://flathub.org/&quot;&gt;Flathub&lt;/a&gt;. So I thought it might be best to go over the development and publishing process.&lt;/p&gt;
&lt;h1 id=&quot;why-flatpak&quot;&gt;Why Flatpak?&lt;/h1&gt;
&lt;p&gt;Flatpak is a cross-distribution packaging format for Linux. It aims to solve the fragmentation of Linux packaging for GUI (and sometimes terminal) applications. However, it is important to note that it doesn&#39;t really replace the distribution packages since many low-level packages cannot be packaged as Flatpak. For more information, check out &lt;a rel=&quot;external&quot; href=&quot;https://docs.flatpak.org/en/latest/&quot;&gt;Flatpak Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have been using &lt;a rel=&quot;external&quot; href=&quot;https://fedoraproject.org/atomic-desktops/sway/&quot;&gt;Fedora Sway Atomic&lt;/a&gt; for a while now. Being an immutable distribution, I prefer using Flatpaks instead of installing things on the base image using &lt;code&gt;rpm-ostree&lt;/code&gt;. Additionally, I already have some experience with Flatpaks due to being a maintainer of &lt;a rel=&quot;external&quot; href=&quot;https://github.com/flathub/org.getzola.zola&quot;&gt;Zola flatpak&lt;/a&gt;. So, it felt like a good idea to start distributing &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; as a flatpak.&lt;/p&gt;
&lt;p&gt;Being on Flathub might also help attract more people to the project, so that&#39;s a bonus.&lt;/p&gt;
&lt;h1 id=&quot;install-from-flathub&quot;&gt;Install from Flathub&lt;/h1&gt;
&lt;p&gt;While the main goal of the post is to build the Flatpak locally, it is important to note that anyone not trying to do development should just use the builds available on Flathub.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;flatpak&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flathub&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; org.beagleboard.imagingutility&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;basics-of-packaging-rust-applications-as-flatpak&quot;&gt;Basics of Packaging Rust Applications as Flatpak&lt;/h1&gt;
&lt;p&gt;Let&#39;s go over the basics of what is required to build a Flatpak package for Rust applications.&lt;/p&gt;
&lt;h2 id=&quot;dependencies&quot;&gt;Dependencies&lt;/h2&gt;
&lt;p&gt;The build step on Flathub does not have access to the internet. This is a problem because it means we cannot download dependencies from crates.io during the build process. Depending on the level of access to the main project, I have found two ways to package Rust applications as Flatpak.&lt;/p&gt;
&lt;h3 id=&quot;create-dependency-list-from-cargo-lock&quot;&gt;Create dependency list from Cargo.lock&lt;/h3&gt;
&lt;p&gt;This method involves creating a list of crates.io dependencies ahead of time, which allows the flatpak builder to download them. This can be done using the scripts provided in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/flatpak/flatpak-builder-tools/tree/master/cargo&quot;&gt;flatpak-builder-tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The upsides to this approach are that it does not need any changes to the upstream repo. Thus, it is useful when the package is being created by someone other than the original developers.&lt;/p&gt;
&lt;p&gt;However, the dependency list needs to be updated for every new release. Flatpak has some bots that allow watching for new releases in a repository. If used properly, these bots will also create PRs, thus automating the whole update process. However, due to the requirement to regenerate the dependency list, the process now requires manual changes from the Flatpak maintainer.&lt;/p&gt;
&lt;h3 id=&quot;use-cargo-vendor&quot;&gt;Use cargo vendor&lt;/h3&gt;
&lt;p&gt;This is the method I am using for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;. Simply put, it uses the &lt;code&gt;cargo vendor&lt;/code&gt; command to create a local copy of the dependencies, which is then released as part of the normal release. These vendored dependencies are then downloaded in the flatpak build process and are used for the dependencies instead of downloading them from crates.io.&lt;/p&gt;
&lt;p&gt;Since I am the author of &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;, adding vendored dependencies to the release was not a problem. So I went this route. For every release, I am now building a &lt;code&gt;tar.gz&lt;/code&gt; for vendored dependencies.&lt;/p&gt;
&lt;h2 id=&quot;files&quot;&gt;Files&lt;/h2&gt;
&lt;p&gt;Let&#39;s now go over the main files involved in building the Flatpak.&lt;/p&gt;
&lt;h3 id=&quot;metinfo-file&quot;&gt;Metinfo File&lt;/h3&gt;
&lt;p&gt;The Metinfo file contains all the information that is shown on the Flathub page for the application. It includes things like various URLs related to the project, screenshots, etc. Here is the metainfo file at the time of writing this blog:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;xml&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;utf-8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;desktop-application&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;id&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;org.beagleboard.imagingutility&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;id&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;BeagleBoard Imager&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;summary&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;BeagleBoard Imaging Utility&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;summary&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;developer&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;org.beagleboard&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;BeagleBoard.org Developers&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;developer&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;metadata_license&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;CC0-1.0&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;metadata_license&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;project_license&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;MIT&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;project_license&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;description&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			Notice: Please download the udev permissions for fixing permission errors when working with BeagleConnect Freedom.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			The easiest way to install the latest operating system images for your Beagle.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;description&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;launchable&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;desktop-id&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;org.beagleboard.imagingutility.desktop&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;launchable&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;branding&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; scheme_preference&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;light&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;#aa5137&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;color&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;primary&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; scheme_preference&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;dark&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;#aa5137&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;color&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;branding&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;categories&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;category&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Development&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;category&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;categories&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;homepage&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://www.beagleboard.org/bb-imager&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;bugtracker&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs/issues&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;donation&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/sponsors/beagleboard&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;contact&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://www.beagleboard.org/collaborate&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;contribute&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs/blob/main/CONTRIBUTING.md&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;vcs-browser&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;content_rating&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;oars-1.1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshots&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://media.githubusercontent.com/media/beagleboard/bb-imager-rs/refs/tags/v0.0.11/assets/screenshots/home.webp&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Home&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://media.githubusercontent.com/media/beagleboard/bb-imager-rs/refs/tags/v0.0.11/assets/screenshots/config.webp&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Image customization&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://media.githubusercontent.com/media/beagleboard/bb-imager-rs/refs/tags/v0.0.11/assets/screenshots/flash.webp&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;image&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Flashing progress&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;caption&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshot&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;screenshots&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;releases&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0.0.10&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; date&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2025-07-05&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.10&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0.0.9&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; date&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2025-07-04&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.9&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0.0.8&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; date&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2025-06-26&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.8&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;url&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;release&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;releases&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;component&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check out the &lt;a rel=&quot;external&quot; href=&quot;https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines&quot;&gt;Flathub metainfo guidelines&lt;/a&gt; for details regarding the metainfo file. This file currently lives in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/blob/8f5aedcb4902b09ce23763beda60a45201eb239f/bb-imager-gui/assets/packages/linux/flatpak/org.beagleboard.imagingutility.metainfo.xml&quot;&gt;bb-imager-rs repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;flatpak-manifest&quot;&gt;Flatpak Manifest&lt;/h2&gt;
&lt;p&gt;The manifest file describes how to build the Flatpak. Let&#39;s look at the manifest file at the time of writing this post:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;d&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rg.beagleboard.imagingutility&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;untime&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rg.freedesktop.Platform&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;untime-version&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;24.08&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;dk&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rg.freedesktop.Sdk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;dk-extensions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rg.freedesktop.Sdk.Extension.rust-stable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ommand&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b-imager-gui&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;uild-options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;  a&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ppend-path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;usr/lib/sdk/rust-stable/bin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;  e&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nv&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    C&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ARGO_HOME&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;run/build/bb-imager-gui/cargo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;inish-args&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;share=ipc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;share=network&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;socket=wayland&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;socket=fallback-x11&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;  #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; SD Card permissions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;system-talk-name=org.freedesktop.UDisks2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;  #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; BeagleConnect Freedom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; --&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;device=all&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;odules&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; n&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ame&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; b&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;b-imager-gui&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    b&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;uildsystem&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; s&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;imple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    b&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;uild-commands&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;argo --offline fetch --verbose --manifest-path bb-imager-gui/Cargo.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;argo --offline build --release --verbose -p bb-imager-gui -F bcf_cc1352p7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;        -F&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bcf_msp430&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;nstall -Dm755 ./target/release/bb-imager-gui -t /app/bin/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;nstall -Dm644 ./bb-imager-gui/assets/packages/linux/BeagleBoardImager.desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;        /&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;app/share/applications/${FLATPAK_ID}.desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;esktop-file-edit --set-icon=${FLATPAK_ID} /app/share/applications/${FLATPAK_ID}.desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;nstall -Dm644 ./bb-imager-gui/assets/icons/icon.png /app/share/icons/hicolor/128x128/apps/${FLATPAK_ID}.png&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;nstall -Dm644 ./bb-imager-gui/assets/packages/linux/flatpak/org.beagleboard.imagingutility.metainfo.xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;        $&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;FLATPAK_DEST/share/metainfo/${FLATPAK_ID}.metainfo.xml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    s&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ources&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ype&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rchive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ttps://github.com/beagleboard/bb-imager-rs/archive/refs/tags/v0.0.10.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        s&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ha256&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;85fe37fe8c75946efb4b6e36afc0f20a5aac8dcf47549dc43a4298fbae231cd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        x&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;-checker-data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ype&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;son&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ttps://api.github.com/repos/beagleboard/bb-imager-rs/releases/latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          v&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ersion-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;tag_name | sub(&amp;quot;^v&amp;quot;; &amp;quot;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;@uri &amp;quot;https://github.com/beagleboard/bb-imager-rs/archive/refs/tags/\(.tag_name).tar.gz&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;imestamp-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;published_at&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ype&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;rchive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ttps://github.com/beagleboard/bb-imager-rs/releases/download/v0.0.10/cargo-vendor.tar.gz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        s&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ha256&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;aee5838110c46d2409adf32a8319581418758fb48dd70faf7d5b463e428f438&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        d&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;endor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        x&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;-checker-data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ype&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; j&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;son&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ttps://api.github.com/repos/beagleboard/bb-imager-rs/releases/latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          v&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ersion-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;tag_name | sub(&amp;quot;^v&amp;quot;; &amp;quot;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          u&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;rl-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;@uri &amp;quot;https://github.com/beagleboard/bb-imager-rs/releases/download/\(.tag_name)/cargo-vendor.tar.gz&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;          t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;imestamp-query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;published_at&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; t&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ype&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        p&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;onfig.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;        d&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;est&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;cargo/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The Rust-specific things to note here are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It is using 3 files: the source tarball, the vendored dependencies tarball, and a cargo config file. The config file is basically there to tell Cargo to use a local folder for dependency resolution instead of trying to download from crates.io.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The x-checker-data is for &lt;a rel=&quot;external&quot; href=&quot;https://docs.flathub.org/docs/for-app-authors/external-data-checker&quot;&gt;Flatpak external data checker&lt;/a&gt;. It can be used to automatically check for updates to external sources in the Flatpak manifest. This allows us to automate updates since the checker will create the PR for us when it detects a new release.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;building-the-package-locally&quot;&gt;Building the Package Locally&lt;/h1&gt;
&lt;p&gt;Now we have a basic idea regarding all the files involved, let&#39;s build and test the flatpak locally.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first tool we need is flatpak-builder. I like installing it as a flatpak, but it is also possible to install it from the distribution repos.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;flatpak&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; org.flatpak.Builder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Clone the repository&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; clone&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://github.com/flathub/org.beagleboard.imagingutility.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; org.beagleboard.imagingutility&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Build and install the Flatpak.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;flatpak&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; org.flatpak.Builder&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-force-clean&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-user&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-repo=repo&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; builddir&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; org.beagleboard.imagingutility.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should now be installed as a flatpak in the system for the current user. Go ahead and test things.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for this post. Hopefully, this helps other people understand how to build and test Flatpak locally.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/flathub/org.beagleboard.imagingutility/tree/master#&quot;&gt;BeagleBoard Rust Imager Flatpak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.flathub.org/docs/for-app-authors/submission&quot;&gt;Flathub Submission Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #34</title>
        <published>2025-06-08T00:30:12+05:30</published>
        <updated>2025-06-08T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post65/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post65/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post65/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;fix-microblocks-ci&quot;&gt;Fix MicroBlocks CI&lt;/h1&gt;
&lt;p&gt;Recently, the MicroBlocks CI which builds microblocks dev and pilot branches have been failing. After a bit of testing, I found that a &lt;code&gt;cmsis_6&lt;/code&gt; zephyr module is now required by &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. The CI was fixed by allowing the module in the custom &lt;code&gt;west.yml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/microblocks-zephyr/commit/5e6c39362c96b0f539d94a942b31d46ec0c68382&quot;&gt;patch&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;h2 id=&quot;improve-windows-performance&quot;&gt;Improve Windows Performance&lt;/h2&gt;
&lt;p&gt;For a while, the Windows implementation of flashing images has been different from Linux and macOS. On Linux and macOS, customization was performed after writing the image. However, on Windows, I was not able to open the &lt;code&gt;sysconf.txt&lt;/code&gt; file for some reason. So on Windows, I was using the following hack:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a temporary copy of the image, or extract to a temporary copy (if the image is compressed).&lt;/li&gt;
&lt;li&gt;Perform customization on this temporary file.&lt;/li&gt;
&lt;li&gt;Write the modified file to the SD Card.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One of the major reasons for not fixing the problem was that I did not have a Windows machine on hand, and my previous machine was too slow to do things in VM. Recently, I got my hands on an old laptop, which while not fast, is ok enough for testing. So after testing various things, and going through the Raspberry Pi imager source, I was able to conclude that Windows does not like non-aligned reads/write on SD Card. Taking inspiration from the Raspberry Pi imager, I created a wrapper that always accesses data in blocks of 4096 bytes. This seems to fix the Windows issue, allowing removing the need for a temporary working copy. Hopefully, it will provide a noticeable speedup in windows flashing.&lt;/p&gt;
&lt;p&gt;Check out the full &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/39&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&quot;disable-customization-for-local-images&quot;&gt;Disable customization for local images&lt;/h2&gt;
&lt;p&gt;Recently, it was pointed out that some of the old Beagle images do not have support for sysconf.txt. Additionally, it can be confusing for new users to have customization options present in local images, since there is nothing to check if customization is supported on such images. So, I have disabled customization options for all local images for now. I am planning to add a toggle to allow developers to apply customization options on local images, but it should be labeled as experimental since it can lead to flashing errors.&lt;/p&gt;
&lt;p&gt;Check out the full &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/43&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;enable-pocketbeagle-2-a53-gpios&quot;&gt;Enable PocketBeagle 2 A53 GPIOs&lt;/h1&gt;
&lt;p&gt;The GPIO subsystem right now has a limitation of only supporting 32 pins per port. While this is a problem that needs to be fixed, all the built-in LEDs in PocketBeagle 2 use pins that are in the supported range. So I have enabled the LEDs for now. This should also help in future PRs that make changes to the GPIO subsystem since PocketBeagle 2 will be used as the testbed.&lt;/p&gt;
&lt;p&gt;Check out the full &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/91051&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;previous-property-support-in-devicetree-compiler&quot;&gt;Previous Property support in devicetree compiler&lt;/h1&gt;
&lt;p&gt;Since I got some feedback on the v2 of previous-property patches, I have posted &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250605-previous-value-v3-0-0983d0733a07@beagleboard.org&quot;&gt;Patch v3&lt;/a&gt; to address the comments. This patch series allows constructing devicetree property from previously defined values, enabling things like append, pre-append, etc.&lt;/p&gt;
&lt;h1 id=&quot;fix-armbian-config-overwrite&quot;&gt;Fix Armbian config overwrite&lt;/h1&gt;
&lt;p&gt;There has been a lot of work to get &lt;a rel=&quot;external&quot; href=&quot;https://www.armbian.com/&quot;&gt;Armbian&lt;/a&gt; working on BeagleBoard boards. Recently, it was discovered that the Armbian kernel had ext4 support built as a module instead of being built-in. This was a problem since the rootfs is ext4. After a bit of testing, I found that the Armbian build script was overwriting the config for docker, and converting the ext4 support from built-in to a module.&lt;/p&gt;
&lt;p&gt;To fix this, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/armbian/build/pull/8276&quot;&gt;PR&lt;/a&gt; that ensures that ext4 (and other drivers) are built as modules only if they are disabled. In case they are set as built-in by some prior config, they are not touched.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/microblocks-zephyr&quot;&gt;MicroBlocks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #33</title>
        <published>2025-06-01T00:30:12+05:30</published>
        <updated>2025-06-01T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post64/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post64/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post64/">&lt;p&gt;Hello everyone. I ended up skipping some weekly updates since there was not much to talk about. Maybe I should make this series a bi-weekly thing instead of weekly updates. Anyway, I will be going over things from all the missed weeks as well. Let&#39;s get started.&lt;/p&gt;
&lt;h1 id=&quot;zephyr&quot;&gt;Zephyr&lt;/h1&gt;
&lt;h2 id=&quot;add-main-domain-usarts-for-pocketbeagle-2-m4f&quot;&gt;Add MAIN domain USARTs for PocketBeagle 2 M4F&lt;/h2&gt;
&lt;p&gt;The initial support for &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/pocketbeagle_2/doc/index.html&quot;&gt;PocketBeagle 2 M4F&lt;/a&gt; landed a while ago. This support was quite limited, and is being expanded with time. Initially, I thought that the M4F, which is from MCU domain, did not have access to the MAIN domain peripherals. However, this assumption turned out to be wrong.&lt;/p&gt;
&lt;p&gt;The cross-domain peripheral support varies a bit, but for the most part, it is possible to use MAIN domain peripherals from MCU domain. This meant that more of the PocketBeagle 2 header functionality could be used from the M4F core. However, the current base devicetree for AM62x M4F did not define nodes for the MAIN domain peripherals.&lt;/p&gt;
&lt;p&gt;Since the initial support for M4F was limited to MCU domain UARTs, I started by adding support for MAIN domain USARTs. It is important to note that the M4F does not have access to the interrupts for the MAIN domain USARTs. Thus, only polling based usage is supported.&lt;/p&gt;
&lt;p&gt;I have also started following the Linux kernel devicetree nomenclature of having the domain prefix in the peripherals. I will rename the already existing peripheral nodes in the future.&lt;/p&gt;
&lt;p&gt;Checkout the full &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/90456&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&quot;add-i2c-support-for-pocketbeagle-2-a53&quot;&gt;Add I2C support for PocketBeagle 2 A53&lt;/h2&gt;
&lt;p&gt;The initial support for &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/pocketbeagle_2/doc/index.html&quot;&gt;PocketBeagle 2 A53s&lt;/a&gt; was merged recently. This allows running ZephyrRTOS on the main A53 cores instead of Linux. It uses the same u-boot as Linux, but can be great in very special purpose and high performance real-time use cases.&lt;/p&gt;
&lt;p&gt;The initial support was limited to just USARTs. However, I have created a PR to enable I2C pins on the header. Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/90637&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-imaging-utility&quot;&gt;BeagleBoard Imaging Utility&lt;/h1&gt;
&lt;h2 id=&quot;macos-signing&quot;&gt;macOS signing&lt;/h2&gt;
&lt;p&gt;For the longest time, the BeagleBoard imaging utility was not signed on any platform. This was a big problem in the case of macOS since without proper signing and notarization, it can be quite confusing and difficult for non-tech savvy people to get it to launch. Since I do not own a mac, it was also quite difficult to test, and thus, I have been mostly ignoring it.&lt;/p&gt;
&lt;p&gt;However, with the help from &lt;a rel=&quot;external&quot; href=&quot;https://github.com/lorforlinux&quot;&gt;Deepak&lt;/a&gt;, I was able to get the macOS packages properly signed and notarized. So, hopefully, this will help attract more users, which in turn might become contributors.&lt;/p&gt;
&lt;p&gt;The first release with proper signing is &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.6&quot;&gt;v0.0.6&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;ubuntu-22-04-support&quot;&gt;Ubuntu 22.04 support&lt;/h2&gt;
&lt;p&gt;Since switching the development to GitHub, I have been using ubuntu-24.04 runner for Linux builds. However, it was recently brought to my attention that this makes the package not work on older systems such as Ubuntu 22.04, due to glibc. For now, I have switched to building on ubuntu-22.04 runners. However, maybe it would be a good idea to either use Debian docker containers to build the image, or use musl rust targets and do static linking of libc.&lt;/p&gt;
&lt;h2 id=&quot;gpt-partition-table-support&quot;&gt;GPT partition table support&lt;/h2&gt;
&lt;p&gt;Most of the BeagleBoard Linux images used the MBR partition table, so GPT partition table was not supported in the BeagleBoard Rust Imager. However, it recently came to my attention that the &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beaglev-fire&quot;&gt;BeagleV-Fire&lt;/a&gt; images use the GPT partition table, and thus was failing. However, I have now added initial support for GPT, so hopefully everything works fine (I have only done Linux testing).&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/38&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&quot;usb-dhcp-option&quot;&gt;USB DHCP Option&lt;/h2&gt;
&lt;p&gt;Thanks to the amazing work by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/RobertCNelson&quot;&gt;Robert&lt;/a&gt;, network sharing over USB works great on Windows and macOS. However, it might not always be desirable to have USB NCM support. Thus, it is not possible to enable or disable this from both the CLI and GUI.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/34&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&quot;refresh-button-for-image-list&quot;&gt;Refresh button for Image list&lt;/h2&gt;
&lt;p&gt;BeagleBoard Imager downloads the list of images and firmwares at the start of each run. This sometimes can go wrong because network requests can fail. Earlier, the only real way to fix this was to relaunch the application, after ensuring a working network. However, I have now added a refresh button in the image selection page that allows manually refreshing the list.&lt;/p&gt;
&lt;p&gt;This ended up being a bit more complicated than it might first appear since the distro list is not a single remote list. Instead, it is a result of merging multiple seperate lists. So the refresh button only appears at the first image selection page (no sub-pages).&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/35&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&quot;ssh-auth-key-support&quot;&gt;SSH Auth key support&lt;/h2&gt;
&lt;p&gt;BeagleBoard Imager now supports specifying authorized ssh keys in the UI, similar to Raspberry Pi imager. Most people using ssh will love this option.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/32&quot;&gt;PR&lt;/a&gt; for full details.&lt;/p&gt;
&lt;h1 id=&quot;beagleplay-cc1325p7-micropython-support&quot;&gt;BeaglePlay CC1325P7 Micropython support&lt;/h1&gt;
&lt;p&gt;Unofficial builds for Micropython on BeaglePlay CC1325P7 have existed for a while. However, since the version of Zephyr in upstream Micropython has been updated, I have created an upstream PR to add support for this MCU. Hopefully, people will find it useful.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/17274&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;rust-standard-library-for-uefi&quot;&gt;Rust Standard Library for UEFI&lt;/h1&gt;
&lt;h2 id=&quot;tcp4-write-support&quot;&gt;TCP4 write support&lt;/h2&gt;
&lt;p&gt;Recently, the initial support for TCP4 (which just included connect support) was merged in upstream Rust. Following on the initial PR, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/141532&quot;&gt;PR&lt;/a&gt; that implements support to send data over the TCP4 connection. Let&#39;s hope that it gets merged soon.&lt;/p&gt;
&lt;h2 id=&quot;random-generation-fallback&quot;&gt;Random generation fallback&lt;/h2&gt;
&lt;p&gt;It was reported in a github issue that some UEFI firmwares do not support the EFI_RNG_PROTOCOL. This causes HashMaps to fail on such systems. I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/141324&quot;&gt;PR&lt;/a&gt; to fall back to rdrand on x86 and x86_64 systems if the protocol is missing. This seems to work for the tested systems. I will try adding a similar fallback for ARM systems if someone reports a similar problem.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust STD for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #32</title>
        <published>2025-05-04T00:30:12+05:30</published>
        <updated>2025-05-04T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post63/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post63/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post63/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;use-extlinux-in-armbian-images&quot;&gt;Use extlinux in Armbian images&lt;/h1&gt;
&lt;p&gt;Thanks to all the amazing work by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Grippy98&quot;&gt;Andrei Aldea&lt;/a&gt;, PocketBeagle 2 and other BeagleBoard.org boards support &lt;a rel=&quot;external&quot; href=&quot;https://www.armbian.com/&quot;&gt;Armbian&lt;/a&gt;. By default, it seems Armbian uses the old uEnv.txt file to specify the boot entry. This is fine, but the newer &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ARM-software/u-boot/blob/master/doc/README.distro&quot;&gt;extlinux.conf&lt;/a&gt; is much more powerful, and is already used in normal BeagleBoard.org Debian images.&lt;/p&gt;
&lt;p&gt;There are a few reasons to use extlinux.conf:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First-class support in U-boot.&lt;/li&gt;
&lt;li&gt;Allows multiple boot entries: Great when doing kernel development.&lt;/li&gt;
&lt;li&gt;Allows fallback to option 1 in case of boot failure.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/armbian/build/pull/8130&quot;&gt;PR&lt;/a&gt; to use extlinux.conf in PocketBeagle 2 as a start. I will expand to other boards soon.&lt;/p&gt;
&lt;h1 id=&quot;linux-kernel&quot;&gt;Linux Kernel&lt;/h1&gt;
&lt;p&gt;I tried moving the needle forward regarding connector + addon-board setups upstream. Not much progress, but well, what else is new.&lt;/p&gt;
&lt;h2 id=&quot;send-of-platform-populate-abstractions-patch-series&quot;&gt;Send of_platform_populate abstractions patch series&lt;/h2&gt;
&lt;p&gt;Since I have decided to write the Beagle cape driver in Rust, I was trying to upstream some of the abstractions I need. As a part of this work, I tried sending abstractions for &lt;code&gt;of_platform_populate&lt;/code&gt; and &lt;code&gt;of_platform_depopulate&lt;/code&gt; in the following &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250429-rust-of-populate-v2-1-0ad329d121c5@beagleboard.org&quot;&gt;patch series&lt;/a&gt;. However, it seems like that function is semi-deprecated. Additionally, it seems like it would be better to send a driver patch with all the abstractions before trying to send the abstractions individually since it is an untested driver.&lt;/p&gt;
&lt;p&gt;So the upstreaming rust abstractions are probably on hold for a while. I guess if someone else wants to pick up the abstractions for their drivers, they are in my &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/tree/b4/beagle-cape&quot;&gt;tree&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;start-discussion-for-connector-addon-board-setups&quot;&gt;Start discussion for connector + addon-board setups&lt;/h2&gt;
&lt;p&gt;I have mostly worked with the assumption that any connector + addon-board setup will need to only do manipulation of the tree inside the connector node, rather than the global tree. This was derived from some of the other discussions I have had in the past. However, it seems like not everyone agrees regarding that. So I have created a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/linux-devicetree/e05c315d-a907-45f0-8f5c-1c106b05f548@beagleboard.org/T/#m12c678c2eb0daea8629bbe35607434b29fb55ed5&quot;&gt;discussion thread&lt;/a&gt; to come to a consensus once and for all. I do not want to repeat the same discussion in every thread.&lt;/p&gt;
&lt;p&gt;Hopefully, things get resolved soon one way or the other.&lt;/p&gt;
&lt;h1 id=&quot;beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/h1&gt;
&lt;h2 id=&quot;enable-watchdog-timer-in-base-devicetree&quot;&gt;Enable watchdog timer in base devicetree&lt;/h2&gt;
&lt;p&gt;Since MicroPython now supports Zephyr v4.0.0, I was working on adding beagleplay/cc1352p7 support. However, it turns out, that BeagleConnect Freedom is currently broken in upstream MicroPython. This is due to a new requirement of MicroPython for a watchdog timer in devicetree. This was disabled in the upstream BeagleConnect Freedom devicetree. I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/89328&quot;&gt;PR&lt;/a&gt; to enable it.&lt;/p&gt;
&lt;p&gt;I should also probably create a weekly GitHub action to ensure that BeagleBoard boards do not break, similar to what I am doing for MicroBlocks. There are also plans for maintaining an upstream Zephyr tree specifically for BeagleBoard boards. Stay tuned for that.&lt;/p&gt;
&lt;h2 id=&quot;enable-adc-support-in-micropython&quot;&gt;Enable ADC Support in MicroPython&lt;/h2&gt;
&lt;p&gt;I have also enabled ADC support in upstream MicroPython for BeagleConnect Freedom now. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/17223&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;improve-init-format-handling-in-beagleboard-imaging-utility&quot;&gt;Improve init format handling in BeagleBoard Imaging Utility&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post62/&quot;&gt;Last week&lt;/a&gt;, I introduced Zephyr SD Card images for PocketBeagle 2. These images are intended for running ZephyrRTOS on PocketBeagle 2 A53 cores instead of Linux and thus do not need rootfs. This also means that sysconf.txt based customization options are not useful for these images.&lt;/p&gt;
&lt;p&gt;I added a hacky workaround for these images last week to get initial support in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Imaging Utility&lt;/a&gt;. But since I had some time, I have added proper support for specifying &lt;code&gt;init_format&lt;/code&gt; in the config.json. This is the same as the Rpi config, so things are still backward compatible.&lt;/p&gt;
&lt;p&gt;The changeset can be found in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/31&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/tree/b4/beagle-cape&quot;&gt;Beagle Cape driver Tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/linux-devicetree/e05c315d-a907-45f0-8f5c-1c106b05f548@beagleboard.org/T/#m12c678c2eb0daea8629bbe35607434b29fb55ed5&quot;&gt;Discussion for connector + addon-board setups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #31</title>
        <published>2025-04-27T00:30:12+05:30</published>
        <updated>2025-04-27T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post62/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post62/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post62/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;zephyr-support-for-pocketbeagle-2&quot;&gt;Zephyr support for PocketBeagle 2&lt;/h1&gt;
&lt;p&gt;PocketBeagle 2 is a single board computer with AM62xx soc, and the primary supported OS is Linux. We provide Debian-based images for the board, with initial support for &lt;a rel=&quot;external&quot; href=&quot;https://www.armbian.com/pocketbeagle-2/&quot;&gt;Armbian&lt;/a&gt;. This is what most people will be using it with.&lt;/p&gt;
&lt;p&gt;However, PocketBeagle 2 is a pretty compact SBC, which can work well in cases where running full Linux might not be required. For such use cases, supporting an RTOS such as &lt;a rel=&quot;external&quot; href=&quot;https://www.zephyrproject.org/&quot;&gt;Zephyr&lt;/a&gt; can provide a great way to get the most performance out of the hardware.&lt;/p&gt;
&lt;p&gt;So, continuing the work from M4F, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/89130&quot;&gt;PR&lt;/a&gt; to add Zephyr support for A53s. Currently, only revision A0 is supported.&lt;/p&gt;
&lt;p&gt;The current setup of running Zephyr involves loading Zephyr from U-boot, similar to how the normal Linux images work. However, since Zephyr does not need the Linux rootfs, I have added a new &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-zephyr-images&quot;&gt;repository&lt;/a&gt; to build SD card images for Zephyr. These images are a FAT32 boot partition with u-boot, tiboot3, tispl, and custom extlinux.conf. Initially, I was planning to use &lt;a rel=&quot;external&quot; href=&quot;https://github.com/go-debos/debos&quot;&gt;debos&lt;/a&gt; to build these images. However, I was still getting the same problem as described in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/go-debos/debos&quot;&gt;issue&lt;/a&gt;. So, I switched to using mtools-based image building, which works completely in userspace (and thus inside docker).&lt;/p&gt;
&lt;p&gt;The initial support only includes support for UART (on the debug port), but I will slowly add support for more peripherals. The goal is to have a &lt;a rel=&quot;external&quot; href=&quot;https://micropython.org/&quot;&gt;MicroPython&lt;/a&gt; image for PocketBeagle 2.&lt;/p&gt;
&lt;h1 id=&quot;zephyr-sd-card-image-support-in-beagleboard-rust-imager&quot;&gt;Zephyr SD Card image support in BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;Since I am now building Zephyr SD Card images for PocketBeagle 2, I have added support for these images to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;. They are the same as Linux SD Card images but just don&#39;t have extra customization options.&lt;/p&gt;
&lt;p&gt;The full changeset can be found in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/29&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;rust-overlay-abstractions-patch&quot;&gt;Rust overlay abstractions patch&lt;/h1&gt;
&lt;p&gt;I have been working on adding Beagle Cape support for PocketBeagle 2, using a combination of export-symbols, i2c-extension, and other proposals. I decided to write the driver in Rust, which meant I had to also write a bunch of missing abstractions. Since the initial work on the driver is done, I have started the process of upstreaming the abstractions.&lt;/p&gt;
&lt;p&gt;The first abstraction on the list is &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250422-rust-overlay-abs-v1-0-85779c1b853d@beagleboard.or&quot;&gt;overlay abstractions&lt;/a&gt;, which allows applying and removing fdt overlays from Rust. I will also be submitting other abstractions (such as sysfs, platform populate, etc) soon.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-r-efi-update&quot;&gt;Rust std r-efi update&lt;/h1&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/r-efi/r-efi-alloc/pull/8&quot;&gt;PR&lt;/a&gt; to bump r-efi version in r-efi-alloc has been merged now. So r-efi can now finally be updated to r-efi 5.2.0 in the Rust std.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/138737&quot;&gt;PR&lt;/a&gt; for the full changeset.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/tree/b4/beagle-cape&quot;&gt;Beagle Cape driver Tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #30</title>
        <published>2025-04-20T00:30:12+05:30</published>
        <updated>2025-04-20T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post61/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post61/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post61/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-m4-gpio-support&quot;&gt;PocketBeagle 2 M4 GPIO Support&lt;/h1&gt;
&lt;p&gt;Initial &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/pocketbeagle_2/doc/index.html&quot;&gt;ZephyrRTOS support for PocketBeagle 2 M4 core&lt;/a&gt; was merged last week. This only included tested support for UART (RX: &lt;code&gt;P2.05&lt;/code&gt;, TX: &lt;code&gt;P2.07&lt;/code&gt;). It is possible to enable GPIO and I2C using overlays, but there are no examples at the moment.&lt;/p&gt;
&lt;p&gt;I have created a new &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/88731&quot;&gt;PR&lt;/a&gt; that enables GPIO in the blinky example (pin &lt;code&gt;P2.09&lt;/code&gt;). It should serve as a good example of how to use GPIO from the M4 core.&lt;/p&gt;
&lt;p&gt;It is important to note that to use any pins from the M4 core, they must first be disabled in the Linux kernel devicetrees. Hopefully, once an upstream connector driver exists, this can be fixed using a special cape for M4 GPIOs, but for now, the user needs to investigate it.&lt;/p&gt;
&lt;p&gt;I am also planning to add ZephyrRTOS support for the A53 cores as soon as M4 core support reaches a stable point. Additionally, I also plan to add all possible pinmuxes to the Zephyr devicetree, similar to how we have it in the Linux devicetree. This should allow easier usage of these pins using overlays. Maybe we can even have a GUI to generate overlays at some point.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-connector-driver&quot;&gt;PocketBeagle 2 Connector Driver&lt;/h1&gt;
&lt;p&gt;Since there seem to be some real usage concerns regarding &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-spec/20250415122453.68e4c50f@bootlin.com/T/#m591e737b48ebe96aafa39d87652e07eef99dff90&quot;&gt;export-symbols&lt;/a&gt;, I have been working on an initial PocketBeagle 2 connector driver. To have some fun, I decided to write the driver in Rust, which in the hindside ended up being a bit more work than initially expected.&lt;/p&gt;
&lt;p&gt;The current driver is pretty simple. There are some simple principles I am following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anything attached to the connector is a single cape. It does make non-cape usage a bit more involved right now, but it should be fixable with a simple GUI to generate the required overlay using a few simple toggles.&lt;/li&gt;
&lt;li&gt;The cape devicetree changes should be concentrated on the connector node. This should help with isolation, and curb the concerns regarding security.&lt;/li&gt;
&lt;li&gt;Load overlays from &lt;code&gt;/lib/firmware&lt;/code&gt;. Should help with security concerns upstream.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is no support for reading cape EEPROM right now. Instead, some sysfs entries are provided to allow adding and removing a cape using the devicetree overlay (present in &lt;code&gt;/lib/firmware&lt;/code&gt;) name.&lt;/p&gt;
&lt;p&gt;Since it is written in Rust, I ended up having to write a lot of Rust abstractions (devicetree overlay application, &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/filesystems/sysfs.html&quot;&gt;sysfs&lt;/a&gt;, etc). I will start with sending patches for the abstractions first since I am a bit unsure if all the assumptions made in my abstractions are correct. Check out my &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/tree/b4/beagle-cape&quot;&gt;working tree&lt;/a&gt; for the latest status.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;Some bugs were reported in the BeagleBoard Rust Imager which have been fixed now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/28&quot;&gt;Allow FAT16 BOOT Partition&lt;/a&gt;: This is used in some &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beaglebone-black&quot;&gt;BeagleBone Black&lt;/a&gt; images.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, thanks to the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/25&quot;&gt;work by Sahil Jaiswal&lt;/a&gt;, the UI now uses an indeterminate progress bar for non-progress states.&lt;/p&gt;
&lt;h1 id=&quot;overhaul-rust-uefi-time&quot;&gt;Overhaul Rust UEFI Time&lt;/h1&gt;
&lt;p&gt;Originally, the implementation of SystemTime for UEFI was using &lt;code&gt;Duration&lt;/code&gt;, which was anchored to 1970-01-01-00:00:00 (&lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Unix_time&quot;&gt;UNIX EPOCH&lt;/a&gt;). This meant that date-time before this was simply unrepresentable in the current implementation.&lt;/p&gt;
&lt;p&gt;I have rewritten the implementation with 1900-01-01-00:00:00 as the anchor. This date was chosen, since it is the earliest date supported by UEFI internally, according to the &lt;a rel=&quot;external&quot; href=&quot;https://uefi.org/specs/UEFI/2.11/&quot;&gt;UEFI specification&lt;/a&gt;. Additionally, some additional checks were added to ensure that the results of calculations on SystemTime is representable by UEFI time.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/139806&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/tree/b4/beagle-cape&quot;&gt;Beagle Cape driver Tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #29</title>
        <published>2025-04-13T00:30:12+05:30</published>
        <updated>2025-04-13T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post60/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post60/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post60/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;More work went to make the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt; as educational as possible. The goal of the examples is to teach Linux APIs. Thus the examples try to use the kernel drivers for the different devices as much as possible.&lt;/p&gt;
&lt;h2 id=&quot;make-blinky-example-lower-level&quot;&gt;Make Blinky example lower level&lt;/h2&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples/tree/main/PocketBeagle-2/blinky&quot;&gt;Blinky example&lt;/a&gt; now uses the sysfs entries in the example file. This should help people understand the sysfs LED subsystem interface.&lt;/p&gt;
&lt;h2 id=&quot;make-seven-segments-example-lower-level&quot;&gt;Make Seven Segments example lower level&lt;/h2&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples/tree/main/PocketBeagle-2/seven_segment&quot;&gt;Seven Segments example&lt;/a&gt; now uses the sysfs entries in the example file. This should help people understand the sysfs Seven Segments interface.&lt;/p&gt;
&lt;h2 id=&quot;add-more-rgb-led-examples&quot;&gt;Add more RGB LED Examples&lt;/h2&gt;
&lt;p&gt;The initial RGB LED example produced different color hues using the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/torvalds/linux/blob/master/drivers/leds/rgb/leds-pwm-multicolor.c&quot;&gt;pwm-leds-multicolor&lt;/a&gt; driver. However, this was a bit overwhelming when converting to sysfs abstractions. This is because there are quite a few sysfs entries for Multicolor LEDS. So it was decided to add some more straightforward examples for the device.&lt;/p&gt;
&lt;h3 id=&quot;fade-brightness&quot;&gt;Fade Brightness&lt;/h3&gt;
&lt;p&gt;The fade brightness example uses the &lt;code&gt;brightness&lt;/code&gt; sysfs entries to perform a PWM fade for a single color in the RGB LED. This helps show how the &lt;code&gt;brightness&lt;/code&gt; sysfs entry affects the RGB Led.&lt;/p&gt;
&lt;h3 id=&quot;fade-intensity&quot;&gt;Fade Intensity&lt;/h3&gt;
&lt;p&gt;The fade intensity example uses the &lt;code&gt;multi_intensity&lt;/code&gt; sysfs entry to perform a PWM fade for the single color in the RGB LED. This helps show how &lt;code&gt;multi_intensity&lt;/code&gt; can be used to simulate the same behavior as the &lt;code&gt;brightness&lt;/code&gt; sysfs entry.&lt;/p&gt;
&lt;h3 id=&quot;color-circle&quot;&gt;Color Circle&lt;/h3&gt;
&lt;p&gt;The color circle example demonstrates generating different colors in the color circle. It only generates basic colors, instead of the different color shades.&lt;/p&gt;
&lt;h3 id=&quot;hue&quot;&gt;Hue&lt;/h3&gt;
&lt;p&gt;The hue example is the original RGB LED example, and generates various color hues in the RGB LED, giving a nice visual appearance.&lt;/p&gt;
&lt;h2 id=&quot;use-gpio-keys-for-buttons&quot;&gt;Use GPIO Keys for Buttons&lt;/h2&gt;
&lt;p&gt;In the original examples, I was using &lt;code&gt;libgpiod&lt;/code&gt; to read Techlab Cape button inputs. However, I have switched the new examples to use &lt;a rel=&quot;external&quot; href=&quot;https://github.com/torvalds/linux/blob/master/drivers/input/keyboard/gpio_keys.c&quot;&gt;GPIO keys&lt;/a&gt;. The buttons now emit RIGHT and LEFT keycodes.&lt;/p&gt;
&lt;h2 id=&quot;make-eeprom-example-lower-level&quot;&gt;Make EEPROM example lower level&lt;/h2&gt;
&lt;p&gt;The EEPROM parsing is not handled in the example itself rather than hiding in the &lt;code&gt;beagle_helper&lt;/code&gt;. This allows the example to serve as a good demonstration of how to parse ffi structures in Rust and Python.&lt;/p&gt;
&lt;h2 id=&quot;use-pwm-beeper-driver-for-buzzer&quot;&gt;Use PWM Beeper driver for Buzzer&lt;/h2&gt;
&lt;p&gt;The Buzzer example now uses the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/torvalds/linux/blob/master/drivers/input/misc/pwm-beeper.c&quot;&gt;PWM Beeper&lt;/a&gt; driver, which allows interacting with the character device, similar to GPIO Keys.&lt;/p&gt;
&lt;h1 id=&quot;send-v3-of-export-symbols-patch&quot;&gt;Send v3 of Export Symbols patch&lt;/h1&gt;
&lt;p&gt;I have sent &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250411-export-symbols-v3-1-f59368d97063@beagleboard.org&quot;&gt;Patch v3 for Export Symbols&lt;/a&gt;. I will also be sending a patch for Beagle Capes soon. The reason for Beagle Capes over MikroBUS is that the capes have a much cleaner history with upstream patches. Additionally, I have a cape that exposes a MikroBUS port (&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab Cape&lt;/a&gt;), which should help ensure that board chaining works well.&lt;/p&gt;
&lt;h1 id=&quot;allow-specifying-debian-package-name-in-cargo-packager&quot;&gt;Allow specifying Debian package name in Cargo Packager&lt;/h1&gt;
&lt;p&gt;I have been using a patched version of Cargo Packager for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;bb-imager-rs&lt;/a&gt; since it was missing some features. Since &lt;a rel=&quot;external&quot; href=&quot;https://github.com/crabnebula-dev/cargo-packager/pull/313&quot;&gt;the patch&lt;/a&gt; to disable Linux desktop entry has been merged, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/crabnebula-dev/cargo-packager/pull/321&quot;&gt;PR&lt;/a&gt; to allow manually specifying the name for Debian packages. Once it is merged, I can go back to using the upstream cargo packager.&lt;/p&gt;
&lt;h1 id=&quot;null-stdin-for-uefi-command&quot;&gt;Null stdin for UEFI Command&lt;/h1&gt;
&lt;p&gt;According to the docs in &lt;code&gt;Command::output&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;By default, stdout and stderr are captured (and used to provide the
resulting output). Stdin is not inherited from the parent and any attempt by the child process to read from the stdin stream will result in the stream immediately closing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was being violated by UEFI which was inheriting stdin by default. While the docs don&#39;t explicitly state that the default should be NULL, the behavior seems like reading from NULL.&lt;/p&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/139517&quot;&gt;PR&lt;/a&gt; to implement &lt;code&gt;Stdio::Null&lt;/code&gt; and &lt;code&gt;Stdio::Inherit&lt;/code&gt; for UEFI.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250411-export-symbols-v3-1-f59368d97063@beagleboard.org&quot;&gt;Patch v3 of Export Symbols&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #28</title>
        <published>2025-04-06T00:30:12+05:30</published>
        <updated>2025-04-06T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post59/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post59/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post59/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;h2 id=&quot;beagleconnect-freedom-fixes&quot;&gt;BeagleConnect Freedom Fixes&lt;/h2&gt;
&lt;p&gt;My last updates seem to have caused BeagleConnect Freedom (both CC1352P7 and MSP430) flashing to break. This was reported by @OhioMeasurementDevices on Discord. I have pushed the fixes to crates.io as &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-bcf&quot;&gt;version 1.0.2&lt;/a&gt;. Additionally, I have also yanked the broken version (1.0.1).&lt;/p&gt;
&lt;h2 id=&quot;release-v0-0-5&quot;&gt;Release v0.0.5&lt;/h2&gt;
&lt;p&gt;I have also created a new release for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.5&quot;&gt;bb-imager-rs&lt;/a&gt;, which has BeagleConnect Freedom Flashing working again. Additionally, it also fixes links to MicroBlocks firmware, which were broken previously due to some SHA256 problems.&lt;/p&gt;
&lt;h1 id=&quot;zephyr-support-for-pocketbeagle-2-m4-core&quot;&gt;Zephyr Support for PocketBeagle 2 M4 Core&lt;/h1&gt;
&lt;p&gt;PocketBeagle 2 features the TI AM62x SoC based around an Arm Cortex-A53 multicore cluster with an Arm Cortex-M4F microcontroller, Imagination Technologies AXE-1-16 graphics processor (from revision A1), and TI programmable real-time unit subsystem microcontroller cluster coprocessors.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/87997&quot;&gt;PR&lt;/a&gt; brings &lt;a rel=&quot;external&quot; href=&quot;https://zephyrproject.org/&quot;&gt;ZephyrRTOS&lt;/a&gt; support for the Arm Cortex-M4F microcontroller. This core can be used to offload time-sensitive workflows (PWM bit-banging, Light handling, etc) allowing the A53 cores with Linux to focus on other heavier tasks.&lt;/p&gt;
&lt;p&gt;Only UART support is present in the initial PR. However, I will slowly be adding support for other peripherals to be used from the M4F core.&lt;/p&gt;
&lt;h1 id=&quot;migrate-microblocks-to-github&quot;&gt;Migrate MicroBlocks to GitHub&lt;/h1&gt;
&lt;p&gt;As might be visible, there has been an effort to move a lot of BeagleBoard.org development to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard&quot;&gt;GitHub&lt;/a&gt;. This week, I migrated &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/microblocks-zephyr&quot;&gt;MicroBlocks&lt;/a&gt; to our GitHub. Since the CI for MicroBlocks was already broken on &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/&quot;&gt;openbeagle.org&lt;/a&gt;, it just felt like a good project to migrate.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;h2 id=&quot;migrate-to-github&quot;&gt;Migrate to GitHub&lt;/h2&gt;
&lt;p&gt;The development of PocketBeagle 2 Examples will mostly happen on &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples&quot;&gt;GitHub&lt;/a&gt; now. Hopefully, this will make the examples more discoverable.&lt;/p&gt;
&lt;h2 id=&quot;make-the-accelerometer-example-less-abstracted&quot;&gt;Make the accelerometer example less abstracted&lt;/h2&gt;
&lt;p&gt;In a recent discussion, it was decided that the examples should try more to teach using Linux APIs instead of just how to use a library to access various peripherals. So as a start, I have added a small abstraction to make interacting with the sysfs entries a bit easier, while keeping things mostly transparent.&lt;/p&gt;
&lt;p&gt;The accelerometer example was the first to be switched to the sysfs abstraction. The full diff can be found in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples/pull/3&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;make-the-light-sensor-example-less-abstracted&quot;&gt;Make the light-sensor example less abstracted&lt;/h2&gt;
&lt;p&gt;Following the footsteps of the accelerometer example, I have also switched the light-sensor example to use the sysfs abstraction. The full diff can be found in the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples/pull/4&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;make-blinky-example-less-abstracted&quot;&gt;Make blinky example less abstracted&lt;/h2&gt;
&lt;p&gt;The blinky example was a bit different since it is the first example that requires writing to a sysfs entry. It is still in the draft stage, waiting for review from everyone, but can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples/pull/5&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;intial-tcp4-socket-support-for-uefi&quot;&gt;Intial TCP4 socket support for UEFI&lt;/h1&gt;
&lt;p&gt;I have finally created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/139254&quot;&gt;PR&lt;/a&gt; to add initial support for TCP sockets to Rust std for UEFI. It marks the start of UEFI networking in Rust std and is required for running Rust test suite on UEFI using the &lt;code&gt;remote-test-server&lt;/code&gt; and &lt;code&gt;remote-test-client&lt;/code&gt; setup as described &lt;a rel=&quot;external&quot; href=&quot;https://rustc-dev-guide.rust-lang.org/tests/running.html#running-tests-on-a-remote-machine&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #27</title>
        <published>2025-03-30T00:30:12+05:30</published>
        <updated>2025-03-30T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post58/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post58/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post58/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;h2 id=&quot;github-migration&quot;&gt;GitHub Migration&lt;/h2&gt;
&lt;p&gt;The migration of &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; to GitHub has now been completed. I have also created &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/releases/tag/v0.0.4&quot;&gt;v0.0.4 release&lt;/a&gt; which brings a lot of fixes and marks the end of the migration.&lt;/p&gt;
&lt;h2 id=&quot;eject-after-flashing&quot;&gt;Eject After flashing&lt;/h2&gt;
&lt;p&gt;In prior versions of BeagleBoard Rust Imager, I did not eject the SD card after flashing. This would cause weird issues on Linux like not being able to remount the SD card without removing it first. So, the flasher now ejects the SD card after flashing on Linux.&lt;/p&gt;
&lt;p&gt;Windows and MacOS still do not eject after flashing.&lt;/p&gt;
&lt;h2 id=&quot;windows-customization-fixing&quot;&gt;Windows Customization Fixing&lt;/h2&gt;
&lt;p&gt;Last week Maique Correa Garcia created an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/issues/12&quot;&gt;issue&lt;/a&gt; regarding flashing failure on Windows. On investigating it further, I found that the customization step (which sets username, hostname, etc) was causing the failure on Windows.&lt;/p&gt;
&lt;p&gt;I was able to figure out the initial error quickly. It seems that Windows does not seem to know the size of the SD card which does not have a valid partition table. This meant that when &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/mbrman&quot;&gt;mbrman&lt;/a&gt; crate was trying to guess the size by seeking to the end, it would fail on Windows. The solution to that was to only try reading the MBR partition table.&lt;/p&gt;
&lt;p&gt;However, after fixing that, I quickly ran into another problem. To give some context, the flow of bb-imager SD card flashing is as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the SD card as &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/std/fs/struct.File.html&quot;&gt;std::fs::File&lt;/a&gt; in platform dependent manner.&lt;/li&gt;
&lt;li&gt;Write the OS image to the SD Card File.&lt;/li&gt;
&lt;li&gt;Read the MBR table from the SD Card File.&lt;/li&gt;
&lt;li&gt;Open/create &lt;code&gt;sysconf.txt&lt;/code&gt; in the FAT32 &lt;code&gt;BOOT&lt;/code&gt; parition of the SD Card.&lt;/li&gt;
&lt;li&gt;Append the entries to &lt;code&gt;sysconf.txt&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For some reason, Windows would fail on step 4. In fact, I was not able to read anything from the &lt;code&gt;BOOT&lt;/code&gt; partition on Windows, even though the same code worked fine on Linux.&lt;/p&gt;
&lt;p&gt;I did try various things, and tried looking at RPI-imager for inspiration, but was not able to solve the problem. Maybe the problem is something with the way &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/fatfs&quot;&gt;fatfs&lt;/a&gt; works.&lt;/p&gt;
&lt;p&gt;I then moved onto alternative approaches like having a memory layer on top of the base image which would allow applying customizations in memory, before writing to an SD card. However, this turned out to be a dead end since that would mean needing to have &lt;code&gt;Seek&lt;/code&gt; support in the Os Image file, which is not always possible (since the images can be compressed as XZ). I also did not want to create a temporary copy of the extracted image, since that is problematic on devices with limited storage (The flasher can be run on our boards as well).&lt;/p&gt;
&lt;p&gt;In the end, I settled on having a separate flashing implementation for Windows, which creates a temporary copy of the extracted OS Image, applies customizations to this copy, and then writes the modified Os Image to an SD Card. I feel like if your machine is running something as heavy as Windows, it should probably be fine to use 8G of temporary file storage.&lt;/p&gt;
&lt;h2 id=&quot;update-crates&quot;&gt;Update Crates&lt;/h2&gt;
&lt;p&gt;I have pushed new versions of the following crates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-downloader&quot;&gt;bb-downloader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-bcf&quot;&gt;bb-flasher-bcf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-sd&quot;&gt;bb-flasher-sd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;isaac-parker-s-contributions&quot;&gt;Isaac Parker&#39;s Contributions&lt;/h2&gt;
&lt;p&gt;I would like to thank Isaac Parker for his &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/issues?q=is%3Apr+author%3Aparrotmac&quot;&gt;contributions&lt;/a&gt; last week. Hopefully, BeagleBoard Rust Imager will attract more external contributions with time.&lt;/p&gt;
&lt;h2 id=&quot;ui-code-improvement&quot;&gt;UI Code Improvement&lt;/h2&gt;
&lt;p&gt;I am using &lt;a rel=&quot;external&quot; href=&quot;https://iced.rs/&quot;&gt;iced&lt;/a&gt; as the GUI toolkit for BeagleBoard Rust Imager. It is a cross-platform GUI library for Rust, inspired by Elm. Since the UI code in iced is also just normal Rust (as opposed to &lt;a rel=&quot;external&quot; href=&quot;https://slint.dev/&quot;&gt;Slint&lt;/a&gt; which has a separate language for UI), it can be a bit daunting for new contributors, especially the ones who only want to contribute to the UI.&lt;/p&gt;
&lt;p&gt;While I have no plans to change the toolkit right now, I decided to isolate the code to a single module, to hopefully make the code more readable and maintainable in the long run. Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/pull/21&quot;&gt;PR&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h1 id=&quot;implement-file-times-for-uefi&quot;&gt;Implement File Times for UEFI&lt;/h1&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/138918&quot;&gt;PR&lt;/a&gt; to implement fs File Times for UEFI. This involves adding conversion methods from Unix Time to UEFI Time. I would like to thank everyone involved with the algorithms present &lt;a rel=&quot;external&quot; href=&quot;http://howardhinnant.github.io/date_algorithms.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #26</title>
        <published>2025-03-23T00:30:12+05:30</published>
        <updated>2025-03-23T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post57/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post57/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post57/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;I am gearing up for a v1 release of &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; soon. As such, a lot of work went into it this week.&lt;/p&gt;
&lt;h2 id=&quot;bb-downloader&quot;&gt;BB-Downloader&lt;/h2&gt;
&lt;p&gt;While working on &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;, I initially tried searching for crates that provided the kind of downloading functionality I needed. The features I needed were the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cache downloads to a specific location.&lt;/li&gt;
&lt;li&gt;Use SHA256 for caching.&lt;/li&gt;
&lt;li&gt;Live progress&lt;/li&gt;
&lt;li&gt;Async&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I did not find something that met all the criteria, so I ended up rolling my own. Initially, it was just part of &lt;code&gt;bb-imager&lt;/code&gt;, but it was overdue for a refactor, so I thought might as well spin it up as its own crate. It is now in &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-downloader&quot;&gt;crates.io&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;bb-config&quot;&gt;BB-Config&lt;/h2&gt;
&lt;p&gt;BeagleBoard.org maintains a &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/distros.json&quot;&gt;distros.json&lt;/a&gt; which contains information regarding the distro images available for each board. The format is defined by Raspberry Pi Imager (old bb-imager was a fork of it), and is still being used by the Rust imager.&lt;/p&gt;
&lt;p&gt;I have created a data structure (using serde) to parse and generate this config format. It was initially part of &lt;code&gt;bb-imager&lt;/code&gt;, but since it was also in need of refactor, I have spun it off as an independent &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-config&quot;&gt;crate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; While the config format used by &lt;code&gt;bb-imager-rs&lt;/code&gt; is compatible with the old &lt;code&gt;bb-imager&lt;/code&gt;, it is strictly speaking more of a subset. So it should probably not be used for working with the old imager.&lt;/p&gt;
&lt;h2 id=&quot;bb-flasher&quot;&gt;BB-Flasher&lt;/h2&gt;
&lt;p&gt;With all the refactoring of &lt;code&gt;bb-imager&lt;/code&gt; library, the only functionality that was left in the crate was for flashing. So, I have renamed the crate to &lt;code&gt;bb-flaser&lt;/code&gt; and just made a lot of general improvements in the code. Additionally, &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; and MSP430 support is now optional features. This is nice since that functionality does not work on macOS right now.&lt;/p&gt;
&lt;p&gt;Some of the individual flashers (&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-bcf&quot;&gt;bb-flasher-bcf&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-sd&quot;&gt;bb-flasher-sd&lt;/a&gt;) have already been pushed to crates.io. These aim to provide lower level functionality in a simple manner.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;bb-flasher&lt;/code&gt; crate acts as a wrapper over the lower level crates, while adding the following stuff:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Support for parsing &lt;code&gt;xz&lt;/code&gt; compressed files.&lt;/li&gt;
&lt;li&gt;Providing common trait based interface over different flashers.&lt;/li&gt;
&lt;li&gt;Providing common trait based interface over different types of Os Images.&lt;/li&gt;
&lt;li&gt;Async adapters&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have not pushed &lt;code&gt;bb-flaser&lt;/code&gt; to crates.io yet since &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt; MSPM0 flasher is still not ready to be pushed to crates.io. Let&#39;s see when the time comes for it.&lt;/p&gt;
&lt;h2 id=&quot;github-migration&quot;&gt;GitHub Migration&lt;/h2&gt;
&lt;p&gt;As an experiment to attract more contributors, I have decided to migrate &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; to GitHub.&lt;/p&gt;
&lt;p&gt;I am still in the middle of figuring out the migration to GitHub Actions, but things seem to be working decently well. GitHub CI has a lot of friendly actions, so it has been pretty simple. However, I feel like GitLab CI is still much easier to test locally, since there are no magic actions.&lt;/p&gt;
&lt;p&gt;I also now have a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs/releases/tag/continuous-release&quot;&gt;continuous integration pre-release&lt;/a&gt;, which is quite useful. I also ended up simplifying the CI quite a bit (no longer building packages in PR CLIs) to avoid going over the free CI limits.&lt;/p&gt;
&lt;p&gt;Let&#39;s hope that GitHub migration proves fruitful.&lt;/p&gt;
&lt;h2 id=&quot;cargo-packager&quot;&gt;Cargo Packager&lt;/h2&gt;
&lt;p&gt;As a part of GitHub migration, I ended up revisiting how I was generating the different packages. I was aware of the existence of &lt;a rel=&quot;external&quot; href=&quot;https://docs.crabnebula.dev/packager/&quot;&gt;cargo-packager&lt;/a&gt; for a while, but I had been bitten by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/axodotdev/cargo-dist&quot;&gt;cargo-dist&lt;/a&gt; in the past, so I was a bit cautious regarding switching to something generic again.&lt;/p&gt;
&lt;p&gt;However, since I was doing a huge migration anyway, I thought I might as well use something standard for packaging. I was pleasantly surprised to see how simply I was able to do migration for the GUI. Here are the things I like about it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Much simpler that my custom Makefile/justfile solution.&lt;/li&gt;
&lt;li&gt;Does not need me to create the deb package inside the cross container.&lt;/li&gt;
&lt;li&gt;AppImage creation works flawlessly as well.&lt;/li&gt;
&lt;li&gt;Now have a Windows installer using Wix.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, I am not currently using it for the CLI. The reason is that there is no way to disable generating desktop entry right now. CLIs like bb-imager-cli should not have a desktop entry in the package, so this poses a problem. I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/crabnebula-dev/cargo-packager/pull/313&quot;&gt;PR&lt;/a&gt; to disable it, so hopefully, I can complete my migration soon.&lt;/p&gt;
&lt;p&gt;I also think that it should probably migrate to the newer &lt;a rel=&quot;external&quot; href=&quot;https://github.com/probonopd/go-appimage&quot;&gt;go-appimage&lt;/a&gt; tools for generating AppImages (it currently uses linuxdeployqt). Hopefully, I will get time to create PR regarding this soon.&lt;/p&gt;
&lt;h1 id=&quot;export-symbols-patch&quot;&gt;Export Symbols Patch&lt;/h1&gt;
&lt;p&gt;Since there was almost no discussion in the v1 Export Symbols Patch, I have sent v2 with better examples, and trailers. Hopefully, I will get some feedback this time. Feel free to check it out in the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250323-export-symbols-v2-1-f0ae1748b244@beagleboard.org&quot;&gt;mailing list&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;Some more work went into Rust std for UEFI this week.&lt;/p&gt;
&lt;h2 id=&quot;implement-some-basics-in-uefi-fs&quot;&gt;Implement some basics in UEFI fs&lt;/h2&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/138662&quot;&gt;PR&lt;/a&gt; to add some basic &lt;code&gt;std::fs&lt;/code&gt; for UEFI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Adds fs::canonicalize. Should be same as absolute in case of UEFI since there is no symlink support and absolute path is guaranteed to be uniqe according to spec.&lt;/li&gt;
&lt;li&gt;Make fs::lstat same as fs::stat. Should be same since UEFI does not have symlink support.&lt;/li&gt;
&lt;li&gt;Implement OptionOptions.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;mkdir&quot;&gt;mkdir&lt;/h2&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/138667&quot;&gt;PR&lt;/a&gt; to add support for &lt;code&gt;std::fs::create_directory&lt;/code&gt;. Just a small self-contained part for &lt;code&gt;std::fs&lt;/code&gt; since I have been trying to keep the PRs small enough to review.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/beagleboard/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250323-export-symbols-v2-1-f0ae1748b244@beagleboard.org&quot;&gt;Export Symbols Patch v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #25</title>
        <published>2025-03-16T00:30:12+05:30</published>
        <updated>2025-03-16T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post56/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post56/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post56/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;I am gearing up for a v1 release of &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; soon. As such, a lot of work went into it this week.&lt;/p&gt;
&lt;h2 id=&quot;justfiles&quot;&gt;Justfiles&lt;/h2&gt;
&lt;p&gt;I have been using Makefiles for all the building and packaging tasks in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;. Back when I started using makefiles, I did consider some alternatives:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/matklad/cargo-xtask&quot;&gt;cargo xtask&lt;/a&gt;: I am using xtasks for things which require interacing with Rust code (for example generating manpage using &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/clap_mangen&quot;&gt;clap_mangen&lt;/a&gt;). However, it did not seem like a great fit for a general-purpose task runner since it is somewhat verbose to invoke shell commands. Additionally, compiling Rust isn&#39;t exactly the fastest, especially the first compilation which is the case in CI.&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://just.systems/&quot;&gt;just&lt;/a&gt;: Did not seem to be better enough than make, especially since make is pre-installed in most unix systems.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Additionally, the initial plan was to keep makefiles somewhat short, so readability was not among the top priorities. I was also much less familiar with &lt;code&gt;make&lt;/code&gt; back then, and thus less aware of its pitfalls.&lt;/p&gt;
&lt;p&gt;However, with time, the &lt;code&gt;make&lt;/code&gt; based system grew quite a bit. Since makefile recipes did not have support for real arguments, a lot of recipes were based on pattern matching, which while being clever, ended up being difficult to understand and document. Additionally, while I did find some hacks to auto-generate help pages using a combination of &lt;code&gt;sed&lt;/code&gt;, it was clunky and did not work as expected. There were also a lot of variables in Makefile that could change the build process in interesting ways, but none of them were documented.&lt;/p&gt;
&lt;p&gt;Finally, I was essentially using &lt;code&gt;make&lt;/code&gt; for running shell commands (aka tasks) and not as a build system to generate files. This meant that essentially, all makefile recipes were &lt;code&gt;PHONY&lt;/code&gt; (see &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile&quot;&gt;this&lt;/a&gt; if you do not know what &lt;code&gt;PHONY&lt;/code&gt; refers to in make).&lt;/p&gt;
&lt;p&gt;It was somewhat clear that I needed to rewrite the makefile-based system from scratch, with good discoverability. So I thought, might as well re-evaluate the alternatives. In the end, I chose &lt;a rel=&quot;external&quot; href=&quot;https://just.systems/&quot;&gt;just&lt;/a&gt; because of its simplicity and comment-based documenting (similar to Rust). Additionally, since it is written in Rust, I can contribute any new features or fix bugs much more easily.&lt;/p&gt;
&lt;p&gt;The porting was surprisingly simpler, and overall, the justfiles look much more maintainable. Additionally, anyone new to the project can easily get a handle on the build system now:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; just&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Available&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; recipes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    default&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                        #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; default recipe to display help information&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    generate-cli-manpage&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                           #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Generate Manpage for CLI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    generate-shell-completion&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SHELL&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Generate Shell completion for CLI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    build-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                  #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Release build for Beagle Board Imager CLI. Should be used for final testing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    build-gui&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                  #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Release build for Beagle Board Imager GUI. Should be used for final testing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    build-service&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;              #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Release build for Beagle Board Imager GUI. Should be used for final testing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;/span&gt;&lt;span&gt;housekeeping&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    check&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                          #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Run code checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    clean&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                          #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Clean Artifacts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    test&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                           #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Run tests on workspace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;/span&gt;&lt;span&gt;packaging&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-cli-darwin-zip&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create compressed CLI package for macOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-cli-linux-xz&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;       #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create compressed CLI package for Linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-cli-windows-zip&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create compressed CLI package for Windows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-gui-darwin-dmg&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create macOS dmg package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-gui-linux-appimage&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create Appimage package for GUI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-gui-linux-deb&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;      #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create debian package for GUI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-gui-windows-zip&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create Windows portable zip package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-service-linux-deb&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;  #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create debian package for Beagle Board Imager Service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    package-service-linux-xz&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;   #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Create compressed Beagle Board Imager service package for Linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    release&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; TARGET=_HOST_TARGET&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                    #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Generate all supported packages for the target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    run-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; FLAGS=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                               #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Run CLI for quick testing on host. Flags can be used to modify the build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    run-gui&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; FLAGS=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                               #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Run GUI for quick testing on host. Flags can be used to modify the build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [&lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    setup-appimage&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; INSTALL_DIR=_EXE_DIR&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;            #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Setup for building appimages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    setup-deb&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                      #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Setup for building debian packages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    setup-dmg&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                      #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Setup for building dmg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    setup-rust&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                                     #&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Setup rust toolcahin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; just&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-variables&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;APPIMAGETOOL&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PB2_MSPM0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; RUST_BUILDER&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; VERSION&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I do have some problems with &lt;code&gt;just&lt;/code&gt;, namely there does not seem to be a way to have conditional dependencies (I was able to do this in &lt;code&gt;make&lt;/code&gt; by using some clever hacks). Additionally, I have not been able to get syntax highlight to work in &lt;code&gt;neovim&lt;/code&gt;. So will try to fix those in the future. Overall, I am quite happy with &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/65&quot;&gt;the migration&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;loading-spinners&quot;&gt;Loading Spinners&lt;/h2&gt;
&lt;p&gt;Since config (and its children) can be remote JSON files, which need to be downloaded, I have been hoping to add loading spinner screens for some much-needed visual oomph.&lt;/p&gt;
&lt;p&gt;I was hoping for some third-party widget library with a loading spinner, but I could not find any such crate. Instead, I found an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/iced-rs/iced/tree/master/examples/loading_spinners&quot;&gt;example&lt;/a&gt;. I have added it as a crate to the workspace for now, and it seems to be working well. However, I probably should clean up the code at some point.&lt;/p&gt;
&lt;p&gt;Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/67&quot;&gt;PR&lt;/a&gt; for the exact diffs.&lt;/p&gt;
&lt;h2 id=&quot;persistent-customization&quot;&gt;Persistent Customization&lt;/h2&gt;
&lt;p&gt;Raspberry Pi imaging utility has the ability to save any customization settings applied by the user. This is useful since a lot of people using the GUI would probably prefer having the same settings be used for most of their SD card flashing. As such, I have added persistence to the customization settings, along with options to reset and abort the customizations.&lt;/p&gt;
&lt;p&gt;The settings are stored in the platform-specific app config directories (&lt;code&gt;$HOME/.config/imagingutility/config.json&lt;/code&gt; for Linux) in JSON format. While it is not intended to be modified by the end user, it is possible to do so fairly easily.&lt;/p&gt;
&lt;h2 id=&quot;remove-remote-image-support-in-cli&quot;&gt;Remove remote image support in CLI&lt;/h2&gt;
&lt;p&gt;I added the ability to download and flash images from URL in CLI in the last update. However, it ended up being somewhat limited since there are cases when one would not want to perform a sha256 check on the downloaded image. Additionally, the CLI interface required using non-positional arguments (&lt;code&gt;--img-local&lt;/code&gt; and &lt;code&gt;--img-remote&lt;/code&gt;) which felt a bit weird.&lt;/p&gt;
&lt;p&gt;Finally, it also seemed a bit unnecessary since anyone using CLI is probably already familiar with &lt;code&gt;wget&lt;/code&gt;, and thus should use it for the downloading job. If there are any arguments regarding why remote image support would be useful, feel free to create an issue.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-accelerometer-examples&quot;&gt;PocketBeagle 2 Accelerometer Examples&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab Cape&lt;/a&gt; contains an accelerometer, connected over I2C. I have added a simple Python and Rust example just reading the raw x, y, and z values from the accelerometer using iio sysfs entries. Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/18&quot;&gt;PR&lt;/a&gt; for full details.&lt;/p&gt;
&lt;p&gt;In practice, it looks as follows:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle-2/accelerometer/python$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; python&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; main.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  258&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  258&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Y&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Z&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  258&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;previous-symbol-dtc-patches&quot;&gt;Previous symbol dtc patches&lt;/h1&gt;
&lt;p&gt;I have sent the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250311-previous-value-v2-0-e4a8611e956f@beagleboard.org/&quot;&gt;2nd revisio&lt;/a&gt; of the previous symbol dtc patches. Here is the list of changes in this patch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compare against expected dtb instead of checking each property individually in tests.&lt;/li&gt;
&lt;li&gt;Use xstrdup when copying refs so each marker has its own copy.&lt;/li&gt;
&lt;li&gt;Pass struct data by value, not by pointer.&lt;/li&gt;
&lt;li&gt;Add srcpos_free helper to properly free srcpos which have been extended previously.&lt;/li&gt;
&lt;li&gt;Remove open items since my original choices seem correct.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&#39;s wait for responses in the mailing list now.&lt;/p&gt;
&lt;h1 id=&quot;target-support-in-fdtoverlay&quot;&gt;Target support in fdtoverlay&lt;/h1&gt;
&lt;p&gt;Linux kernel provides support to &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/devicetree/kernel-api.html#c.of_overlay_fdt_apply&quot;&gt;apply devicetree overlays&lt;/a&gt; to specific nodes. This can allow drivers to dynamically apply and remove overlays, which can be used to add support for connector + addon board setups.&lt;/p&gt;
&lt;p&gt;However, currently, there is no way to do the same thing with fdtoverlay. This means to change the target node for the overlay, the devicetree overlay source needs to be modified. This is somewhat inconvenient since any addon board overlays will be created assuming that they will be applied on the connector node directly, instead of the base tree. So the same overlays cannot be used with fdtoverlay.&lt;/p&gt;
&lt;p&gt;Additionally, having support to specify the target node in fdtoverlay will also allow using the same overlays in static configurations for such connectors (since the overlay can be applied using u-boot).&lt;/p&gt;
&lt;p&gt;In practice, it looks as follows:&lt;/p&gt;
&lt;p&gt;base.dts:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/dts-v1/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        my_node: my-node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                prop = &amp;quot;hello&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;overlay.dtso:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/dts-v1/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/plugin/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	fragment@1 {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		target-path = &amp;quot;&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		__overlay__ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			baz: baznode {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;				baz-property = &amp;quot;baz&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;			};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;		};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apply overlay:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;fdtoverlay&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;/my-node&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; base.dtb&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; overlay.dtbo&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; final.dtb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    my-node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        prop = &amp;quot;hello&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        phandle = &amp;lt;0x00000001&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        baznode {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            phandle = &amp;lt;0x00000002&amp;gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            baz-property = &amp;quot;baz&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    __symbols__ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        baz = &amp;quot;/baznode&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        my_node = &amp;quot;/my-node&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It was a bit difficult to implement cleanly since libfdt does not allow allocations. However, it is working well now. Checkout the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250313-fdtoverlay-target-v1-0-dd5924e12bd3@beagleboard.org/&quot;&gt;patch series&lt;/a&gt; for more details. All that&#39;s left is to wait for someone to review the patches.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250311-previous-value-v2-0-e4a8611e956f@beagleboard.org/&quot;&gt;Previous symbol dtc patches v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250313-fdtoverlay-target-v1-0-dd5924e12bd3@beagleboard.org/&quot;&gt;Target support in fdtoverlay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #24</title>
        <published>2025-03-09T00:30:12+05:30</published>
        <updated>2025-03-09T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post55/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post55/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post55/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;I have been planning to make &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; more modular, and extract some of its functionality to other crates. This was to clean up bb-imager (library that powers the GUI and CLI), which now had a lot of platform specific functionality.&lt;/p&gt;
&lt;p&gt;The cleanup also helped get some significant performance improvements, which is always nice to see. Let&#39;s go over the crates that are now in &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;bb-drivelist&quot;&gt;bb-drivelist&lt;/h2&gt;
&lt;p&gt;I have been using a patched version of &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/rs-drivelist&quot;&gt;rs-drivelist&lt;/a&gt; for a while in bb-imager. This was because the version published in &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt; did not have macOS support. I did contribute the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ir1keren/rs-drivelist/pull/3&quot;&gt;patches&lt;/a&gt; upstream, and they were merged. However, it seems that due to some &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ir1keren/rs-drivelist/issues/4#issuecomment-2393393168&quot;&gt;personal issues&lt;/a&gt;, the original author cannot push a new release.&lt;/p&gt;
&lt;p&gt;Additionally, I also wanted to drop dependencies on the old &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/json&quot;&gt;json&lt;/a&gt; crate, and instead use a serde based solution. So I finally decided to make a hard fork and publish a new &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-drivelist&quot;&gt;release&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It would be nice if I could also drop &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/winapi&quot;&gt;wiapi&lt;/a&gt; in favor of &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/windows&quot;&gt;windows&lt;/a&gt;, but that seems a bit more work that I have the time for right now. So if anyone wants to take a crack at it, feel free to try.&lt;/p&gt;
&lt;h2 id=&quot;bb-flasher-bcf&quot;&gt;bb-flasher-bcf&lt;/h2&gt;
&lt;p&gt;Support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; was the main reason for the creating BeagleBoard Rust Imager. It has been present for a while, so, was straightforward to extract. The &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-bcf&quot;&gt;bb-flasher-bcf crate&lt;/a&gt; contains support for both &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/product/CC1352P7&quot;&gt;CC1352P7&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/product/MSP430F5503&quot;&gt;MSP430F5503&lt;/a&gt;, which serves as the USB to UART bridge.&lt;/p&gt;
&lt;p&gt;I have also made the flashing sync, since I feel that most of the flashing should be done in separate threads. The flashing still includes support for real-time progress and early cancellation.&lt;/p&gt;
&lt;p&gt;The library has only been tested on Linux and Windows.&lt;/p&gt;
&lt;h2 id=&quot;bb-flasher-sd&quot;&gt;bb-flasher-sd&lt;/h2&gt;
&lt;p&gt;For the longest time, SD card flashing in BeagleBoard Rust Imager was slower than Raspberry Pi Imager. However, with all the cleanup while creating &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-sd&quot;&gt;bb-flasher-sd&lt;/a&gt;, the flashing got a huge speed-up, and should now be similar to Raspberry Pi Imager. Additionally, I have drastically cut down on the stack usage, so that should also help.&lt;/p&gt;
&lt;p&gt;Finally, I have moved SD card flashing to a separate OS thread instead of tokio thread. This is because it is better to use OS threads for such long-running tasks.&lt;/p&gt;
&lt;p&gt;The library should allow SD card flashing of OS images (even non Beagle ones) from Linux, Windows and macOS.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;More work went into improving &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;. They are almost at the point where they can serve as nice getting started to teach new people about embedded programming.&lt;/p&gt;
&lt;h2 id=&quot;sysfs-led&quot;&gt;Sysfs LED&lt;/h2&gt;
&lt;p&gt;The original LED abstraction in Beagle Helper library only supported GPIO pins. However, some LEDs (like USR_LED{1-4} in PocketBeagle 2) are defined in the devicetree and use the Kernel LED driver.&lt;/p&gt;
&lt;p&gt;I have added support in LED abstraction to allow using LEDs defined in the devicetree using the sysfs entry. I have also modified the PocketBeagle 2 blinky example to use USR_LED4, since it seemed better to not require external LED for a simple blinky example.&lt;/p&gt;
&lt;h2 id=&quot;update-readme&quot;&gt;Update README&lt;/h2&gt;
&lt;p&gt;The README of all the examples for PocketBeagle 2 have been greatly improved. They now follow a common structure with the following sections:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Goals of the example&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overview:&lt;/strong&gt; Details regarding the background of the example.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Challenges:&lt;/strong&gt; Some challenges to get better acquainted with the example.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;They should provide a better start for creating tutorials using the examples.&lt;/p&gt;
&lt;h2 id=&quot;ci-testing&quot;&gt;CI Testing&lt;/h2&gt;
&lt;p&gt;All the Rust examples were already being built in CI to ensure that at least everything builds fine. However, I was not certain how to do it for an interpreted language like Python. However, I have now started using &lt;a rel=&quot;external&quot; href=&quot;https://pypi.org/project/pylint/&quot;&gt;pylint&lt;/a&gt;, which seems to provide at least a basic level of guarantees regarding all python examples.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust Std for UEFI&lt;/h1&gt;
&lt;p&gt;I am still waiting on &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137424&quot;&gt;DevicePathNode PR&lt;/a&gt; to move forward with File I/O implementation. However, I have decided to start pushing some other independent PRs to well, maybe speed things up.&lt;/p&gt;
&lt;h2 id=&quot;ownedevent-abstraction&quot;&gt;OwnedEvent Abstraction&lt;/h2&gt;
&lt;p&gt;Since &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137477&quot;&gt;Service Binding Protocol PR&lt;/a&gt; was merged last week, the next abstraction required for UEFI networking implementation is Events. This is because all UEFI networking protocols are non-blocking, and thus need the use of Events to be used in a blocking fashion.&lt;/p&gt;
&lt;p&gt;Since the rudimentary pieces for events already existed to handle Exit Boot Services event, I just replaced it to use a more strict &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/138236&quot;&gt;OwnedEvent&lt;/a&gt; type, which closes the event on drop. Once it is merged, I will continue the work on implementing TCP4 socket connect.&lt;/p&gt;
&lt;h2 id=&quot;implement-basic-file-i-o-types&quot;&gt;Implement basic File I/O Types&lt;/h2&gt;
&lt;p&gt;Since the other pending PRs make it somewhat hard to work on a lot of other possible parts (I do not want to have to rebase the PRs after each merge), I ended up adding the basic File I/O types such as &lt;code&gt;FileType&lt;/code&gt;, &lt;code&gt;FilePermissions&lt;/code&gt; and &lt;code&gt;FileAttr&lt;/code&gt;. It should help reduce future time waiting around for the basic abstractions to be merged.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-drivelist&quot;&gt;bb-drivelist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-bcf&quot;&gt;bb-flasher-bcf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bb-flasher-sd&quot;&gt;bb-flasher-sd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #23</title>
        <published>2025-03-02T00:30:12+05:30</published>
        <updated>2025-03-02T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post54/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post54/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post54/">&lt;p&gt;Hello everyone. A typical work week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;Continuing the work from &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post53/&quot;&gt;last week&lt;/a&gt;, I finished adding Python examples for all the prior Rust examples. I have also added a lot of new examples, mostly centered around the hardware available in &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab cape for PocketBeagle 2&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;eeprom&quot;&gt;EEPROM&lt;/h2&gt;
&lt;p&gt;I already had a Rust example to parse Beagle EEPROM contents. A python version for the example has also been added. I have also introduced &lt;code&gt;BeagleEeprom&lt;/code&gt; type in both the Rust and Python helper libraries to make it easier for other people to extend. I also ended up learning about &lt;a rel=&quot;external&quot; href=&quot;https://docs.python.org/3/library/struct.html&quot;&gt;struct module in python&lt;/a&gt;, which ended up being better than I expected. I still prefer Rust and C for packed structs, but at least python has something.&lt;/p&gt;
&lt;p&gt;Here is the Python example running:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle-2/eeprom/python$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; python&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; main.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;BeagleEeprom(magic_number&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 85,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 51,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 238&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             hdr1&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hdr_id&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             hdr2&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hdr_id&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             board_info&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;o&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;POCKETBEAGL2A00G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  version&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  proc_number&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  variant&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  pcb_revision&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  schematic_bom_revision&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  software_revision&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  vendor_id&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  build_week&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;02&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  build_year&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                                  serial&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;PB20000183&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             hdr3&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;r&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hdr_id&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             ddr_info&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             termination&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;photo-diode&quot;&gt;Photo Diode&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab cape&lt;/a&gt; has a Photo Diode attached to pin &lt;code&gt;P1.19&lt;/code&gt;. I have added Python and Rust examples to use the Photo Diode to detect whether it is dark or light, based on a threshold. The helper library also contains &lt;code&gt;LightSensor&lt;/code&gt; for general usage. The full details can be found in the following &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/9#4904e12bfa96bd96372ab6138efe4977fc157b4d&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It would be nice to write a Photo Diode kernel driver at some point, since currently the examples are directly reading ADC values.&lt;/p&gt;
&lt;h2 id=&quot;seven-segments&quot;&gt;Seven Segments&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab cape&lt;/a&gt; has two 7-segment displays. The displays are connected to &lt;code&gt;MCP23S18&lt;/code&gt;, an IO extender, which is connected to PocketBeagle 2 over SPI. After a bit of grepping, I found that the upstream kernel already has a driver for &lt;a rel=&quot;external&quot; href=&quot;https://elixir.bootlin.com/linux/v6.13.5/source/drivers/auxdisplay/seg-led-gpio.c&quot;&gt;seven segment displays&lt;/a&gt;, so I am using it instead of driving the GPIOs from userspace. The full details can be found in the following &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/10&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Currently, both the 7-segment displays are driven by separate drivers, since there does not exist a 14-segment GPIO driver for now. The subsystem seems to have support for 14 segment, so maybe it would be useful to write one.&lt;/p&gt;
&lt;h2 id=&quot;tonal-buzzer&quot;&gt;Tonal Buzzer&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab cape&lt;/a&gt; has a buzzer connected to pin &lt;code&gt;P2.30&lt;/code&gt;. Since the pin does not have hardware PWM, and producing notes only really needs 50% duty cycle at comparatively low frequencies, I am using the &lt;a rel=&quot;external&quot; href=&quot;https://elixir.bootlin.com/linux/v6.13.5/source/drivers/pwm/pwm-gpio.c&quot;&gt;pwm-gpio driver&lt;/a&gt;. The full details can be found in the following &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/11&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The example currently plays Hedwig&#39;s theme from the Harry Potter Movies, which is ported from an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/robsoncouto/arduino-songs/blob/master/harrypotter/harrypotter.ino&quot;&gt;Arduino example&lt;/a&gt;. I might end up adding the buzzer as an alsa device in the future, but let&#39;s see how that goes.&lt;/p&gt;
&lt;h2 id=&quot;rgb-led&quot;&gt;RGB LED&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab cape&lt;/a&gt; has an RGB LED. I am using the &lt;a rel=&quot;external&quot; href=&quot;https://elixir.bootlin.com/linux/v6.13.5/source/drivers/leds/rgb/leds-pwm-multicolor.c&quot;&gt;led-pwm-multicolor driver&lt;/a&gt;. The full details can be found in the following &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/13&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The example cycles through different hues.&lt;/p&gt;
&lt;h1 id=&quot;techlab-cape-devicetree-overlay&quot;&gt;TechLab Cape Devicetree Overlay&lt;/h1&gt;
&lt;p&gt;The PocketBeagle 2 examples, specially when using TechLab Cape need a devicetree overlay for some specific pinmux and devices such 7-segments, RGB Led, etc. The overlay can be found in the following &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/BeagleBoard-DeviceTrees/-/merge_requests/109&quot;&gt;PR&lt;/a&gt;. This overlay will be present in new distro images going forward.&lt;/p&gt;
&lt;h1 id=&quot;devicetree-compiler-support-for&quot;&gt;Devicetree Compiler support for /./&lt;/h1&gt;
&lt;p&gt;Normally, node properties in devicetree can only be replaced with new ones. A lot of hardware devicetrees actually include base devicetrees for SOCs, etc. However, to add some new values to properties, such as adding some extra clocks, pinumx, etc. would require copying all the values from the included devicetree. This could become inconvenient and can allow things to go out of sync.&lt;/p&gt;
&lt;p&gt;A few months ago, I sent a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/Z24nldCpXpoT7RaK@zatzit/T/#t&quot;&gt;patch series&lt;/a&gt; a few months ago to add capability to append properties instead of overriding them. In that patch series, there was discussion regarding something more flexible, with a popular option being able to use the old value to construct the new property value. This will allow a lot of usecases such as appending, pre-appending, duplicating, etc.&lt;/p&gt;
&lt;p&gt;In practice, it looks as follows:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dts-v1/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    str-prop = &amp;quot;0&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    /* append */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    str-prop = /./, &amp;quot;1&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    /* pre-append */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    str-prop = &amp;quot;1&amp;quot;, /./;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    /* duplicate */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    str-prop = /./, /./;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The full patch series can be found &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250301-previous-value-v1-0-71d612eb0ea9@beagleboard.org&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;devicetree-specification-export-symbols&quot;&gt;Devicetree Specification export-symbols&lt;/h1&gt;
&lt;p&gt;I have been pursuing various possible methods to allow upstream drivers for connector add-on-board setups such as &lt;a rel=&quot;external&quot; href=&quot;https://www.mikroe.com/mikrobus&quot;&gt;MikroBUS&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://docs.beagleboard.org/boards/capes/index.html&quot;&gt;Beagle Capes&lt;/a&gt;, etc. The current favorite seems to be export-symbols.&lt;/p&gt;
&lt;p&gt;It was initially proposed by &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241209151830.95723-1-herve.codina@bootlin.com/&quot;&gt;Herve Codina&lt;/a&gt; and seems to be quite useful even outside add-on-board setups. At the basic level, &lt;code&gt;export-symbols&lt;/code&gt; provide a way to define symbols local to the node, and can be used by any overlay or devicetree include that uses the node as target.&lt;/p&gt;
&lt;p&gt;This in turn allows creating overlays for add-on-boards using generic names for the nodes such SPI, I2C, etc. instead of knowing about the device it is being applied to. Thus, the same overlay can be used across multiple connectors in different devices.&lt;/p&gt;
&lt;p&gt;The initial proposal was for Linux kernel, but since I would like to use the same setup in &lt;a rel=&quot;external&quot; href=&quot;https://www.zephyrproject.org/&quot;&gt;ZephyrRTOS&lt;/a&gt; as well, I have been trying to make &lt;code&gt;export-symbols&lt;/code&gt; a standard devicetree node. I already had patch series to add support to &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250110-export-symbols-v1-1-b6213fcd6c82@beagleboard.org/&quot;&gt;dtc&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/86a7a08c-d81c-43d4-99fb-d0c4e9777601@beagleboard.org/T/#t&quot;&gt;fdtoverlay&lt;/a&gt; as a proof of concept.&lt;/p&gt;
&lt;p&gt;The full patch for adding it to the devicetree secification can be found &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250225-export-symbols-v1-1-693049e3e187@beagleboard.org/&quot;&gt;here&lt;/a&gt;. Feel free to chime in if the topic interests you.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/BeagleBoard-DeviceTrees/-/tree/v6.12.x-Beagle?ref_type=heads&quot;&gt;BeagleBoard Devicetrees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250225-export-symbols-v1-1-693049e3e187@beagleboard.org/&quot;&gt;Devicetree Specification export-symbols patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/Z24nldCpXpoT7RaK@zatzit/T/#t&quot;&gt;Devicetree compiler /./ patch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #22</title>
        <published>2025-02-23T00:30:12+05:30</published>
        <updated>2025-02-23T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post53/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post53/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post53/">&lt;p&gt;Hello everyone. This was a light week since I had college exams. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;I have been working on Rust examples for PocketBeagle 2 as evident from my past posts. However, a lot of examples ended up being more complicated than they should be, specially for new users. Additionally, Rust being a compiled language might not be suitable for fast prototyping. Maybe &lt;a rel=&quot;external&quot; href=&quot;https://cranelift.dev/&quot;&gt;cranelift&lt;/a&gt;, can solve this problem, but I have not explored it enough to say yet. Additionally, it seems to require nightly, which I do not want to impose right now.&lt;/p&gt;
&lt;p&gt;So, following the industry, I have also started adding examples in &lt;a rel=&quot;external&quot; href=&quot;https://www.python.org/&quot;&gt;Python&lt;/a&gt;. Being probably one of the most popular scripting language, it seemed like the safe choice.&lt;/p&gt;
&lt;p&gt;Additionally, I have started working on &lt;code&gt;beagle_linux_sdk&lt;/code&gt; libraries for both Rust and Python. They are inspired by &lt;a rel=&quot;external&quot; href=&quot;https://gpiozero.readthedocs.io/en/latest/&quot;&gt;gpiozero&lt;/a&gt; for Raspberry Pi. Since &lt;code&gt;beagle_linux_sdk&lt;/code&gt; is intentionally designed to be as high level and easy to use as possible, it allows making both the Rust and Python examples a lot more simple and readable. The plan is to push the libraries to &lt;a rel=&quot;external&quot; href=&quot;https://pypi.org/&quot;&gt;PYPI&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt; once things are bit more stable.&lt;/p&gt;
&lt;p&gt;As of writing this post, the updated examples are still in open &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/8&quot;&gt;PR&lt;/a&gt;. But they should be merged quite soon.&lt;/p&gt;
&lt;h1 id=&quot;dynamic-devicetree-overlays-from-userspace&quot;&gt;Dynamic Devicetree overlays from userspace&lt;/h1&gt;
&lt;p&gt;While working on PocketBeagle 2 examples, I have started to realize how useful userspace application for devicetree overlays can be for single board computers. Some of the z that I envision are as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Pin muxing:&lt;/strong&gt; A lot of SBC&#39;s aimed for creating hardware projects expose headers, where each pin can be used for multiple things like GPIO, I2C, PWM, etc, depending on the pinmux. I think Raspberry Pi has it&#39;s own solution to do userspace pinmux, but if userspace devicetree application was a thing, it could probably be used for this. Additionally, being able to use dynamic devicetree overlays for pin muxing would allow much easier transition to use proper device trees during production.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Sensors/Devices:&lt;/strong&gt; Using devices such as sensors, external ADCs, EEPROMs, etc are also a common usecase in SBC&#39;s. A lot of current solutions seem to be designed around using user-space drivers in such cases. This is a bit of a shame since Linux kernel already has drivers for a lot of these drivers, and they are probably going to be of higher quality than most user space drivers.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There have been attempts in the past(&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/1417605808-23327-1-git-send-email-pantelis.antoniou@konsulko.com/#t&quot;&gt;OF: DT-Overlay configfs interface (v3)&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20161220190455.25115-1-xypron.glpk@gmx.de/&quot;&gt;of/overlay: sysfs based ABI for dt overlays&lt;/a&gt;), but it seems like they never went anywhere.&lt;/p&gt;
&lt;p&gt;I have started a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/9c326bb7-e09a-4c21-944f-006b3fad1870@beagleboard.org/&quot;&gt;discussion&lt;/a&gt; to see if I can find out what the reasons for the rejection were. Maybe things have changed by now, since the last patch series seems to be from 2017.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;h2 id=&quot;devicepathnode-abstractions&quot;&gt;DevicePathNode Abstractions&lt;/h2&gt;
&lt;p&gt;In the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135368#discussion_r1947926136&quot;&gt;fs::exists&lt;/a&gt;, I was asked to move the DevicePathNode abstractions to a seperate PR for easier review. It took a while due to my limited bandwidth, but I have created the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137424&quot;&gt;PR&lt;/a&gt; now. Hopefully, it will be merged soon, so that the initial &lt;code&gt;fs&lt;/code&gt; support can finally land.&lt;/p&gt;
&lt;h2 id=&quot;efi-service-bindings-abstractions&quot;&gt;Efi Service Bindings Abstractions&lt;/h2&gt;
&lt;p&gt;I have also started work on upstreaming networking with the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/136615&quot;&gt;net stubs PR&lt;/a&gt;. Continuing that, I have created &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137477&quot;&gt;PR&lt;/a&gt; to add EFI service bindings abstractions.&lt;/p&gt;
&lt;p&gt;UEFI Protocols such as TCP4/6, UDP4/6, etc use the EFI Service Binding protocol to create and destroy new instances. More information regarding this can be found in &lt;a rel=&quot;external&quot; href=&quot;https://uefi.org/specs/UEFI/2.11/11_Protocols_UEFI_Driver_Model.html#efi-service-binding-protocol&quot;&gt;UEFI Specification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will try to keep all PRs as short as possible to make the process of upstreaming networking support move faster.&lt;/p&gt;
&lt;h1 id=&quot;zola-flatpak-update&quot;&gt;Zola flatpak update&lt;/h1&gt;
&lt;p&gt;I am one of the maintainers of &lt;a rel=&quot;external&quot; href=&quot;https://github.com/flathub/org.getzola.zola&quot;&gt;Zola Flatpak Package&lt;/a&gt;. Since it seems like everyone else was busy, I ended up updating the flatpak to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/flathub/org.getzola.zola/pull/14&quot;&gt;v0.20.0&lt;/a&gt; that was released recently.&lt;/p&gt;
&lt;p&gt;I also found that the metainfo upstream was out of date. So I also created &lt;a rel=&quot;external&quot; href=&quot;https://github.com/getzola/zola/pull/2809&quot;&gt;PR&lt;/a&gt; upstream to fix it.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137424&quot;&gt;DevicePathNode Abstractions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/137477&quot;&gt;EFI Service binding abstractions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://uefi.org/specs/UEFI/2.11/11_Protocols_UEFI_Driver_Model.html#efi-service-binding-protocol&quot;&gt;UEFI Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/flathub/org.getzola.zola&quot;&gt;Zola Flatpak&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #21</title>
        <published>2025-02-16T00:30:12+05:30</published>
        <updated>2025-02-16T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post52/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post52/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post52/">&lt;p&gt;Hello everyone. Another typical week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-image-builder&quot;&gt;BeagleBoard Image Builder&lt;/h1&gt;
&lt;p&gt;After much deliberation &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post52/&quot;&gt;last week&lt;/a&gt;, I decided to go ahead with trying to use &lt;a rel=&quot;external&quot; href=&quot;https://github.com/go-debos/debos&quot;&gt;debos&lt;/a&gt; for image generation. I was able to create &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/debos-recipes&quot;&gt;debos recipes&lt;/a&gt; for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagley-ai&quot;&gt;BeagleY-AI&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt;. However, the image generated by debos does not seem to boot on either board. More specifically, it does not seem like the soc is able to find the bootloader (u-boot) present in the &lt;code&gt;BOOT&lt;/code&gt; partition.&lt;/p&gt;
&lt;p&gt;I did cross-check everything with the current images, and the partitions seem to be in order. So not sure what is going on here. I also went through the &lt;code&gt;debos&lt;/code&gt; source code to see how it was creating the partitions, but recreating it in normal shell scripts does seem to work as expected. I also tried generating empty images using debos and copying the boot partition to the appropriate partition, but still could not get it to work.&lt;/p&gt;
&lt;p&gt;I have created an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/go-debos/debos/issues/535&quot;&gt;issue&lt;/a&gt; regarding this, with some scripts that generate the image properly. Let&#39;s see if it can be resolved soon.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;Some work also went into cleaning up the current examples for PocketBeagle 2. I will be getting my &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab Cape&lt;/a&gt; delivered by the end of the week, so hopefully, the examples will be greatly expanded in the upcoming weeks.&lt;/p&gt;
&lt;h2 id=&quot;refactor-dependencies&quot;&gt;Refactor Dependencies&lt;/h2&gt;
&lt;p&gt;The examples were pulling some unnecessary dependencies, so I removed most of them. Now, there are only 6 dependencies, which is always nice.&lt;/p&gt;
&lt;p&gt;I have switched to &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/gpiod&quot;&gt;gpiod&lt;/a&gt; for GPIO handling. This is because I went through the source code of both &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/gpiod&quot;&gt;gpiod&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/gpio-cdev&quot;&gt;gpio-cdev&lt;/a&gt;, and felt that gpiod was superior. Additionally, gpiod supports both v1 and v2 of &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/userspace-api/gpio/chardev.html&quot;&gt;GPIO Character Device Userspace API&lt;/a&gt;, while &lt;code&gt;gpio-cdev&lt;/code&gt; only supports v1.&lt;/p&gt;
&lt;p&gt;I can always write any shim that might be required for interop with &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/embedded-hal&quot;&gt;embedded_hal&lt;/a&gt; myself.&lt;/p&gt;
&lt;h2 id=&quot;add-blinky-ioctl-example&quot;&gt;Add blinky ioctl example&lt;/h2&gt;
&lt;p&gt;I have also added a &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/merge_requests/6&quot;&gt;blinky example&lt;/a&gt;, that directly uses &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/userspace-api/gpio/chardev.html&quot;&gt;GPIO Character Device Userspace API&lt;/a&gt; instead of gpiod library. This should help anyone curious peek behind the curtain and get an idea of how the GPIO libraries work behind the scenes.&lt;/p&gt;
&lt;p&gt;I am also thinking of creating a blinky example that does not have any dependencies, although I am a bit unsure if it should be another example, or just do that in this example.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/debos-recipes&quot;&gt;debos recipies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #20</title>
        <published>2025-02-09T00:30:12+05:30</published>
        <updated>2025-02-09T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post51/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post51/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post51/">&lt;p&gt;Hello everyone. I ended up experimenting more than getting results, so not much to write. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2-examples&quot;&gt;PocketBeagle 2 Examples&lt;/h1&gt;
&lt;p&gt;Continuing the work from &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post50/&quot;&gt;last week&lt;/a&gt;, more PocketBeagle 2 examples have been added.&lt;/p&gt;
&lt;p&gt;Feel free to create &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples/-/issues&quot;&gt;issues&lt;/a&gt; regarding the examples you would like to be added.&lt;/p&gt;
&lt;h2 id=&quot;button&quot;&gt;Button&lt;/h2&gt;
&lt;p&gt;Simple example to detect button presses. Uses Pin &lt;code&gt;P1_20&lt;/code&gt; by default.&lt;/p&gt;
&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle2$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cargo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; button&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   Compiling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v0.1.0&lt;/span&gt;&lt;span&gt; (/home/debian/vsx-examples/PocketBeagle2/button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    Finished&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; profile&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; debuginfo]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3.05s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;     Running&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;target/debug/button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Chip:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; gpiochip2&lt;/span&gt;&lt;span&gt; [600000.gpio&lt;/span&gt;&lt;span&gt;] (&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;92&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; lines&lt;/span&gt;&lt;span&gt;), offset: 50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pressed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pressed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pressed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pressed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;fade&quot;&gt;Fade&lt;/h2&gt;
&lt;p&gt;Simple example to fade an LED in and out using PWM. Also contains abstractions to use PWM using &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/driver-api/pwm.html#using-pwms-with-the-sysfs-interface&quot;&gt;sysfs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Uses &lt;code&gt;P1.36&lt;/code&gt;. In case of &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;TechLab Cape&lt;/a&gt;, this PIN is connected to &lt;code&gt;RGB.B&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;usage-1&quot;&gt;Usage&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle2$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cargo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; fade&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   Compiling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; fade&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v0.1.0&lt;/span&gt;&lt;span&gt; (/home/debian/vsx-examples/PocketBeagle2/fade&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    Finished&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;release&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; profile&lt;/span&gt;&lt;span&gt; [optimized&lt;/span&gt;&lt;span&gt;] target(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;) in 3.85s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;     Running&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;target/release/fade&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;beagleboard-image-builder&quot;&gt;BeagleBoard Image Builder&lt;/h1&gt;
&lt;p&gt;Currently, the image build process for all BeagleBoard images involves a &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/image-builder&quot;&gt;collection of scripts&lt;/a&gt; singlehandedly maintained by &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/RobertCNelson&quot;&gt;Robert Nelson&lt;/a&gt;. Thanks to his amazing work on both handling the management of &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/&quot;&gt;openbeagle&lt;/a&gt; runners and image building, things have been working relatively well.&lt;/p&gt;
&lt;p&gt;However, this also means that all the burden of pushing and maintaining new images falls on one person. Additionally, the images cannot currently be built in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/&quot;&gt;openbeagle&lt;/a&gt;, which limits the experimentation and having very special purpose images.&lt;/p&gt;
&lt;p&gt;To hopefully improve the current situation, I have been working on trying to get image build working on openbeagle CI. I initially started with trying to get &lt;a rel=&quot;external&quot; href=&quot;https://wiki.debian.org/Debootstrap&quot;&gt;debootstrap&lt;/a&gt; directly working in CI, but while I could get it somewhat working (defining working very loosely here), it failed in CI.&lt;/p&gt;
&lt;p&gt;Currently, I have 2 possible solutions I am exploring:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/go-debos/debos/&quot;&gt;debos&lt;/a&gt;: Seems quite promising. Has good performance, and should work fine in CI. Additionally, it also can work with just user-mode-linux, so quite portable. Moreover, it already has a recipe system pretty similar to what I want in the final solution.&lt;/li&gt;
&lt;li&gt;Using docker: This was mostly inspired from &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/jkridner/yasib&quot;&gt;yasib&lt;/a&gt;. I was able to build rootfs for the most part, but there were quite a few warnings for systemlevel packages like systemd.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I am still experimenting with both of the above approaches. However, I have started leaning more towards debos. It can have much better performance than docker in docker, and already has been tested quite a bit. Additionally, I can always add support for 2nd approach to debos in the future.&lt;/p&gt;
&lt;p&gt;Hopefully, I will have working images by next week.&lt;/p&gt;
&lt;h1 id=&quot;optimize-linux-embedded-hal-dependencies&quot;&gt;Optimize linux-embedded-hal dependencies&lt;/h1&gt;
&lt;p&gt;I have been using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-embedded/linux-embedded-hal&quot;&gt;linux-embedded-hal&lt;/a&gt; in some of the PocketBeagle 2 GPIO examples. When working with it, I observed that it was pulling some unnecessary dependencies even when &lt;code&gt;default-features&lt;/code&gt; were disabled. I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-embedded/linux-embedded-hal/pull/118&quot;&gt;PR&lt;/a&gt; to fix it, which has now been merged.&lt;/p&gt;
&lt;h1 id=&quot;rust-uefi-std-networking-stubs&quot;&gt;Rust UEFI Std Networking stubs&lt;/h1&gt;
&lt;p&gt;I was a bit bored, so I created the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/136615&quot;&gt;PR&lt;/a&gt; to add the Networking stubs for UEFI. This will make the future networking PRs smaller and easier to review.&lt;/p&gt;
&lt;p&gt;Hopefully, I will get around to working on it soon.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/vsx-examples&quot;&gt;PocketBeagle 2 Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #19</title>
        <published>2025-02-02T00:30:12+05:30</published>
        <updated>2025-02-02T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post50/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post50/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post50/">&lt;p&gt;Hello everyone. Since &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt; has launched, most of the development was focused on it. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;enable-greybus-beagleplay-driver-in-defconfig&quot;&gt;Enable Greybus BeaglePlay driver in defconfig&lt;/h1&gt;
&lt;p&gt;As per suggestion of Nishanth Menon, I have added gb_beagleplay to the defconfig. &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250131-defconfig-beagleplay-v3-1-f556b851ff96@beagleboard.org/&quot;&gt;Here&lt;/a&gt; is the latest version of the patch.&lt;/p&gt;
&lt;h1 id=&quot;export-symbols-rfc&quot;&gt;Export Symbols RFC&lt;/h1&gt;
&lt;p&gt;As alluded to in my prior posts, I have been working on using &lt;code&gt;export-symbols&lt;/code&gt; in devicetree to add support for add-on connectors such as MikroBUS. This was first proposed by Herve Codina in the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241209151830.95723-1-herve.codina@bootlin.com/&quot;&gt;following Linux kernel patches&lt;/a&gt;. Since then, I have sent patches to add support to &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20250110-export-symbols-v1-1-b6213fcd6c82@beagleboard.org/&quot;&gt;devicetree compiler&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/86a7a08c-d81c-43d4-99fb-d0c4e9777601@beagleboard.org/T/#t&quot;&gt;fdtoverlay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The overall goal is to make export-symbols part of devicetree specification instead of just a Linux specific extension. This is to allow sharing of add-on board overlays with ZephyrRTOS, which has boards like &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; with support for MikroBUS.&lt;/p&gt;
&lt;p&gt;To that end, I have sent an &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-spec/024685af-4694-4c22-bf83-a04dde6e32bd@beagleboard.org/T/#u&quot;&gt;RFC&lt;/a&gt; in the devicetree specification mailing list to see if anyone has any objections/flaws to point out. I will be sending a patch adding the node to the specification in a week or 2, if there are no objections.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle-2&quot;&gt;Pocketbeagle 2&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle 2&lt;/a&gt; is now available for purchase. While, everything is mostly working now, I have been working on adding a few things to just make the support as good as possible.&lt;/p&gt;
&lt;h2 id=&quot;debug-port&quot;&gt;Debug Port&lt;/h2&gt;
&lt;p&gt;In the early phases of development, most people were using &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;PocketBeagle® TechLab&lt;/a&gt; with PocketBeagle 2, and thus using the UART exposed by it. However, PocketBeagle 2 has a debug UART (compatible with Raspberry Pi Debug Probe) on board.&lt;/p&gt;
&lt;p&gt;There were some issues to get U-Boot working with this UART, but other than U-Boot R5 logs, everything is redirected to use the Debug Port. We are actively working on getting R5 to also use the debug port, but it should not affect general usage, since the boot selection menu is shown by A53 core.&lt;/p&gt;
&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;
&lt;p&gt;In a recent discussion, it was also decided to add examples for beginners to get started quickly. Initially, I was going to use Python, but given that Beagle Boards seem to attract a lot of people in Kernel and U-Boot space, it was decided that I should go ahead with writing examples in Rust.&lt;/p&gt;
&lt;p&gt;With Rust support in Linux kernel finally reaching a good enough state, this means the same language can be used for both userspace IoT projects and Kernel space drivers.&lt;/p&gt;
&lt;p&gt;Rust is also quite popular nowadays, so it might help attract new potential contributors. The examples can be found &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/vsx-examples&quot;&gt;here&lt;/a&gt;. Hopefully, they will start being shipped in default images, and will be accessible with the Theia local Theia editor.&lt;/p&gt;
&lt;p&gt;Feel free to create issues regarding the examples you would like to be added.&lt;/p&gt;
&lt;h3 id=&quot;hello-beagle&quot;&gt;Hello Beagle&lt;/h3&gt;
&lt;p&gt;Simple example to test that Rust has been set up correctly.&lt;/p&gt;
&lt;h4 id=&quot;usage&quot;&gt;Usage&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle2$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cargo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; hello_beagle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   Compiling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; hello_beagle&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v0.1.0&lt;/span&gt;&lt;span&gt; (/home/debian/vsx-examples/PocketBeagle2/hello_beagle&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    Finished&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; profile&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; debuginfo]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 5.64s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;     Running&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;target/debug/hello_beagle&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Hello,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; World!&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; From&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; PocketBeagle2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;eeprom&quot;&gt;EEPROM&lt;/h3&gt;
&lt;p&gt;Read and parse EEPROM contents in Rust.&lt;/p&gt;
&lt;h4 id=&quot;usage-1&quot;&gt;Usage&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle2$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cargo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; eeprom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   Compiling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; eeprom&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v0.1.0&lt;/span&gt;&lt;span&gt; (/home/debian/vsx-examples/PocketBeagle2/eeprom&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    Finished&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; profile&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; debuginfo]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3.99s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;     Running&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;target/debug/eeprom&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;EEPROM&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Data:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Contents&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    magic_number:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        170,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        85,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        51,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        238,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    hdr1:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Header&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        id:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 1,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        len:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 55,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    hdr2:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Header&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        id:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 16,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        len:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 46,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    board_info:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; BoardInfo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        name:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;POCKETBEAGL2A00G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        version:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        proc_number:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        variant:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        pcb_revision:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;0G&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        schematic_bom_revision:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        software_revision:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        vendor_id:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        build_week:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        build_year:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        serial:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;PB20000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    hdr3:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Header&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        id:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 17,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        len:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 2,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    ddr_info:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 4776,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    termination:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 254,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;blinky&quot;&gt;Blinky&lt;/h3&gt;
&lt;p&gt;Simple example to toggle GPIOs. Uses Pin &lt;code&gt;P1_20&lt;/code&gt; by default.&lt;/p&gt;
&lt;p&gt;Also provides a simple helper function to find PIN by name.&lt;/p&gt;
&lt;h4 id=&quot;usage-2&quot;&gt;Usage&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;debian@pocketbeagle2:~/vsx-examples/PocketBeagle2$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cargo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; run&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; blinky&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;   Compiling&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; blinky&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; v0.1.0&lt;/span&gt;&lt;span&gt; (/home/debian/vsx-examples/PocketBeagle2/blinky&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    Finished&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;dev&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; profile&lt;/span&gt;&lt;span&gt; [unoptimized&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; debuginfo]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; target&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; in&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3.50s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;     Running&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;target/debug/blinky&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;ON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;ON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;OFF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;mspm0-firmware&quot;&gt;MSPM0 Firmware&lt;/h2&gt;
&lt;p&gt;PocketBeagle 2 contains an MSPM0, which is used as ADC and EEPROM. The MSPM0 firmware can be found &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/pocketbeagle/mspm0-adc-eeprom/-/releases&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are the instructions to flash MSPM0:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the firmware:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://openbeagle.org/api/v4/projects/249/packages/generic/mspm0_adc_eeprom/0.13/mspm0_adc_eeprom.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Download &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/releases&quot;&gt;bb-imager-rs&lt;/a&gt; latest version. Currently, that is v0.0.3:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wget&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; https://openbeagle.org/api/v4/projects/832/packages/generic/bb-imager-cli/0.0.3/bb-imager-cli-aarch64-unknown-linux-gnu.tar.xz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;tar&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;xvf&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli-aarch64-unknown-linux-gnu.tar.xz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; usr/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Flash&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;./bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; pb2&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-img-local&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /path/to/firmware&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-no-eeprom&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is also possible to flash any other custom firmware in Ti-TXT or iHex format.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;I have been having an issue with building and testing toolchain reliably. &lt;a rel=&quot;external&quot; href=&quot;https://rust-lang.zulipchat.com/#narrow/channel/122651-general/topic/Cross.20Compiling.20std.20stops.20working&quot;&gt;Here&lt;/a&gt; is the link to Zulip discussion regarding it. However, I have yet to find a solution, so things might get delayed a bit. Still, there is a lot of backlog still left to merge, so things should be fine for a while.&lt;/p&gt;
&lt;h2 id=&quot;process-args&quot;&gt;Process Args&lt;/h2&gt;
&lt;p&gt;While trying to add environment variable support to &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html&quot;&gt;std::process::Command&lt;/a&gt;, I found out that args support was broken. The &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/136186&quot;&gt;PR&lt;/a&gt; to fix it has now been merged.&lt;/p&gt;
&lt;h2 id=&quot;process-env&quot;&gt;Process Env&lt;/h2&gt;
&lt;p&gt;Std process has been missing environment variables till now. This is because environment variable support was missing in general at the time I add support for process. However, since environment variable support has been &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/127462&quot;&gt;merged&lt;/a&gt;, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/136418&quot;&gt;PR&lt;/a&gt; to add environment variables to &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html&quot;&gt;std::process::Command&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The implementation closely resembles &lt;a rel=&quot;external&quot; href=&quot;https://github.com/tianocore/edk2/blob/2d2642f4832ebc45cb7d5ba9430b933d953b94f2/ShellPkg/Application/Shell/ShellProtocol.c#L1700&quot;&gt;UEFI Shell Execute&lt;/a&gt;, which basically applies any environment changes before executing the binary, and rolls back the changes after execution concludes.&lt;/p&gt;
&lt;h2 id=&quot;path-support&quot;&gt;Path support&lt;/h2&gt;
&lt;p&gt;Support for UEFI paths has now been &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135475&quot;&gt;merged&lt;/a&gt;, this makes it much easier to construct absolute paths, from relative as well as UEFI shell mappings.&lt;/p&gt;
&lt;p&gt;It also implements support for checking if the path is absolute, which should work correctly now thanks to an earlier &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135405&quot;&gt;PR&lt;/a&gt;.# Ending Thoughts&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-spec/024685af-4694-4c22-bf83-a04dde6e32bd@beagleboard.org/T/#u&quot;&gt;Export Symbols RFC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/techlab&quot;&gt;PocketBeagle® TechLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/pocketbeagle/mspm0-adc-eeprom&quot;&gt;MSPM0 ADC EEPROM Firmware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #18</title>
        <published>2025-01-26T00:30:12+05:30</published>
        <updated>2025-01-26T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/">&lt;p&gt;Hello everyone. A typical week for development. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;gitlab-ci-components&quot;&gt;GitLab CI Components&lt;/h1&gt;
&lt;p&gt;I have been using &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/user/packages/package_registry/&quot;&gt;GitLab Package Registry&lt;/a&gt; for most of my projects. It allows a permanent registry to store packages and create releases, in a persistent fashion. Initially, I started with manually uploading the packages in the CI. However, this turned out to be difficult to maintain in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;bb-imager-rs&lt;/a&gt;, which has a lot of release packages.&lt;/p&gt;
&lt;p&gt;Since I wanted the solution to be shareable across different repositories, I started looking around for solutions. I stumbled across &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/ci/components/&quot;&gt;GitLab CI Components&lt;/a&gt;. I would have preferred using &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/ci/steps/&quot;&gt;GitLab CI Steps&lt;/a&gt;, but since it is still experimental, I went with CI components.&lt;/p&gt;
&lt;p&gt;Initially, I wanted to write the actual functionality in Python but quickly realized that it is not possible to depend on external files in CI components. You can download any external script in the CI from a URL, or you can create a custom container that already includes the script, but I decided to just go with writing everything in bash.&lt;/p&gt;
&lt;p&gt;The CI Components are being used in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;bb-imager-rs&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks&quot;&gt;MicroBlocks&lt;/a&gt; and working pretty well. It should be fairly simple for other projects to start using them as well.&lt;/p&gt;
&lt;p&gt;Let us now go over different CI Components present in the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/ci-components&quot;&gt;repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;package-registry-upload&quot;&gt;Package Registry Upload&lt;/h2&gt;
&lt;p&gt;Upload all files in the directory following proper conventions to &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/user/packages/package_registry/&quot;&gt;GitLab Package Registry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The release directory packages should follow the following format: &lt;code&gt;{RELEASE_DIR}/{PACKGE_NAME}/{PACKAGE_VERSION}/{PACKAGE_FILE}&lt;/code&gt;. Here is an example of a release directory:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;release/testpkg/0.0.1/abc.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;release/testpkg/0.0.1-alpha/abc.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;release/testpkg/0.0.1-alpha/abc.txt.bb.imager.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: Any packages in a directory other than depth 3 will just be ignored.&lt;/p&gt;
&lt;p&gt;The CI component also does some extra stuff:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate and upload sha256 checksum for all files.&lt;/li&gt;
&lt;li&gt;Generate &lt;code&gt;release.yml&lt;/code&gt; file which can be used by &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/#release-from-file&quot;&gt;release-from-file&lt;/a&gt; to create a release.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is an example of using the CI component:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nclude&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;omponent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;penbeagle.org/ayush1325/ci-components/package-registry-upload@$&amp;lt;VERSION&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nputs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ackage-registry-upload-job&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-stage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;eploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-needs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;test-build&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;elease_dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; $&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;{CI_PROJECT_DIR}/release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;elease_template&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; $&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;{CI_PROJECT_DIR}/release.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Input&lt;/th&gt;&lt;th&gt;Default Value&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;job-name&lt;/td&gt;&lt;td&gt;package-registry-upload-job&lt;/td&gt;&lt;td&gt;Name of the upload job&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-stage&lt;/td&gt;&lt;td&gt;deploy&lt;/td&gt;&lt;td&gt;Job stage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-needs&lt;/td&gt;&lt;td&gt;[]&lt;/td&gt;&lt;td&gt;Job dependencies&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;release_dir&lt;/td&gt;&lt;td&gt;release&lt;/td&gt;&lt;td&gt;The directory containing packages to push to package registry&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;release_template&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Template with basic release information&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;release-from-file&quot;&gt;Release from file&lt;/h2&gt;
&lt;p&gt;Create a release using &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/user/project/releases/release_cli.html&quot;&gt;release-cli&lt;/a&gt; from the yaml file. It is possible to either use the file generated by &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/#package-registry-upload&quot;&gt;package-registry-upload&lt;/a&gt; or just supply one manually.&lt;/p&gt;
&lt;p&gt;The format of the file is not all that well defined, but I used the following &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.com/gitlab-org/release-cli/-/blob/master/internal/testdata/release.yml?ref_type=heads&quot;&gt;testfile&lt;/a&gt; in the repository as reference.&lt;/p&gt;
&lt;p&gt;The component optionally also supports generating &lt;a rel=&quot;external&quot; href=&quot;https://docs.gitlab.com/ee/development/changelog.html&quot;&gt;Changelog entries&lt;/a&gt; which is controlled by &lt;code&gt;changelog_generation&lt;/code&gt; boolean variable.&lt;/p&gt;
&lt;p&gt;Here is an example of using the CI component:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nclude&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;omponent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;penbeagle.org/ayush1325/ci-components/release-from-file@$&amp;lt;VERSION&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nputs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;ackage-registry-upload-job&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-stage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;eploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-needs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;test-build&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;      r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;elease_file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; $&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;{CI_PROJECT_DIR}/release.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Input&lt;/th&gt;&lt;th&gt;Default Value&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;job-name&lt;/td&gt;&lt;td&gt;release-from-file-job&lt;/td&gt;&lt;td&gt;Name of the job&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-stage&lt;/td&gt;&lt;td&gt;deploy&lt;/td&gt;&lt;td&gt;Job stage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-needs&lt;/td&gt;&lt;td&gt;[]&lt;/td&gt;&lt;td&gt;Job dependencies&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;release_file&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;File to use to generate release&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;changelog_generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;Enable changelog generation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;os-list&quot;&gt;Os List&lt;/h2&gt;
&lt;p&gt;Create OS Lists subitems for use with &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;bb-imager&lt;/a&gt; config. This should prove useful for the subitems list of testing packages, which would need to be updated much more than stable images.&lt;/p&gt;
&lt;p&gt;Note: Entries are only created for packages having associated &lt;code&gt;{package}.bb.imager.json&lt;/code&gt; files with the following fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;icon&lt;/li&gt;
&lt;li&gt;devices&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is an example of using the CI component:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt; c&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;omponent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; $&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;CI_SERVER_FQDN/$CI_PROJECT_PATH/os-list@$CI_COMMIT_SHA&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;  i&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;nputs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; o&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;s-list-template&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-needs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;build-release-dir&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    j&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;ob-stage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; d&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;eploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    r&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;elease_dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;elease&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    o&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;s_list_template&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; r&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;elease/os_list_template.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;    o&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-5&quot;&gt;s_list_suffix&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;os_list/stable/os_list_template.json&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Input&lt;/th&gt;&lt;th&gt;Default Value&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;job-name&lt;/td&gt;&lt;td&gt;package-registry-upload-job&lt;/td&gt;&lt;td&gt;Name of the upload job&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-stage&lt;/td&gt;&lt;td&gt;deploy&lt;/td&gt;&lt;td&gt;Job stage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;job-needs&lt;/td&gt;&lt;td&gt;[]&lt;/td&gt;&lt;td&gt;Job dependencies&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;release_dir&lt;/td&gt;&lt;td&gt;release&lt;/td&gt;&lt;td&gt;The directory containing packages to push to package registry&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;os_list_template&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Template with entries that will be appended to final os_list&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;os_list_url_suffix&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Suffix used to generate Package Registry URL for OS List&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;More work went into the BeagleBoard Rust imager this week. I hope to get the v1.0.0 release out by the end of this month and replace the old bb-imager.&lt;/p&gt;
&lt;h2 id=&quot;remote-subitems&quot;&gt;Remote Subitems&lt;/h2&gt;
&lt;p&gt;Similar to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/raspberrypi/rpi-imager&quot;&gt;Raspberry Pi Imager&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt; now supports having subitems JSON list in a remote location. &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/#os-list&quot;&gt;Os List Component&lt;/a&gt; can be used to generate the subitems JSON list in CI.&lt;/p&gt;
&lt;h2 id=&quot;release-v0-0-3&quot;&gt;Release v0.0.3&lt;/h2&gt;
&lt;p&gt;To test the new &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post49/#gitlab-ci-components&quot;&gt;CI components&lt;/a&gt; (and since a new release has been long overdue), &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/releases/v0.0.3&quot;&gt;BeagleBoard Rust Imager v0.0.3&lt;/a&gt; was released.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/ci-components&quot;&gt;GitLab CI Components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #17</title>
        <published>2025-01-19T00:30:12+05:30</published>
        <updated>2025-01-19T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post48/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post48/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post48/">&lt;p&gt;Hello everyone. A typical week for development. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;zephyr-ti-hal-updates&quot;&gt;Zephyr Ti Hal Updates&lt;/h1&gt;
&lt;p&gt;A &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post45/&quot;&gt;few weeks ago&lt;/a&gt;, I created a PR to update the Simplelink SDK version in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/hal_ti&quot;&gt;hal_ti&lt;/a&gt; from 4.40.04.04 to 7.41.00.17. Now that it has been merged, hopefully, I can start working on adding Bluetooth support using the BLE5 Stack in the SDK.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;More work went into the BeagleBoard Rust imager this week. I hope to get the v1.0.0 release out by the end of this month and replace the old bb-imager.&lt;/p&gt;
&lt;h2 id=&quot;introducing-bb-imager-service&quot;&gt;Introducing bb-imager-service&lt;/h2&gt;
&lt;p&gt;As mentioned &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/&quot;&gt;last week&lt;/a&gt;, I was searching for how to allow PocketBeagle2 MSPM0 firmware update from the GUI. To reiterate the problem, sysfs entries for &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/driver-api/firmware/fw_upload.html&quot;&gt;Firmware Upload API&lt;/a&gt; is owned by root user and thus cannot be opened from the GUI without some kind of privilege escalation mechanism. As a reference, in case of SD card flashing, I am using UDisk2 D-Bus APIs to open the SD card, which internally uses polkit for privileged management.&lt;/p&gt;
&lt;p&gt;After some googling, I came across the following &lt;a rel=&quot;external&quot; href=&quot;https://stackoverflow.com/questions/77516167/how-to-write-file-using-policykit-to-get-privilege&quot;&gt;stack overflow answer&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You could, of course, write your own D-Bus service which does that and install the D-Bus .service config to have it run as a system service with root privileges. (Try to keep the operations as limited and fine-grained as is reasonable; e.g. &quot;enable global mode foo&quot; – not &quot;write arbitrary data to arbitrary file&quot;.)&lt;/li&gt;
&lt;li&gt;Failing that, one common method is to spawn &lt;code&gt;pkexec&lt;/code&gt; to perform operations, which is… really just su with a nicer password prompt. Note that some distributions have recently removed &lt;code&gt;pkexec&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If your app is allowed to use either GNOME&#39;s GLib or KDE&#39;s KIO libraries, then both of those already have PolicyKit integration built-in for privileged file updates – the app could open admin:///etc/foo and GLib or KIO would elevate as needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since I could not find much regarding the 3rd approach, and the 2nd approach seemed to be on the way out, I ended up going with a custom D-Bus service. I will probably need similar functionality for BeaglePlay cc1352p7, BeagleY-AI, etc., so it is not a bad idea to have a custom d-bus service.&lt;/p&gt;
&lt;p&gt;Using &lt;a rel=&quot;external&quot; href=&quot;https://docs.rs/zbus/latest/zbus/&quot;&gt;zbus&lt;/a&gt; was pretty nice, and I have a better understanding of Linux systems, so it ended up being quite a learning experience. I am building a Debian package for the service for now since it is only supposed to be used in PocketBeagle2 right now. It also contains systemd service which activates on D-Bus connection.&lt;/p&gt;
&lt;p&gt;The following articles were a lot of help in figuring everything out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://nyirog.medium.com/register-dbus-service-f923dfca9f1&quot;&gt;Register dbus service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://vwangsf.medium.com/creating-a-d-bus-service-with-dbus-python-and-polkit-authentication-4acc9bc5ed29&quot;&gt;Creating a D-Bus Service with dbus-python and Polkit Authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;overhaul-config-format&quot;&gt;Overhaul config format&lt;/h2&gt;
&lt;p&gt;The config format I initially started with differed from RPI-imagers since I thought it would be more efficient. However, after adding a lot of boards and flasher types, I realized that every flashing target is not really a board. For example, having different board entries for &lt;code&gt;PocketBeagle2&lt;/code&gt; and &lt;code&gt;PocketBeagle2 MSPM0&lt;/code&gt; seemed weird.&lt;/p&gt;
&lt;p&gt;While browsing &lt;a rel=&quot;external&quot; href=&quot;https://github.com/raspberrypi/rpi-imager&quot;&gt;rpi-imager&lt;/a&gt; last week, I found out that it seems to support bootloader updates in different rpi versions. The GUI presentation seemed nice, so after some deliberation, I adopted a format compatible with the RPI-imager&#39;s format. Since the &lt;code&gt;os_list&lt;/code&gt; is a self-referential structure in the RPI-imager&#39;s config, it is possible to have a lot of sub-menus in the image selection menu, which is quite nice.&lt;/p&gt;
&lt;p&gt;To elaborate, now there are only base boards (e.g., &lt;code&gt;PocketBeagle2&lt;/code&gt;) in the Board Selection menu, and the Image Selection menu will have a sub-menu for &lt;code&gt;MSPM0 Firmware&lt;/code&gt; support.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/53&quot;&gt;PR&lt;/a&gt; for implementation details.&lt;/p&gt;
&lt;h2 id=&quot;live-destinations-refresh&quot;&gt;Live destinations refresh&lt;/h2&gt;
&lt;p&gt;Similar to RPI-imager, destination refresh is now automatic using &lt;a rel=&quot;external&quot; href=&quot;https://docs.rs/iced/latest/iced/application/struct.Application.html#method.subscription&quot;&gt;subscriptions&lt;/a&gt;. Check out the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/45&quot;&gt;PR&lt;/a&gt; for implementation details.&lt;/p&gt;
&lt;h2 id=&quot;better-defaults-in-extra-configuration&quot;&gt;Better defaults in Extra Configuration&lt;/h2&gt;
&lt;p&gt;The application now queries the user&#39;s current system for the default suggestions regarding username, keyboard layout, timezone, etc. Check out the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/47&quot;&gt;PR&lt;/a&gt; for details.&lt;/p&gt;
&lt;h2 id=&quot;include-udev-rules&quot;&gt;Include udev rules&lt;/h2&gt;
&lt;p&gt;I have added &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/blob/main/bb-imager-gui/assets/packages/linux/udev/10-beagle.rules&quot;&gt;udev rules&lt;/a&gt; to the Linux package of GUI to allow flashing BeagleConnect Freedom without needing superuser privileges. They also make development easier and allow using commands like &lt;code&gt;tio&lt;/code&gt; without root.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;Since the PRs from the last post (&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135405&quot;&gt;is_absolute refactoring&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135393&quot;&gt;OwnedDevicePath&lt;/a&gt;) have been merged, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135475&quot;&gt;PR&lt;/a&gt; to implement support for &lt;code&gt;std::path&lt;/code&gt; for UEFI. Hopefully, it will be merged soon, making way for future PRs for &lt;code&gt;std::fs&lt;/code&gt; support for UEFI.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #16</title>
        <published>2025-01-12T00:30:12+05:30</published>
        <updated>2025-01-12T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post47/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post47/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post47/">&lt;p&gt;Hello everyone. A typical week for development. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;h2 id=&quot;pocketbeagle2-mspm0-support&quot;&gt;Pocketbeagle2 MSPM0 support&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle2&lt;/a&gt; uses MSPM0 as both EEPROM and ADC. The EEPROM is used to store board-specific information in all BeagleBoard boards for easier debugging and differentiation of different revisions.&lt;/p&gt;
&lt;p&gt;While the pb2_mspm0 driver supports updating firmware, it isn&#39;t suitable to be used directly by new people:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Does not persist EEPROM contents.&lt;/li&gt;
&lt;li&gt;Does not support Ti-TXT directly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To solve this, I have added pb2_mspm0 support directly to &lt;code&gt;bb-imager-cli&lt;/code&gt;. There is also a flag to control if EEPROM contents should be preserved (since it is possible to flash firmware other than the default one). Additionally, since &lt;code&gt;bb-imager-rs&lt;/code&gt; supports Ti-TXT and iHex by default, we get that support for free.&lt;/p&gt;
&lt;p&gt;I am still trying to figure out how to add support to the GUI since the flashing requires access to &lt;code&gt;sysfs&lt;/code&gt; entries, which are owned by root (and probably should stay that way). I think I am supposed to use &lt;code&gt;polkit&lt;/code&gt;, but not completely sure.&lt;/p&gt;
&lt;h2 id=&quot;contribution-and-packaging-instructions&quot;&gt;Contribution and Packaging Instructions&lt;/h2&gt;
&lt;p&gt;I have added instructions regarding &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/blob/main/CONTRIBUTING.md?ref_type=heads&quot;&gt;Contribution&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/blob/main/PACKAGING.md?ref_type=heads&quot;&gt;Packaging&lt;/a&gt; to hopefully make it easier for newcomers to get started. It also helped be document a lot of stuff that even I forget, so it should prove useful.&lt;/p&gt;
&lt;h2 id=&quot;better-cross-compilation-support&quot;&gt;Better cross-compilation support&lt;/h2&gt;
&lt;p&gt;For pocketbeagle2 testing, I wanted to be able to cross-compile from my main machine without needing to tinker too much. I had used &lt;a rel=&quot;external&quot; href=&quot;https://github.com/cross-rs/cross&quot;&gt;cross&lt;/a&gt; in the past, but it turns out that the container cross uses by default is based on Ubuntu 20.04, which contains libssl1. Pocketbeagle2 images have libssl3, which means that I could not use the default images for cross-compiling.&lt;/p&gt;
&lt;p&gt;I have added custom image dockerfiles, so cross-compiling should be as simple as setting &lt;code&gt;RUST_BUILDER=cross&lt;/code&gt; and running a make recipe.&lt;/p&gt;
&lt;p&gt;Note: cross compiling is only supported for the following targets right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x86_64-unknown-linux-gnu&lt;/li&gt;
&lt;li&gt;aarch64-unknown-linux-gnu&lt;/li&gt;
&lt;li&gt;armv7-unknown-linux-gnueabihf&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows should support can probably be added with a custom dockerfile (or the default cross windows container might work), but I do not need it much, so haven&#39;t really tried adding it.&lt;/p&gt;
&lt;h1 id=&quot;export-symbols-devicetree-support&quot;&gt;Export Symbols Devicetree Support&lt;/h1&gt;
&lt;p&gt;A few weeks ago, Herve Codina sent patches to the kernel mailing list for supporting &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241209151830.95723-1-herve.codina@bootlin.com/&quot;&gt;export-symbols&lt;/a&gt; as another possible way to support addon board overlays. Since adding support for path references to overlays ended up being a dead end (see &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/6b2dba90-3c52-4933-88f3-b47f96dc7710@beagleboard.org/T/#m8259c8754f680b9da7b91f7b7dd89f10da91d8ed&quot;&gt;here&lt;/a&gt;), I have starting working on &lt;code&gt;export-symbols&lt;/code&gt; based approach for mikroBUS.&lt;/p&gt;
&lt;p&gt;As a part of that effort, I am working on adding &lt;code&gt;export-symbols&lt;/code&gt; support to the base devicetree compiler, to hopefully make it part of devicetree specification instead of just a Linux specific thing. That way, it should be possible to support the same addon-board overlays in Zephyr in the future.&lt;/p&gt;
&lt;h2 id=&quot;base-devicetree-compiler&quot;&gt;Base devicetree compiler&lt;/h2&gt;
&lt;p&gt;I started work with adding support to the base devicetree compiler. The &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250110-export-symbols-v1-1-b6213fcd6c82@beagleboard.org&quot;&gt;patch series&lt;/a&gt; does not contain tests right now since this is more of an RFC for now.&lt;/p&gt;
&lt;h2 id=&quot;fdtoverlay&quot;&gt;fdtoverlay&lt;/h2&gt;
&lt;p&gt;Similarly, I also sent the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250112-export-symbols-overlay-v1-1-e94526d349ef@beagleboard.org&quot;&gt;patch series&lt;/a&gt; for support in fdtoverlay. The tests will be added to future versions of the patch.&lt;/p&gt;
&lt;h2 id=&quot;future-work&quot;&gt;Future work&lt;/h2&gt;
&lt;p&gt;As discussed in the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241209151830.95723-1-herve.codina@bootlin.com/&quot;&gt;original patch series&lt;/a&gt;, to make use with &lt;code&gt;fdtoverlay&lt;/code&gt; possible, we need to add a way to pass the target path to &lt;code&gt;fdtoverlay&lt;/code&gt;, which is not supported right now. I will try to work on it this week. Hopefully, addon board support will be merged before 2026.&lt;/p&gt;
&lt;h1 id=&quot;rust-fs-support-for-uefi&quot;&gt;Rust fs support for UEFI&lt;/h1&gt;
&lt;p&gt;After some discussion in Zulip, I have broken up the original &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/129700&quot;&gt;std::fs PR&lt;/a&gt; into smaller chunks to make reviewing simpler.&lt;/p&gt;
&lt;h2 id=&quot;unsupported-fs-support&quot;&gt;Unsupported fs support&lt;/h2&gt;
&lt;p&gt;The first &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135324&quot;&gt;PR&lt;/a&gt; as a part of this series was just to add the &lt;code&gt;sys::pal::uefi::fs&lt;/code&gt; module with everything left to &lt;code&gt;unsupported&lt;/code&gt;. It has been merged now.&lt;/p&gt;
&lt;h2 id=&quot;implement-fs-exists&quot;&gt;Implement &lt;code&gt;fs::exists&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;I have also created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135368&quot;&gt;PR&lt;/a&gt; just to add &lt;code&gt;fs::exists&lt;/code&gt; support since it allows testing the &lt;code&gt;File::open&lt;/code&gt; algorithm without implementing other parts of File API. However, it was still quite big, so I split it into smaller PRs.&lt;/p&gt;
&lt;h2 id=&quot;owneddevicepath&quot;&gt;OwnedDevicePath&lt;/h2&gt;
&lt;p&gt;Branching off from &lt;code&gt;fs::exists&lt;/code&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135368&quot;&gt;PR&lt;/a&gt;, the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135393&quot;&gt;OwnedDevicePath PR&lt;/a&gt; adds support for the abstractions common to the already merged &lt;code&gt;std::process&lt;/code&gt; module. This can hopefully reduce noise and make review easier from the &lt;code&gt;fs::exists&lt;/code&gt; PR.&lt;/p&gt;
&lt;h2 id=&quot;is-absolute-refactoring&quot;&gt;is_absolute Refactoring&lt;/h2&gt;
&lt;p&gt;I am also planning to split the &lt;code&gt;absolute&lt;/code&gt; path creation support present in &lt;code&gt;fs::exists&lt;/code&gt; &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135368&quot;&gt;PR&lt;/a&gt; into it&#39;s own PR implementing &lt;code&gt;std::path::absolute&lt;/code&gt;. However, the current internal structure of &lt;code&gt;std::path&lt;/code&gt; APIs cannot support UEFI style paths well (see &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/issues/52331&quot;&gt;here&lt;/a&gt;). This causes a problem that any &lt;code&gt;absolute&lt;/code&gt; path constructed for UEFI will return &lt;code&gt;false&lt;/code&gt; for &lt;code&gt;std::fs::Path::is_absolute&lt;/code&gt;, which can be quite confusing.&lt;/p&gt;
&lt;p&gt;In an attempt to fix this, I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/135405&quot;&gt;PR&lt;/a&gt; to move the logic for &lt;code&gt;is_absolute&lt;/code&gt; into &lt;code&gt;std::sys&lt;/code&gt;, and make it platform dependent (which it already kind of was, but was pretending not to be). I&#39;m not sure if this will get merged, though, so let&#39;s see.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241209151830.95723-1-herve.codina@bootlin.com/&quot;&gt;Linux kernel export-symbols patch series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250110-export-symbols-v1-1-b6213fcd6c82@beagleboard.org&quot;&gt;Devicetree Compiler export-symbols patch series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20250112-export-symbols-overlay-v1-1-e94526d349ef@beagleboard.org&quot;&gt;Fdtoverlay export-symbols patch series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;Rust std for UEFI PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #15</title>
        <published>2025-01-05T00:30:12+05:30</published>
        <updated>2025-01-05T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/">&lt;p&gt;Happy New Year, everyone! 🎉 2024 was a fantastic year for my coding journey, and I’m thrilled to carry that energy into 2025.&lt;/p&gt;
&lt;p&gt;Let&#39;s jump into the weekly updates and kick off another exciting year of coding adventures. 🚀&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;A lot of work went into the BeagleBoard Rust Imager this week. I still haven&#39;t figured out Macos completely, but at least other platforms are moving along well. At this point, I will probably release v1.0 without MacOS support since there is not much I can do about it.&lt;/p&gt;
&lt;h2 id=&quot;cli-improvements&quot;&gt;CLI Improvements&lt;/h2&gt;
&lt;p&gt;Most of the past work concentrated on improving the GUI and making it as user-friendly as possible. However, as a terminal enjoyer, I prefer to use the CLI when possible. In lieu of that, I spent most of the past week bringing up the CLI to the point of being great to use, at least on Linux. Let us now go over some of the work:&lt;/p&gt;
&lt;h3 id=&quot;allow-post-flash-customization&quot;&gt;Allow post-flash customization&lt;/h3&gt;
&lt;p&gt;The GUI has an option to perform some customization (e.g., setting user name and password, setting wifi ssid and password, etc.) after flashing the SD card. This ability in CLI would allow much easier automation when one needs to flash multiple devices. So, the CLI is now able to perform all the customization options available in the GUI.&lt;/p&gt;
&lt;h3 id=&quot;support-for-remote-os-images&quot;&gt;Support for remote os images&lt;/h3&gt;
&lt;p&gt;Since it might be useful to be able to flash OS images from the internet, I ended up adding an option to flash remote OS images. I am a bit unsure regarding this one since one could just use &lt;code&gt;wget&lt;/code&gt;, but it might end up being useful once I add an option to browse remote images using the default &lt;code&gt;distros.json&lt;/code&gt; that the GUI uses.&lt;/p&gt;
&lt;h3 id=&quot;improved-help&quot;&gt;Improved Help&lt;/h3&gt;
&lt;p&gt;One area that saw massive improvements is the help messages for the CLI (along with all the subcommands). It should be fairly simple for people to understand how to use the CLI now.&lt;/p&gt;
&lt;h3 id=&quot;shell-completion&quot;&gt;Shell Completion&lt;/h3&gt;
&lt;p&gt;The CLI now supports generating shell completions at both runtime and compile-time. I am using &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/clap_complete&quot;&gt;clap_complete&lt;/a&gt; to achieve this. The compile-time generation is done using &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/#xtask&quot;&gt;xtask&lt;/a&gt; instead of &lt;code&gt;build.rs&lt;/code&gt;, since it allows me to generate the completion on demand.&lt;/p&gt;
&lt;h3 id=&quot;manpage&quot;&gt;Manpage&lt;/h3&gt;
&lt;p&gt;I am also generating manpage(s) for the CLI and all of its subcommands at compile time using &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/clap_mangen&quot;&gt;clap_mangen&lt;/a&gt;. Similar to shell completion, I am using &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post46/#xtask&quot;&gt;xtask&lt;/a&gt; for this.&lt;/p&gt;
&lt;h3 id=&quot;xtask&quot;&gt;Xtask&lt;/h3&gt;
&lt;p&gt;While working on shell completion and manpage support, I came across &lt;a rel=&quot;external&quot; href=&quot;https://github.com/matklad/cargo-xtask&quot;&gt;cargo xtask spec&lt;/a&gt;, which allows adding free-form automation to a Rust project. It&#39;s pretty neat since it does not need anything extra (other than cargo and rustc) and gives the power of full-fat Rust. It&#39;s especially nice for cases like shell completion and manpage generation since they need to interact with Rust code and cannot be done with just &lt;code&gt;Makefile recipe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;My current policy will be to use xtask when I need something that requires bash scripting but will stick to &lt;code&gt;Makefile&lt;/code&gt; when just calling POSIX utilities is sufficient for the job. I have seen projects use xtask for CI, but I still prefer &lt;code&gt;Makefile&lt;/code&gt; for that kind of functionality.&lt;/p&gt;
&lt;h3 id=&quot;showcase&quot;&gt;Showcase&lt;/h3&gt;
&lt;p&gt;Here are some showcases for the CLI.&lt;/p&gt;
&lt;h4 id=&quot;home-help&quot;&gt;Home Help&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-help&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; streamlined&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; tool&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; creating,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flashing,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; and&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; managing&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; OS&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; images&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; BeagleBoard&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; devices.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Usage:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span&gt; [OPTIONS&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;COMMAND&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Commands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                Command&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; an&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; image&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; specific&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; destination&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  list-destinations&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    Command&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; list&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; available&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; destinations&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flashing&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; based&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; on&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; selected&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  format&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;               Command&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; format&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SD&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Card&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  generate-completion&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Command&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; generate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; shell&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; completion&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  help&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                 Print&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; this&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; message&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; or&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; help&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; of&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; given&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; subcommand&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --quiet&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    Suppress&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; standard&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; output&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; messages&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; quieter&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; experience&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  -h,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-help&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;     Print&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; help&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  -V,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-version&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Print&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;flashing-sd-card-help&quot;&gt;Flashing SD Card Help&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sd&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-help&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Flash&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; an&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SD&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; card&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; with&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; customizable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; settings&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; BeagleBoard&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; devices&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Usage:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;DS&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sd&lt;/span&gt;&lt;span&gt; [OPTIONS&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --no-verify&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                      Disable&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; checksum&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; verification&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; post-flash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --hostname&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;HOSTNAM&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;            Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; custom&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; hostname&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span&gt; (e.g.,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;beaglebone&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --timezone&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;TIMEZON&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;            Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; timezone&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; device&lt;/span&gt;&lt;span&gt; (e.g.,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;America/New_York&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --keymap&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;KEYMA&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; keyboard&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; layout/keymap&lt;/span&gt;&lt;span&gt; (e.g.,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;us&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; US&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; layout&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --user-name&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;USER_NAM&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;          Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; username&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; user.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Requires&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;user_password&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;                                       Required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; enter&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; GUI&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; session&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; due&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; regulatory&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; requirements.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --user-password&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;USER_PASSWOR&lt;/span&gt;&lt;span&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; password&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; user.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Requires&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;user_name&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;                                       Required&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; enter&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; GUI&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; session&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; due&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; regulatory&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; requirements.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --wifi-ssid&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;WIFI_SSI&lt;/span&gt;&lt;span&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;          Configure&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Wi-Fi&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SSID&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; network&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; access.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Requires&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wifi_password&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;      --wifi-password&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;WIFI_PASSWOR&lt;/span&gt;&lt;span&gt;D&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Set&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; password&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; the&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; specified&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Wi-Fi&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SSID.&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Requires&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;wifi_ssid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  -h,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-help&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                           Print&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;flashing-remote-image&quot;&gt;Flashing Remote image&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-image-remote&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;IMG_URL&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-image-sha256&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;IMG_SHA256&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/ttyACM0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bcf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Preparing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Verifying    &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;█████████████████████████████████████████████████████████████████████████████████████████████████████████████&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;100&lt;/span&gt;&lt;span&gt; %&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Flashing     &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;█████████████████████████████████████████████████████████████████████████████████████████████████████████████&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;100&lt;/span&gt;&lt;span&gt; %&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; Verifying&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;flashing-local-image&quot;&gt;Flashing Local image&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;❯&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bb-imager-cli&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;-quite&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; flash&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;DESTINATION&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;IMG_PATH&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; /dev/ttyACM0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bcf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;gui-improvements&quot;&gt;GUI Improvements&lt;/h2&gt;
&lt;p&gt;While putting the GUI alongside the Raspberry Pi Imager, I observed that my GUI and its elements, like buttons, were a lot bigger. After some discussion, I ended up deciding to match the rpi-imager size. So, the default window size is now 680x450, with the buttons and other UI elements scaled down accordingly.&lt;/p&gt;
&lt;p&gt;I also added some rounded corners since they look nicer in the scaled-down UI. The buttons and text are still a bit bigger than the RPI-imager, but since it fits fine, I am keeping it like this.&lt;/p&gt;
&lt;h3 id=&quot;home-screenshot&quot;&gt;Home Screenshot&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/post46/home.webp&quot; alt=&quot;Home screen of the BeagleBoard Imager GUI at the new 680x450 window size&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;future&quot;&gt;Future&lt;/h2&gt;
&lt;p&gt;I have been working on utilizing Gitlab issues as much as possible in the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/issues&quot;&gt;bb-imager-rs&lt;/a&gt; to make it easier for anyone wishing to start contributing. Hopefully, I can get some new contributors this way.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, 2025 will be a good year for me and &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #14</title>
        <published>2024-12-29T00:30:12+05:30</published>
        <updated>2024-12-29T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post45/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post45/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post45/">&lt;p&gt;Hello everyone. I have been traveling for the last few weeks due to some family functions. Due to this, I could not post &lt;a href=&quot;/tags/weekly-update/&quot;&gt;My Week in Code&lt;/a&gt;. Additionally, I was primarily working on &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle2&lt;/a&gt; stuff, which wasn&#39;t public yet, so I also lacked content. Now that Pocketbeagle2 has been announced, I can start talking about it. So, let&#39;s get to it.&lt;/p&gt;
&lt;h1 id=&quot;pocketbeagle2-mspm0-driver&quot;&gt;Pocketbeagle2 MSPM0 Driver&lt;/h1&gt;
&lt;p&gt;In &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;Pocketbeagle2&lt;/a&gt;, instead of using dedicated EEPROM and ADC, we are using &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/product/MSPM0L1105&quot;&gt;MSPM0L1105&lt;/a&gt; with &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/pocketbeagle/mspm0-adc-eeprom&quot;&gt;specilized firmware&lt;/a&gt; that acts as EEPROM and ADC.&lt;/p&gt;
&lt;p&gt;While it is possible to use a &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/pocketbeagle/msp-m0-python-flasher&quot;&gt;userspace flasher&lt;/a&gt;, it is much easier to perform firmware updates with an upstream driver. Additionally, it also allows doing some custom pinmux and overlay stuff, which might be required due to a problem with the nRST line.&lt;/p&gt;
&lt;p&gt;While the MSPM0L1105 is intended to be used as EEPROM and ADC by default, it can be used as a dedicated co-processor for IO and communicate over I2C or SPI. I will also try to add Zephyr support in the future.&lt;/p&gt;
&lt;p&gt;The driver is currently in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/commits/b4/pb2-mspm0/&quot;&gt;my kernel tree&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;update-ti-simplelink-sdk-in-hal-ti&quot;&gt;Update Ti simplelink SDK in hal_ti&lt;/h1&gt;
&lt;p&gt;A while ago, I found an issue with BeagleConnect Zephyr support, where everything freezes if both PWM and SUBg are enabled at the same time. Thanks to help from &lt;a rel=&quot;external&quot; href=&quot;https://e2e.ti.com/members/7092658&quot;&gt;Arthur&lt;/a&gt;, I was able to confirm that this does not happen in Ti-RTOS and is thus a problem with Zephyr implementation. However, I was not able to find the root cause, even with JTAG debugging. The complete discussion can be found in &lt;a rel=&quot;external&quot; href=&quot;https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1430241/cc1352p7-beagleconnect-freedom-freezes-if-both-pwm-and-ieee802154-subg-is-used-together/5584015#5584015&quot;&gt;e2e&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Fast forward to last week, and I thought I should try tackling it again before starting work on Arduino support using LLEXT. One of the possibilities I  came up with was that it might be a bug in the version of simplelink SDK that was being used in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/hal_ti/pull/56&quot;&gt;hal_ti&lt;/a&gt;. The SDK being used currently is 4.40.04.04, which is quite old at this point. Additionally, I wanted to use the latest SDK before attempting to tackle Bluetooth again.&lt;/p&gt;
&lt;p&gt;While working on it, I realized that it is currently not possible to automate SDK updates since we need to make some modifications manually. In the end, it turned out that the SDK version was not the cause of the freeze, but it helped me figure out the real cause.&lt;/p&gt;
&lt;p&gt;Hopefully, I can figure out a more sustainable way moving forward, but I just went with the manual route for now.&lt;/p&gt;
&lt;p&gt;It also seems like GPIO APIs have completely changed, and I had to fix some stuff in the Zephyr GPIO driver. Here are the open PRs: &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/hal_ti/pull/56&quot;&gt;hal_ti&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/83402&quot;&gt;zephyr&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;fix-beagleconnect-freedom-freeze-bug&quot;&gt;Fix BeagleConnect Freedom Freeze Bug&lt;/h1&gt;
&lt;p&gt;As discussed above, I was finally able to pinpoint the cause of the freeze. It turns out that the Zephyr power management was at fault. Both the PWM driver and RF core driverlib can put and release constraints on the suspend state of cc1352p7. However, at least the PWM code would release the constraint without checking if PWM placed the constraint in the first place.&lt;/p&gt;
&lt;p&gt;I have created an initial &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/83409&quot;&gt;PR&lt;/a&gt; to fix the problem by ensuring that PWM keeps track of the suspend constraint. This ensures that PWM does not cause the processor to go to suspend even if it has been disabled by subg code.&lt;/p&gt;
&lt;h1 id=&quot;rust-uefi-varargs-function-support&quot;&gt;Rust UEFI varargs function support&lt;/h1&gt;
&lt;p&gt;For the longest time, Rust ffi had the annoying limitation of not supporting varargs in ABIs other than C. However, recently &lt;code&gt;extended_varargs_abi_support&lt;/code&gt; was &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/116161&quot;&gt;stablised&lt;/a&gt;. So finally, it is possible to have correct function signatures for &lt;code&gt;BootServices-&amp;gt;{Install/Uninstall}MultipleProtocolInterfaces&lt;/code&gt;. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/r-efi/r-efi/pull/87&quot;&gt;PR&lt;/a&gt; in r-efi.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/pocketbeagle/pocketbeagle-2&quot;&gt;Pocketbeagle2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/linux/commits/b4/pb2-mspm0/&quot;&gt;Pocketbeagle2 mspm0 driver tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #13</title>
        <published>2024-12-08T00:30:12+05:30</published>
        <updated>2024-12-08T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post44/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post44/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post44/">&lt;p&gt;Hello everyone. I was busy with the Linux kernel for most of the week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;microblocks-updates&quot;&gt;MicroBlocks Updates&lt;/h1&gt;
&lt;p&gt;MicroBlocks dev branch recently broke the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks&quot;&gt;MicroBlocks Zephyr Port&lt;/a&gt;. I sent a patch to the Discord channel, and it has been fixed.&lt;/p&gt;
&lt;h1 id=&quot;devicetree-compiler&quot;&gt;Devicetree Compiler&lt;/h1&gt;
&lt;p&gt;A lot of work this week was focused on the device tree compiler. I have been working on adding support for path references in devicetree overlays. In the initial patch, some parts of the initial patch series can be sent as independent patches. So last week mostly involved getting those merged.&lt;/p&gt;
&lt;h2 id=&quot;setprop-namelen-variants&quot;&gt;setprop namelen variants&lt;/h2&gt;
&lt;p&gt;Previously, all the setprop variants calculated length of property length from &lt;code&gt;strlen&lt;/code&gt;. However, devicetree &lt;code&gt;__fixups__&lt;/code&gt; contains information regarding the position of a property to resolve, and thus cannot use these normal variants. Additionally, it is not allowed to use heap memory in many places in the devicetree compiler and related tools, and thus, there was a need for &lt;code&gt;setprop_namelen_*&lt;/code&gt; variants of functions similar to how these exist for &lt;code&gt;getprop_namelen_*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/Z1KQJZpgODVajgd6@zatzit/T/#m8087a8818b06e73546b4f63cd683cbcdc512e16d&quot;&gt;patch series&lt;/a&gt; has been merged now.&lt;/p&gt;
&lt;h2 id=&quot;clang-format-config&quot;&gt;Clang format config&lt;/h2&gt;
&lt;p&gt;While working on the devicetree compiler code, I was using the clang-format config from the Linux kernel. As suggested by David Gibson, I sent a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/Z1KGnQt5W9XK1Xv2@zatzit/T/#m60c3078bf79053c05da0e19a5d37a2dcb1c95ad3&quot;&gt;patch&lt;/a&gt; to add the clang-format config which has now been merged.&lt;/p&gt;
&lt;h2 id=&quot;path-reference-support-in-devicetree-overlays&quot;&gt;Path Reference support in Devicetree overlays&lt;/h2&gt;
&lt;p&gt;Since the related patch for &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post44/#setprop-namelen-variants&quot;&gt;setprop namelen&lt;/a&gt; variants has been merged, I have been working on version 2 of the path reference support patch. Since it is not allowed to use dynamic allocation, I have been able to get things working with adjusting offsets while growing. I still need to fix some tests and add new ones, but I should be able to post the patches this week.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;As per the suggestion in the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/issues/41&quot;&gt;issue&lt;/a&gt;, I have been experimenting with moving around the configuration screen flow. A prototype can be found &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/36&quot;&gt;here&lt;/a&gt;. I have not yet finalized whether this should be merged.&lt;/p&gt;
&lt;h1 id=&quot;arch-linux&quot;&gt;Arch Linux&lt;/h1&gt;
&lt;p&gt;While working with docker containers, I found out that &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Systemd-networkd&quot;&gt;systemd-networkd&lt;/a&gt; is enabled by default, which conflicts with &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/NetworkManager&quot;&gt;NetworkManager&lt;/a&gt;. I did consider just using systemd-networkd and removing NetworkManager, but it seems NetworkManager is better for laptops. Additionally, I did not find good GUIs for &lt;code&gt;systemd-networkd&lt;/code&gt;, so I have deactivated it for now.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series will keep people updated about my work and attract potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks&quot;&gt;MicroBlocks Zephyr Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/&quot;&gt;Devicetree compiler mailing list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://archlinux.org/&quot;&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #12</title>
        <published>2024-12-01T00:30:12+05:30</published>
        <updated>2024-12-01T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post43/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post43/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post43/">&lt;p&gt;Hello everyone. I switched my linux distro this week. So lots of updates regarding it. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;Since CI was broken last week, these changes have yet to be merged.&lt;/p&gt;
&lt;h2 id=&quot;improve-cancel-messages&quot;&gt;Improve Cancel Messages&lt;/h2&gt;
&lt;p&gt;As pointed out by Deepak &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/issues/40&quot;&gt;here&lt;/a&gt;, the messages when the cancel button was used were not particularly informative regarding which step of the flashing process was canceled. This was due to the initial quick and dirty implementation for everything. This has now been fixed to provide better messages for each stage of flashing. Here are the messages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preparation canceled by user&lt;/li&gt;
&lt;li&gt;Downloading canceled by the user&lt;/li&gt;
&lt;li&gt;Flashing canceled by user&lt;/li&gt;
&lt;li&gt;Verification canceled by user&lt;/li&gt;
&lt;li&gt;Customization canceled by the user&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;speedup-sd-card-verification&quot;&gt;Speedup SD card verification&lt;/h2&gt;
&lt;p&gt;After some testing for verification, I found out that a 4K buffer length seems to be the fastest for reading SD card contents for SHA256 verification. This gives a modest performance boost. However, verification is still not as fast as I would like. I may try vectored reads in the future.&lt;/p&gt;
&lt;h2 id=&quot;appimage-ci-broken&quot;&gt;Appimage CI broken&lt;/h2&gt;
&lt;p&gt;Last week, &lt;a rel=&quot;external&quot; href=&quot;https://github.com/AppImage/appimagetool&quot;&gt;appimagetool&lt;/a&gt; got a new update that broke my CI. I have not yet found the time to figure out the issue, but let&#39;s see if I can reproduce it in a local docker. I have created an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/AppImage/appimagetool/issues/79&quot;&gt;issue&lt;/a&gt; for the time being.&lt;/p&gt;
&lt;h1 id=&quot;archlinux-switch&quot;&gt;ArchLinux Switch&lt;/h1&gt;
&lt;p&gt;I have been using &lt;a rel=&quot;external&quot; href=&quot;https://fedoraproject.org/atomic-desktops/sway/&quot;&gt;Fedora Sway Atomic&lt;/a&gt; since Fedora 36. It has been a good experience for the most part. I appreciated how rock-stable it was. I have even rebased to the KDE atomic variant in the past and was surprised at how painless it ended up being. Since I used Neovim, working inside containers was not particularly difficult either. All in all, it was a pretty great experience.&lt;/p&gt;
&lt;p&gt;While I can come up with a lot of excuses regarding why I switched back to ArchLinux, the honest one was that I was bored. In the past few years, I have become much more comfortable contributing to random projects. Additionally, I have also gained a lot more knowledge regarding the general design of Linux systems, along with the basics of debugging. Along with the fact that I do a lot of Linux kernel development nowadays (most for embedded systems), I am okay with my system breaking.&lt;/p&gt;
&lt;p&gt;The great thing about Fedora Atomic is that I could just switch to a previous deployment if something broke. However, it also meant that I had less incentive to go and create upstream issues and dive into the source to see if I could fix the problem myself. This was great when I was just getting started with open-source and did not have the time or knowledge to just try fixing anything broken I found. However, as someone who is a decent developer now, I have found that fixing problems in random stuff is actually quite a good way to improve my skills.&lt;/p&gt;
&lt;h2 id=&quot;what-i-like-about-arch&quot;&gt;What I like about Arch&lt;/h2&gt;
&lt;h3 id=&quot;pkgbuild&quot;&gt;PKGBUILD&lt;/h3&gt;
&lt;p&gt;I love the Arch &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/PKGBUILD&quot;&gt;PKGBUILD&lt;/a&gt; based system. While I like &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Arch_User_Repository&quot;&gt;AUR&lt;/a&gt;, the real reason I love PKGBUILD is because how easy it allows me to manage things like custom local kernels and some other experimental software with pacman instead of having to remember where I put all the files.&lt;/p&gt;
&lt;p&gt;This makes working on development builds much simpler since, well, even if I forget or lose the exact way I installed the package (which I do more than I should), I do not need to worry that I might have forgotten some man page files while manually removing the software.&lt;/p&gt;
&lt;h3 id=&quot;arch-user-repository&quot;&gt;Arch User Repository&lt;/h3&gt;
&lt;p&gt;Almost every piece of software available on Linux can be installed on Arch Linux thanks to &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Arch_User_Repository&quot;&gt;AUR&lt;/a&gt;. While the stability of AUR packages can be a bit questionable, if you can read PKGBUILD, it is much better than using &lt;a rel=&quot;external&quot; href=&quot;https://copr.fedorainfracloud.org/&quot;&gt;Fedora Copr&lt;/a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https://launchpad.net/ubuntu/+ppas&quot;&gt;Ubuntu PPAs&lt;/a&gt;. Additionally, AUR also provides simple access to git versions of packages, which is great in cases where some functionality is not yet available in the stable version of the software.&lt;/p&gt;
&lt;h3 id=&quot;arch-wiki&quot;&gt;Arch Wiki&lt;/h3&gt;
&lt;p&gt;I do not think I need to explain this point much. &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Main_page&quot;&gt;Arch Wiki&lt;/a&gt; is probably the best documentation for any Linux distribution. I have used it a lot, even when dealing with problems in Fedora.&lt;/p&gt;
&lt;h2 id=&quot;my-setup&quot;&gt;My Setup&lt;/h2&gt;
&lt;p&gt;I am using &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Sway&quot;&gt;SwayWM&lt;/a&gt; with &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Alexays/Waybar&quot;&gt;Wayar&lt;/a&gt;. I took a lot of applications and configs from &lt;a rel=&quot;external&quot; href=&quot;https://fedoraproject.org/atomic-desktops/sway/&quot;&gt;Fedora Sway Atomic&lt;/a&gt; since I think the defaults are pretty good on it. I also switched to &lt;a rel=&quot;external&quot; href=&quot;https://codeberg.org/dnkl/fuzzel&quot;&gt;fuzzel&lt;/a&gt; from rofi, and it seems enough for my needs since it does support dmenu style runner.&lt;/p&gt;
&lt;p&gt;All my configs can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/dotfiles&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;challenges&quot;&gt;Challenges&lt;/h2&gt;
&lt;p&gt;While the initial install was quite simple thanks to &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Archinstall&quot;&gt;archinstall&lt;/a&gt;, there were some issues that I had to deal with. I probably will encounter more as time goes on.&lt;/p&gt;
&lt;h3 id=&quot;systemd-initial-ramdisk&quot;&gt;Systemd initial ramdisk&lt;/h3&gt;
&lt;p&gt;The default configuration generated by archinstall uses busybox-based initial ramdisk. While it works fine, I was intrigued by system-based init. I have heard that systemd initial ramdisk can be faster in a lot of cases, but I have not done any testing either way.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Mkinitcpio&quot;&gt;mkinitcpio page&lt;/a&gt; documents the different hooks that are needed for systemd init. However, I was not aware that I needed to edit systemd entry to use systemd based decryption. This led me to have a broken initial ramdisk, which could not even drop me into some root shell (since the root still needed to be unlocked).&lt;/p&gt;
&lt;p&gt;I was able to fix this by fixing the system-boot entry using an arch live iso as described &lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Dm-crypt/System_configuration#Using_systemd-cryptsetup-generator&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;locale-problems&quot;&gt;Locale Problems&lt;/h3&gt;
&lt;p&gt;During &lt;code&gt;archinstall&lt;/code&gt;, I selected &lt;code&gt;en_IN&lt;/code&gt; as my locale. It generated locales fine, but it is recommended to also generate &lt;code&gt;en_US.UTF-8&lt;/code&gt; as a backup. While most things worked fine, I had weird problems with some software like &lt;a rel=&quot;external&quot; href=&quot;https://codeberg.org/dnkl/fuzzel&quot;&gt;fuzzel&lt;/a&gt;, which did not like my &lt;code&gt;LANG&lt;/code&gt; to be set to &lt;code&gt;en_IN&lt;/code&gt; without specifying the encoding. I was able to fix this by setting &lt;code&gt;LANG=en_IN.UTF-8&lt;/code&gt; in &lt;code&gt;/etc/locale.conf&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;other-steam-problems&quot;&gt;Other Steam problems&lt;/h3&gt;
&lt;p&gt;I am using the Steam package in normal Arch Linux repos instead of Flatpak. However, initially, it failed to launch. After looking at the logs, it turned out that Steam wanted a few directories to be present in the system: &lt;code&gt;~/.local/share/{icons, font}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I have also been facing some freeze problems when running games (&lt;a rel=&quot;external&quot; href=&quot;https://store.steampowered.com/app/1687950/Persona_5_Royal/&quot;&gt;Persona 5 Royal&lt;/a&gt;) using Proton. I have not looked at those too deeply yet.&lt;/p&gt;
&lt;h3 id=&quot;nvidia-dgpu&quot;&gt;Nvidia dGPU&lt;/h3&gt;
&lt;p&gt;I have a laptop with an AMD CPU + Nvidia GPU. I was able to get everything setup with regular amdgpu drivers and nvidia-open. Nvidia Prime works fine for OpenGL. However, I have not really been able to control Vulkan applications well. It seems like &lt;code&gt;vkcube&lt;/code&gt; and &lt;code&gt;dxvk&lt;/code&gt; always try to run on Nvidia dGPU instead of iGPU, even without &lt;code&gt;prime-run&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The AMD iGPU does show up in &lt;code&gt;vulkaninfo&lt;/code&gt;, and I can probably get things to run on the GPU I want by using a hack and preventing it from seeing my Nvidia dGPU. But it is weird that things do not launch on GPU 0 by default.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;My Rust std for UEFI open PRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://archlinux.org/&quot;&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://wiki.archlinux.org/title/Main_page&quot;&gt;Arch Wiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #11</title>
        <published>2024-11-24T00:30:12+05:30</published>
        <updated>2024-11-24T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post42/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post42/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post42/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagley-ai-sd-card-support&quot;&gt;BeagleY-AI SD Card support&lt;/h1&gt;
&lt;p&gt;While hacking on my BeagleY-AI, I found that my HP SD card did not work with BeagleY-AI for some reason. On digging a bit further, some SD cards were not working on BeagleY-AI due to some issues with signal voltage switching on the am62x platform. This has now been fixed, as seen in the following &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20240924195335.546900-1-jm@ti.com/&quot;&gt;patch series&lt;/a&gt;. By switching out the Linux kernel to mainline, I was able to get the HP SD card to work. So, the SD card compatibility of BeagleY-AI will improve soon.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;BeagleBoard Rust imager got lots of love this week.&lt;/p&gt;
&lt;h2 id=&quot;appimagelauncher-problem&quot;&gt;AppimageLauncher Problem&lt;/h2&gt;
&lt;p&gt;As pointed out by Jason &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/issues/37&quot;&gt;here&lt;/a&gt;, the BeagleBoard Rust imager appimage is not usable with &lt;a rel=&quot;external&quot; href=&quot;https://github.com/TheAssassin/AppImageLauncher&quot;&gt;AppimageLauncher&lt;/a&gt;. The issue seems to be that &lt;a rel=&quot;external&quot; href=&quot;https://github.com/AppImage/appimagetool&quot;&gt;appimagetool&lt;/a&gt; uses &lt;code&gt;ZSTD&lt;/code&gt; compression now, while &lt;code&gt;AppimageLauncher&lt;/code&gt; does not support it yet. Moreover, it seems like &lt;code&gt;AppimageLauncher&lt;/code&gt; makes the appimage unusable. For now, the recommendation is to either remove &lt;code&gt;AppimageLauncher&lt;/code&gt; or at least deactivate it for the BeagleBoard Rust imager.&lt;/p&gt;
&lt;p&gt;More information regarding the upstream issue can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/TheAssassin/AppImageLauncher/issues/674&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;sd-card-flashing-performance-improvements&quot;&gt;SD Card Flashing Performance Improvements&lt;/h2&gt;
&lt;p&gt;While the SD card flashing worked, it was much slower than the original &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/bb-imager&quot;&gt;bb-imager&lt;/a&gt;. After some tinkering with the buffer size while flashing and using parallel decompression of xz images, SD card flashing should be much faster (flashing time decreases by 57%).&lt;/p&gt;
&lt;p&gt;It is still a bit slower than the original bb-imager (about 1 min), but it seems related to the internals of &lt;code&gt;QFile&lt;/code&gt;, so that would be much more work than just a day.&lt;/p&gt;
&lt;h2 id=&quot;debian-packages&quot;&gt;Debian Packages&lt;/h2&gt;
&lt;p&gt;BeagleBoard Rust imager now builds Debian packages in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/33&quot;&gt;CI&lt;/a&gt; using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/mmstick/cargo-deb&quot;&gt;cargo-deb&lt;/a&gt;. While the goal is to eventually have an upstream package using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ahdinosaur/debcargo&quot;&gt;debcargo&lt;/a&gt;, there is not much point until &lt;code&gt;bb-imager-rs&lt;/code&gt; hits v1.0.0. Additionally, since debcargo only seems to support building stuff already present in &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/&quot;&gt;cartes.io&lt;/a&gt;, it does not seem suitable for experimental builds (although I could be wrong about that).&lt;/p&gt;
&lt;h2 id=&quot;experimental-builds&quot;&gt;Experimental Builds&lt;/h2&gt;
&lt;p&gt;Builds from the latest &lt;code&gt;main&lt;/code&gt; branch are now pushed to &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/packages&quot;&gt;Package Registry&lt;/a&gt; rather than just being stored as build artifacts. This makes grabbing the latest development version of &lt;code&gt;bb-imager-rs&lt;/code&gt; much simpler.&lt;/p&gt;
&lt;p&gt;Note: Only the most recent build is kept around.&lt;/p&gt;
&lt;h1 id=&quot;uefi-process-args-in-rust-std&quot;&gt;UEFI Process Args in Rust std&lt;/h1&gt;
&lt;p&gt;Initial support for Rust &lt;code&gt;std::process&lt;/code&gt; was &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/123196&quot;&gt;merged&lt;/a&gt; upstream a while back. However, at the time, it was missing support for passing arguments to the spawned process to keep the PR easier to review. Finally, the support for arguments has now been merged to make the API somewhat feature-complete.&lt;/p&gt;
&lt;p&gt;UEFI process is one of the more important APIs since it is used by Rust to spawn tests, thereby bringing us closer to being able to run all of Rust&#39;s testing infrastructure on UEFI. This will help make Rust much easier to use in the UEFI space.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;My Rust std for UEFI open PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #10</title>
        <published>2024-11-17T00:30:12+05:30</published>
        <updated>2024-11-17T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post41/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post41/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post41/">&lt;p&gt;Hello everyone. I was busy with the Linux kernel for most of the week. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;devicetree-append-properties-support&quot;&gt;Devicetree append properties support&lt;/h1&gt;
&lt;p&gt;Currently, devictree supports creating and deleting properties but not appending to existing properties. This functionality is vital for complex uses like MikroBUS. I have been working on this for a while and posted &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241111-append-v3-0-609c09401f3f@beagleboard.org/&quot;&gt;Patch v3&lt;/a&gt; last week.&lt;/p&gt;
&lt;p&gt;To understand what it allows, let&#39;s take an example:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dts-v1/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        str-prop = &amp;quot;0&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        /append-property/ str-prop = &amp;quot;1&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above devictree will produce the following output:&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dts-v1/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    node {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        str-prop = &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;devicetree-overlays-path-reference-support&quot;&gt;Devicetree overlays path reference support&lt;/h1&gt;
&lt;p&gt;Devicetree allows references in two contexts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Integer context: In this case the references are resolved to phandle.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;foo = &amp;lt;&amp;amp;bar&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;String context: In this case, the references are resolved to paths.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;foo = &amp;amp;bar;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Runtime overlays only support the former but not the latter. I have created a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241116-overlay-path-v1-0-ac3e121359e9@beagleboard.org/&quot;&gt;patch series&lt;/a&gt; to fix this asymmetry.&lt;/p&gt;
&lt;p&gt;Additionally, &lt;code&gt;__symbols__&lt;/code&gt; does not support phandles, which makes overlays modifying &lt;code&gt;__symbols__&lt;/code&gt; somewhat limiting. More context regarding this patch can be found &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/devicetree-compiler/44bfc9b3-8282-4cc7-8d9a-7292cac663ef@ti.com/T/#mf0f6ae4db0848f725ec6e2fb625291fa0d4eec71&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241111-append-v3-0-609c09401f3f@beagleboard.org/&quot;&gt;Devicetree append properties patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241116-overlay-path-v1-0-ac3e121359e9@beagleboard.org/&quot;&gt;Devicetree overlays path reference patch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #9</title>
        <published>2024-11-10T00:30:12+05:30</published>
        <updated>2024-11-10T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post40/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post40/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post40/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;Continuing the trend from previous weeks, many developments took place in &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Rust Imager&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;macos&quot;&gt;MacOS&lt;/h2&gt;
&lt;p&gt;Thanks to help from &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/superchamp234&quot;&gt;Zain&lt;/a&gt;, BeagleBoard Rust Imager SD card flashing finally works on MacOS. With this, it is now possible to flash Linux images to an SD card on MacOS.&lt;/p&gt;
&lt;p&gt;Any developers requiring similar functionality should look at the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/26&quot;&gt;PR&lt;/a&gt;. Here are the steps in brief:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Unmount the sd card using &lt;code&gt;diskutil&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create pipes using &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/src/std/os/unix/net/stream.rs.html#146-149&quot;&gt;&lt;code&gt;std::os::unix::net::UnixStream::pair()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a MacOS Authorization external form using &lt;a rel=&quot;external&quot; href=&quot;https://docs.rs/security-framework/latest/security_framework/authorization/index.html&quot;&gt;&lt;code&gt;security_framework::authorization&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Launch &lt;code&gt;authopen&lt;/code&gt; with the &lt;code&gt;-extauth&lt;/code&gt; argument using &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/std/process/struct.Command.html&quot;&gt;&lt;code&gt;std::process::Command&lt;/code&gt;&lt;/a&gt; with the send pipe as stdout.&lt;/li&gt;
&lt;li&gt;Send the MacOS authorization external form to the process stdin.&lt;/li&gt;
&lt;li&gt;Read the &lt;code&gt;SCM_RIGHTS&lt;/code&gt; control message from the receive pipe and get the file descriptor.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;sd-card-formatting&quot;&gt;Sd card formatting&lt;/h2&gt;
&lt;p&gt;SD card formatting is now supported on both Windows and Linux. MacOS support is still pending. This is useful for making the bootable SD cards usable again.&lt;/p&gt;
&lt;h2 id=&quot;offline-support&quot;&gt;Offline support&lt;/h2&gt;
&lt;p&gt;Offline use of BeagleBoard Rust imager for all supported boards is now possible. The base configuration now includes definitions for all boards.&lt;/p&gt;
&lt;h1 id=&quot;microblocks&quot;&gt;MicroBlocks&lt;/h1&gt;
&lt;p&gt;Since MicroBlocks IDE v2 has been &lt;a rel=&quot;external&quot; href=&quot;http://microblocks.fun/blog/2024-10-19-microblocks-2.0-launch/&quot;&gt;released&lt;/a&gt;, there has been a new release of MicroBlocks stable firmware. You can grab the latest firmware for BeagleBoard Freedom from &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks/-/releases/250&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;gpio-nexus-node-schema&quot;&gt;GPIO Nexus Node Schema&lt;/h1&gt;
&lt;p&gt;While working on MikroBUS patches, I encountered &lt;a rel=&quot;external&quot; href=&quot;https://devicetree-specification.readthedocs.io/en/v0.3/devicetree-basics.html#nexus-nodes-and-specifier-mapping&quot;&gt;devicetree nexus nodes&lt;/a&gt;. It allows the ability to create proxy GPIO controller thereby providing a stable numbering scheme for GPIO pins on MikroBUS socket.&lt;/p&gt;
&lt;p&gt;To allow use in the Linux kernel, I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/devicetree-org/dt-schema/pull/143&quot;&gt;PR&lt;/a&gt; to add the dt schema to the upstream repository. It has now been merged.&lt;/p&gt;
&lt;h1 id=&quot;dynamic-alias-in-linux-devicetree&quot;&gt;Dynamic alias in Linux devicetree&lt;/h1&gt;
&lt;p&gt;Currently, adding/removing/updating &lt;code&gt;/aliases&lt;/code&gt; is not supported in the upstream Linux kernel. This means overlays cannot rely on using &lt;code&gt;/aliases&lt;/code&gt;, which are much more powerful than existing &lt;code&gt;/__symbols__&lt;/code&gt;. In my &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20240902-symbol-phandle-v1-0-683efb2a944b@beagleboard.org/&quot;&gt;patch series&lt;/a&gt; to add support for phandles in &lt;code&gt;/__symbols__&lt;/code&gt;, it was brought up that it might be better to switch to using &lt;code&gt;/aliases&lt;/code&gt; instead of trying to add more to &lt;code&gt;/__symbols__&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So I have created a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20241110-of-alias-v2-0-16da9844a93e@beagleboard.org/T/#t&quot;&gt;new patch series&lt;/a&gt; based on the &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/1435675876-2159-1-git-send-email-geert+renesas@glider.be/&quot;&gt;original patch series&lt;/a&gt; by Geert Uytterhoeven in 2015.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks/&quot;&gt;MicroBlocks Zephyr Port&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #8</title>
        <published>2024-11-03T00:30:12+05:30</published>
        <updated>2024-11-03T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post39/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post39/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post39/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleplay-pwm-patch&quot;&gt;BeaglePlay PWM Patch&lt;/h1&gt;
&lt;p&gt;A while ago, I discovered that the MikroBUS PWM pin was not enabled in the upstream devicetree for BeaglePlay. So I created a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/173021674666.3859929.3387135730934868690.b4-ty@ti.com/&quot;&gt;patch&lt;/a&gt; to enable PWM and it was finally merged last week.&lt;/p&gt;
&lt;h1 id=&quot;beagleconnect-freedom-debugging&quot;&gt;BeagleConnect Freedom Debugging&lt;/h1&gt;
&lt;p&gt;Continuing the work from &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post38/&quot;&gt;last week&lt;/a&gt;, I was able to load Zephyr firmware that exhibited the stalling behavior. However, I still haven&#39;t been able to pinpoint the exact cause. You can follow the discussion in &lt;a rel=&quot;external&quot; href=&quot;https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1430241/cc1352p7-beagleconnect-freedom-freezes-if-both-pwm-and-ieee802154-subg-is-used-together/&quot;&gt;Ti E2E&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/bcf-stall&quot;&gt;minimal example&lt;/a&gt; to reproduce the problem.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;There has been some interest in making the Rust flasher the official flasher. To achieve that, there has been a lot of development towards v1.0.0.&lt;/p&gt;
&lt;h2 id=&quot;macos-dmg-support&quot;&gt;MacOS dmg support&lt;/h2&gt;
&lt;p&gt;Thanks to help from &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/superchamp234&quot;&gt;Zain&lt;/a&gt;, I was able to create &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/23&quot;&gt;MacOS dmg in CI&lt;/a&gt;. While most of the flashing functionality does not work on MacOS yet, having easy experimental CI builds should help development to at least ensure everything builds.&lt;/p&gt;
&lt;h2 id=&quot;make-bb-imager-rs-ready-for-crates-io&quot;&gt;Make bb-imager-rs Ready for crates.io&lt;/h2&gt;
&lt;p&gt;While exploring ways to create a Debian package, I stumbled across &lt;a rel=&quot;external&quot; href=&quot;https://salsa.debian.org/rust-team/debcargo/&quot;&gt;debcargo&lt;/a&gt;, which is the official way to package Rust applications for Debian. Since it can potentially allow official packages in the future, I decided to prefer it over &lt;a rel=&quot;external&quot; href=&quot;https://github.com/kornelski/cargo-deb&quot;&gt;cargo-deb&lt;/a&gt;. However, since debcargo builds the package from &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt;, I needed to cleanup the out of tree patches for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ir1keren/rs-drivelist&quot;&gt;rs-drivelist&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.com/robert.ernst.paf/bin_file&quot;&gt;bin_file&lt;/a&gt;. So, I moved the unmerged/unreleased code into bb-imager itself for now.&lt;/p&gt;
&lt;p&gt;I still need to set up CI to push to crates.io automatically, but I am a bit unsure regarding how to handle the API key securely.&lt;/p&gt;
&lt;h2 id=&quot;sd-card-formatting-support&quot;&gt;Sd Card Formatting Support&lt;/h2&gt;
&lt;p&gt;I have added support for &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/merge_requests/24&quot;&gt;SD card formatting&lt;/a&gt; since it is helpful for an imaging utility. However, it does not work on Windows yet.&lt;/p&gt;
&lt;h2 id=&quot;performance-enhancements-and-code-improvements&quot;&gt;Performance Enhancements and Code improvements&lt;/h2&gt;
&lt;p&gt;Here is the list of minor improvements that occurred during the week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;More responsive UI&lt;/li&gt;
&lt;li&gt;Make the default window size smaller&lt;/li&gt;
&lt;li&gt;Better handling of big os image lists.&lt;/li&gt;
&lt;li&gt;Code improvements to make contribution easier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;file-i-o-support-for-rust-std-for-uefi&quot;&gt;File I/O Support for Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;As eluded to &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post38/&quot;&gt;last week&lt;/a&gt;, File I/O PR is now ready for prime time. It supports the following kinds of paths:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Relative Paths&lt;/li&gt;
&lt;li&gt;Absolute UEFI Shell Mapping&lt;/li&gt;
&lt;li&gt;Absolute UEFI Device Path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now, I have only added support for files (so no directory APIs) to make review easier. However, once the file support is merged, directory API implementations will be a simple matter.&lt;/p&gt;
&lt;p&gt;Currently, there is a lack of reviewers for UEFI Rust std PRs. So, if you have the experience, feel free to check out and/or review the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/129700&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;My Rust std for UEFI open PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #7</title>
        <published>2024-10-27T00:30:12+05:30</published>
        <updated>2024-10-27T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post38/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post38/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post38/">&lt;p&gt;Hello everyone. This week mostly involved a lot of chasing stuff around (sometimes in vain), so while there was not much headline work, this post might end up a bit longer than usual. Let&#39;s get started without delay.&lt;/p&gt;
&lt;h1 id=&quot;beagleconnect-freedom-adventures&quot;&gt;BeagleConnect Freedom Adventures&lt;/h1&gt;
&lt;p&gt;I started the week by trying to add IEEE802154 subg socket support in MicroPython for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. However, I quickly learned that it would not be simple. For some reason, BeagleConnect Freedom would completely lock up after starting.&lt;/p&gt;
&lt;p&gt;Initially, I thought it might be a MicroPython issue, so I tried tracking down where the freeze happened. This, however, led to a dead end since, for some reason, the program would not be able to read from the UART console. While doing this, I also remembered a similar issue I encountered while working on &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/rc-car&quot;&gt;BeagleConnect Freedom rc car demo&lt;/a&gt;. At the time, I fixed it by just removing unused config items like ADC and PWM from config, but forgot about it after the &lt;a rel=&quot;external&quot; href=&quot;https://events.canonical.com/event/89/&quot;&gt;OOSC conference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After some experimenting with PWM, ADC, and IEEE802154 subg radio, I figured out that the problem is reproducible in other Zephyr samples like &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/samples/net/sockets/echo_client/README.html#sockets-echo-client&quot;&gt;echo_cliet&lt;/a&gt;, etc. For some reason, if both PWM pins (MB1 PWM and MB2 PWM) are enabled alongside the subg radio, everything freezes. If one or both of the PWM are disabled, everything works fine. This seems to be an issue with timers but it needs further investigation.&lt;/p&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/issues/80252&quot;&gt;Zephyr issue&lt;/a&gt; and a &lt;a rel=&quot;external&quot; href=&quot;https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1430241/cc1352p7-beagleconnect-freedom-freezes-if-both-pwm-and-ieee802154-subg-is-used-together&quot;&gt;Ti E2E question&lt;/a&gt; for the same.&lt;/p&gt;
&lt;h1 id=&quot;code-composer-studio-theia-adventures&quot;&gt;Code Composer Studio Theia Adventures&lt;/h1&gt;
&lt;p&gt;With the MicroPython issue and the &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post35/#support-for-more-firmware-file-types&quot;&gt;bricked BeagleConnect Freedom&lt;/a&gt;, I thought it is a good time to setup and learn Ti&#39;s &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/tool/CCSTUDIO&quot;&gt;Code Composer Studio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I use &lt;a rel=&quot;external&quot; href=&quot;https://fedoraproject.org/atomic-desktops/sway/&quot;&gt;Fedora Sway Atomic&lt;/a&gt; as my daily driver, and thus mostly rely on flatpaks or podman containers. However, running Code Composer Studio inside a podman container (created using &lt;a rel=&quot;external&quot; href=&quot;https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/&quot;&gt;toolbox&lt;/a&gt;) was not a great experience for me. It would randomly stutter (maybe a hardware acceleration problem?) and freeze. Additionally, while udev can make it almost painless to handle device permissions, it can occasionally cause hiccups with flashing. In fact, one of the primary reasons I switched to &lt;a rel=&quot;external&quot; href=&quot;https://neovim.io/&quot;&gt;neovim&lt;/a&gt; was that my &lt;a rel=&quot;external&quot; href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;emacs&lt;/a&gt; GUI kept having weird performance problems inside the container.&lt;/p&gt;
&lt;p&gt;So, I finally went ahead and installed CCS Theia on my base system. The install procedure is a bit weird since there is no &lt;code&gt;rpm&lt;/code&gt; or &lt;code&gt;deb&lt;/code&gt; package. Instead, there is an installer which installs everything in &lt;code&gt;$HOME/ti&lt;/code&gt; folder. It also creates an uninstall, which seems to work. All in all, while I prefer a flatpack or app image, it wasn&#39;t too bad.&lt;/p&gt;
&lt;p&gt;I hit a snag quite early on when I was unable to flash the cc1352p1 on my &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/tool/LAUNCHXL-CC1352P&quot;&gt;launchpad&lt;/a&gt;. I tried various things and opened a &lt;a rel=&quot;external&quot; href=&quot;https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1428729/launchxl-cc1352p-cannot-flash-using-ccs-theia&quot;&gt;Ti E2E question&lt;/a&gt; for the same. However, the solution turned out to be quite weird. I was not saving my workspace since, well, nothing was working anyway, and CCS Theia would open the unsaved workspace. But everything magically worked once I saved my workspace because I was tired of the dialog on exit. Not really sure why.&lt;/p&gt;
&lt;p&gt;Once I could flash the launchpad, I tried using the &lt;a rel=&quot;external&quot; href=&quot;https://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_xds110.html&quot;&gt;xds110&lt;/a&gt; in launchpad with my BeagleConnect Freedom. I was able to flash a simple blinky on it and even set up breakpoints.&lt;/p&gt;
&lt;p&gt;Now, I need to figure out how to use &lt;a rel=&quot;external&quot; href=&quot;https://openocd.org/&quot;&gt;openocd&lt;/a&gt; and add instructions in Beagle docs and Zephyr docs for the same.&lt;/p&gt;
&lt;h1 id=&quot;kunit-adventures&quot;&gt;KUnit Adventures&lt;/h1&gt;
&lt;p&gt;I have been working on kernel patches that require writing some unit tests. So I was trying to get &lt;a rel=&quot;external&quot; href=&quot;https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html&quot;&gt;KUnit&lt;/a&gt; to work. However, &lt;code&gt;kunit run&lt;/code&gt; kept on failing for some reason, even with the default config. The output was not very clear either. However, after following some debugging instructions, I found out that I could not execute the user mode kernel from inside the podman container. I have created an &lt;a rel=&quot;external&quot; href=&quot;https://github.com/containers/toolbox/issues/1574&quot;&gt;issue&lt;/a&gt; in Fedora toolbox regarding the same.&lt;/p&gt;
&lt;h1 id=&quot;micropython&quot;&gt;MicroPython&lt;/h1&gt;
&lt;p&gt;I have added MicroPython support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleplay&quot;&gt;BeaglePlay cc1352p7&lt;/a&gt; in my &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15891&quot;&gt;draft PR&lt;/a&gt;. It supports IEEE802154 subg sockets and also helped me ensure that MicroPython networking should work fine on BeagleConnect Freedom as well once the timer issue is resolved.&lt;/p&gt;
&lt;p&gt;Since BeaglePlay cc1352p7 Zephyr support was merged after the 3.7.0 release, the MicroPython support will continue to live in the draft PR until MicroPython supports a newer Zephyr version.&lt;/p&gt;
&lt;h1 id=&quot;zephyr&quot;&gt;Zephyr&lt;/h1&gt;
&lt;p&gt;Zephyr support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt; boards continues to improve. We will continue to work to make Beagle one of the best-supported platforms for Zephyr development.&lt;/p&gt;
&lt;h2 id=&quot;beaglebone-ai-64&quot;&gt;BeagleBone AI-64&lt;/h2&gt;
&lt;p&gt;Thanks to the work by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/glneo&quot;&gt;Andrew Davis&lt;/a&gt;, Zephyr support for R5 cores in BeagleBone AI64 was merged this week. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/beaglebone_ai64/doc/index.html&quot;&gt;Zephyr page for BeagleBone AI 54&lt;/a&gt;. This adds one more board to the growing list of BeagleBoard boards that support Zephyr.&lt;/p&gt;
&lt;h2 id=&quot;beagley-ai&quot;&gt;BeagleY-AI&lt;/h2&gt;
&lt;p&gt;A &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/80344&quot;&gt;PR&lt;/a&gt; for Zephyr support was opened by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/glneo&quot;&gt;Andrew Davis&lt;/a&gt; after BBAI-64 support was merged. Anyone interested should feel free to try it out. Hopefully, it can get merged upstream soon.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-imager-rust-updates&quot;&gt;BeagleBoard Imager Rust Updates&lt;/h1&gt;
&lt;p&gt;While working on BeagleY-AI, I found a bug in the sha256 handling of the Rust-based imager while translating the old bb-imager config. So, I have created &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/releases/v0.0.2&quot;&gt;release 0.0.2&lt;/a&gt; for the imager. I probably should implement changelogs before the next release.&lt;/p&gt;
&lt;h1 id=&quot;rust-path-prefix&quot;&gt;Rust Path Prefix&lt;/h1&gt;
&lt;p&gt;While working on File I/O support for UEFI, I was reminded again of the limitations of &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/std/path/enum.Prefix.html&quot;&gt;std::path::Prefix&lt;/a&gt;. To fix this, an issue has been opened in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/issues/52331&quot;&gt;Github&lt;/a&gt;, and I have posted my &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/issues/52331#issuecomment-2439721420&quot;&gt;proposal&lt;/a&gt;. Feel free to add suggestions to it.&lt;/p&gt;
&lt;p&gt;I will start implementing the proposal once I deem the File I/O support good enough to mark the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/129700&quot;&gt;draft PR&lt;/a&gt; as ready.&lt;/p&gt;
&lt;h1 id=&quot;migrating-to-dev-domain&quot;&gt;Migrating to dev domain&lt;/h1&gt;
&lt;p&gt;I have migrated my blog from &lt;a rel=&quot;external&quot; href=&quot;https://programmershideaway.xyz/&quot;&gt;https://programmershideaway.xyz/&lt;/a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https://programmershideaway.dev/&quot;&gt;https://programmershideaway.dev/&lt;/a&gt;. The reason I started out with xyz was because it was extremely cheap at the time. However, now that I am writing regularly, I have decided to switch to &lt;code&gt;.dev&lt;/code&gt;, since that feels better than &lt;code&gt;.xyz&lt;/code&gt; for a programming blog. I have also setup redirects from the old domain, so all the old links will continue to work for now. I will renew the old domain for at least one more year. Hopefully, by 2026, all the old links will be updated to the new one.&lt;/p&gt;
&lt;p&gt;I used &lt;a rel=&quot;external&quot; href=&quot;https://www.cloudflare.com/en-in/products/registrar/&quot;&gt;Cloudflare Registrar&lt;/a&gt; for the domain (since my old one is also here), but payments were really difficult to do from an Indian debit card. I hope Cloudflare can fix this by the time I have to renew this domain.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/tool/CCSTUDIO&quot;&gt;Code Composer Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleplay&quot;&gt;BeaglePlay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beaglebone-ai-64&quot;&gt;BeagleBone AI-64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagley-ai&quot;&gt;BeagleY-AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #6</title>
        <published>2024-10-20T00:30:12+05:30</published>
        <updated>2024-10-20T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post37/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post37/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post37/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;micropython&quot;&gt;MicroPython&lt;/h1&gt;
&lt;h2 id=&quot;initial-beagleconnect-freedom-support&quot;&gt;Initial BeagleConnect Freedom Support&lt;/h2&gt;
&lt;p&gt;While we have had &lt;a rel=&quot;external&quot; href=&quot;https://micropython.org/&quot;&gt;MicroPython&lt;/a&gt; firmware for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; in the past, the work was out of tree. This made maintenance and collaboration hard to do. There were a few reasons for having the support out of tree:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Zephyr support for BeagleConnect Freedom was primarily out of tree, with just basic support in mainline.&lt;/li&gt;
&lt;li&gt;MicroPython only supported Zephyr v3.1.0&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Due to my work, BeagleConnect Freedom supports almost everything in mainline Zephyr. Additionally, due to the fantastic &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/9335&quot;&gt;work&lt;/a&gt; by &lt;a rel=&quot;external&quot; href=&quot;https://github.com/MaureenHelm&quot;&gt;Maureen Helm&lt;/a&gt; MicroPython now supports Zephyr v3.7.0. So, it seemed like a good time to have support for BeagleConnect Freedom in mainline MicroPython. Here is the link to the merged &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15959&quot;&gt;PR&lt;/a&gt;. It does not contain more advanced features like ADC and PWM right now, but those are also on the way.&lt;/p&gt;
&lt;h2 id=&quot;pwm-support-for-zephyr-port&quot;&gt;PWM support for Zephyr Port&lt;/h2&gt;
&lt;p&gt;While working on adding PWM support for BeagleConnect Freedom in MicroPython, I discovered that the Zephyr port of MicroPython did not support PWM. So, I ended up working on adding PWM support. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/16046&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;microblocks-v2-0&quot;&gt;MicroBlocks v2.0&lt;/h1&gt;
&lt;p&gt;MicroBlocks is a blocks programming language for physical computing inspired by Scratch. BeagleConnect Freedom has had good support for MicroBlocks, as outlined in a &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post31/&quot;&gt;prior post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recently, &lt;a rel=&quot;external&quot; href=&quot;https://microblocks.fun/blog/2024-10-19-microblocks-2.0-launch/&quot;&gt;MicroBlocks v2.0&lt;/a&gt; was released in pilot and thankfully, BeagleConnect Freedom works with the newest firmware perfectly, without any real change in the Zephyr port.&lt;/p&gt;
&lt;h1 id=&quot;arduino-module-for-zephyr&quot;&gt;Arduino Module for Zephyr&lt;/h1&gt;
&lt;p&gt;Due to the recent cleanup of the defaults in the device tree of BeagleConnect Freedom, ADC and PWM are supported without any overlays. So just a simple cleanup of Arduino module overlay. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core/pull/124&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;The v0.0.1 release of the BeagleBoard Rust imager took place last week. It has the following features:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Platforms:
&lt;ol&gt;
&lt;li&gt;Linux
&lt;ol&gt;
&lt;li&gt;GUI Appimage&lt;/li&gt;
&lt;li&gt;CLI binary&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Windows
&lt;ol&gt;
&lt;li&gt;GUI Portable exe&lt;/li&gt;
&lt;li&gt;CLI binary&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;macOS
&lt;ol&gt;
&lt;li&gt;CLI binary&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Boards
&lt;ol&gt;
&lt;li&gt;Generic Linux (BeaglePlay, Beagle AI64, BeagleY-AI,  BeagleV-Fire, BeagleBone Black, etc)&lt;/li&gt;
&lt;li&gt;BeagleConnect Freedom&lt;/li&gt;
&lt;li&gt;BeagleConnect Freedom MSP430&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is basically at feature parity with the original &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/bb-imager&quot;&gt;BeagleBoard Imager&lt;/a&gt; based on Raspberry Pi and supports additional boards like BeagleConnect Freedom. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/releases/v0.0.1&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;The Rust std for UEFI endeavor has picked up steam again, with some of the old PRs getting merged. I have the following support in the pipeline:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;File I/O&lt;/li&gt;
&lt;li&gt;TCP&lt;/li&gt;
&lt;li&gt;UDP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let&#39;s hope that I can get enough free time to upstream everything by the end of this year. However, I will not make any promises since I can only work on this in a limited capacity.&lt;/p&gt;
&lt;h2 id=&quot;environment-variables&quot;&gt;Environment Variables&lt;/h2&gt;
&lt;p&gt;Environment variables support for UEFI was merged this week. It uses UEFI Shell protocol behind the scenes since environment variables are not applicable in most other situations. . Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/127462&quot;&gt;merged PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is also a plan to introduce support for full UEFI variables under &lt;code&gt;std::os::uefi&lt;/code&gt;, but that&#39;s probably far in the future. The current goal is first to reach a point where running Rust std tests is possible.&lt;/p&gt;
&lt;h2 id=&quot;file-i-o&quot;&gt;File I/O&lt;/h2&gt;
&lt;p&gt;With most of the pieces in place, I will start working on File I/O support again. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/129700&quot;&gt;draft PR&lt;/a&gt;, but I have a much more advanced version locally.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;My Rust std for UEFI open PRs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://micropython.org/&quot;&gt;MicroPython&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #5</title>
        <published>2024-10-13T00:30:12+05:30</published>
        <updated>2024-10-13T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post36/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post36/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post36/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;arduino-module-for-zephyr&quot;&gt;Arduino Module for Zephyr&lt;/h1&gt;
&lt;p&gt;A few weeks ago, I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/78667&quot;&gt;PR&lt;/a&gt; in Zephyr that adds ADC and PWM support to base devicetree. So we can now clean up the overlay present in the Arduino Module. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core/pull/124&quot;&gt;PR&lt;/a&gt; for it.&lt;/p&gt;
&lt;p&gt;Additionally, while working on this, I encountered that the CI is broken for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core&quot;&gt;Arduino Core API module for Zephyr&lt;/a&gt;. So, I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core/pull/125&quot;&gt;PR&lt;/a&gt; to fix it.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt; now supports using the original &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/bb-imager&quot;&gt;BeagleBoard Imager&lt;/a&gt; config file. This makes the Rust imager almost feature complete the original (only MacOS support is missing).&lt;/p&gt;
&lt;h1 id=&quot;zephyr&quot;&gt;Zephyr&lt;/h1&gt;
&lt;p&gt;Continuing the general work to improve Zephyr support in Beagle platforms, this week saw some doc improvements along with bug fixes.&lt;/p&gt;
&lt;h2 id=&quot;subg-testing&quot;&gt;Subg Testing&lt;/h2&gt;
&lt;p&gt;BeagleConnect Freedom has now been added to build samples against for subg overlay testing. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/79471&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Adding tests also found a bug in the IEEE802154 shell code, which was fixed in the same PR.&lt;/p&gt;
&lt;h2 id=&quot;beaglev-fire-doc&quot;&gt;BeagleV-Fire Doc&lt;/h2&gt;
&lt;p&gt;I haven&#39;t been involved in BeagleV-Fire much, but for anyone unfamiliar, BeagleV-Fire supports Zephyr on its E51 and U54 cores. There were some problems with the documentation, so I ended up fixing it. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/79511&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;beagleplay-cc1352p7-twister-fix&quot;&gt;BeaglePlay (CC1352P7) Twister Fix&lt;/h2&gt;
&lt;p&gt;Continuing the work to improve defaults, I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/79405&quot;&gt;PR&lt;/a&gt; to only enable IEEE802154 subg in the base devicetree of BeaglePlay CC1352P7. In the same PR, I also found out the &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/develop/test/twister.html&quot;&gt;Twister&lt;/a&gt; was broken for BeaglePlay CC1352P7. So, I also ended up fixing it by enabling the UART console in default Kconfig.&lt;/p&gt;
&lt;h1 id=&quot;rust-std-for-uefi&quot;&gt;Rust std for UEFI&lt;/h1&gt;
&lt;p&gt;I plan to speed up Rust std for UEFI development again since it has been a work in progress for far too long. After posting on the Rust Zulip, things have started moving again. As a first step, &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/129794&quot;&gt;getcwd and chdir&lt;/a&gt; PR was approved.&lt;/p&gt;
&lt;p&gt;I hope more Rust reviewers interested in UEFI can start getting involved so that I can get everything merged by the end of this year.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pulls/Ayush1325&quot;&gt;My Rust std for UEFI open PRs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #4</title>
        <published>2024-10-06T00:30:12+05:30</published>
        <updated>2024-10-06T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post35/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post35/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post35/">&lt;p&gt;Hello everyone. Another light week here. Let&#39;s go over everything.&lt;/p&gt;
&lt;h1 id=&quot;beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/h1&gt;
&lt;h2 id=&quot;zephyr&quot;&gt;Zephyr&lt;/h2&gt;
&lt;p&gt;While &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; has had good Zephyr support for a while, the base devicetree had some missing features that would require overlays. This would sometimes cause confusion among beginners. So, I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/78667&quot;&gt;PR&lt;/a&gt; to provide better defaults.&lt;/p&gt;
&lt;p&gt;I also created another &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/79407&quot;&gt;PR&lt;/a&gt; regarding some other cleanup.&lt;/p&gt;
&lt;h2 id=&quot;micropython&quot;&gt;MicroPython&lt;/h2&gt;
&lt;p&gt;MicroPython support for Zephyr v3.7.0 was finally &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/9335&quot;&gt;merged&lt;/a&gt; last week. I would like to thank &lt;a rel=&quot;external&quot; href=&quot;https://github.com/MaureenHelm&quot;&gt;Maureen Helm&lt;/a&gt; for all the amazing work.&lt;/p&gt;
&lt;p&gt;I have created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15959&quot;&gt;PR&lt;/a&gt; to add BeagleConnect Freedom support to upstream MicroPython. It only supports SPI, I2C, and FLASH for now, but once the base support is accepted, I will expand to include support for everything possible with v3.7.0.&lt;/p&gt;
&lt;h1 id=&quot;beagleplay-zephyr&quot;&gt;BeaglePlay Zephyr&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/beagleplay/doc/beagleplay_cc1352p7.html&quot;&gt;BeaglePlay cc1352p7&lt;/a&gt; support was finally merged last week. While it was initially scheduled for Zephyr v3.7.0, it ended up being delayed. However, I hope that having upstream Zephyr support helps people create some amazing projects.&lt;/p&gt;
&lt;p&gt;Similar to BeagleConnect Freedom, I also cleaned up the BealgePlay devicetree. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/79405&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-imager-rust-utility&quot;&gt;BeagleBoard Imager Rust Utility&lt;/h1&gt;
&lt;p&gt;Continuing from &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post34/&quot;&gt;last week&lt;/a&gt;, there was a lot more development on the Rust-based imager utility.&lt;/p&gt;
&lt;h2 id=&quot;support-for-more-firmware-file-types&quot;&gt;Support for more firmware file types&lt;/h2&gt;
&lt;p&gt;BeagleBoard Rust Imager now supports flashing &lt;a rel=&quot;external&quot; href=&quot;https://downloads.ti.com/docs/esd/SPRUI03/ti-txt-hex-format-ti-txt-option-stdz0795656.html&quot;&gt;Ti-TXT&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://www.intel.com/content/www/us/en/programmable/quartushelp/17.0/reference/glossary/def_hexfile.htm&quot;&gt;Intel Hex&lt;/a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. This should help with using BeagleConnect Freedom using CCStudio.&lt;/p&gt;
&lt;p&gt;I also ended up flashing a firmware that disabled BSL, so I need to figure out how to flash a firmware that enables BSL again.&lt;/p&gt;
&lt;h2 id=&quot;better-cross-compile&quot;&gt;Better Cross compile&lt;/h2&gt;
&lt;p&gt;I want the imager utility to work on aarch64, specifically on BeaglePlay, BeagleY-AI, etc. However, the dependence on OpenSSL and libudev made cross-compiling a bit difficult.&lt;/p&gt;
&lt;p&gt;I was able to simplify local development using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/cross-rs/cross&quot;&gt;cross&lt;/a&gt;. However, using cross on Gitlab CI was much more difficult than I initially expected. Additionally, BeagleBoard Gitlab only had one Docker-in-Docker runner, so I opted for a more manual approach. My &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs/-/blob/main/.gitlab-ci.yml?ref_type=heads&quot;&gt;CI config&lt;/a&gt; should serve as a good starting point for anyone in a similar situation.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #3</title>
        <published>2024-09-29T00:30:12+05:30</published>
        <updated>2024-09-29T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post34/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post34/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post34/">&lt;p&gt;Hello everyone. This was one of the lighter weeks since I couldn&#39;t get much results. But after some thinking, it is also vital to write about failed endeavors in case I pick something back.&lt;/p&gt;
&lt;h1 id=&quot;bluetooth-support-for-beagleconnect-freedom&quot;&gt;Bluetooth support for BeagleConnect Freedom&lt;/h1&gt;
&lt;p&gt;I will outline everything I encountered while trying to get Bluetooth support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; on Zephyr. While I could not do it in the end, I hope this can be helpful in any future work on this.&lt;/p&gt;
&lt;p&gt;Support for most other &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; capabilities is already present in upstream Zephyr, so Bluetooth is the last remaining major feature we are missing.&lt;/p&gt;
&lt;p&gt;After exploring the Zephyr Bluetooth source code, I have come to 2 possible approaches. I will be outlining the benefits, effort required, etc.&lt;/p&gt;
&lt;h2 id=&quot;binary-blob&quot;&gt;Binary Blob&lt;/h2&gt;
&lt;p&gt;It is possible to use binary blobs for HCI support on cc1352p7. As is evident from &lt;a rel=&quot;external&quot; href=&quot;https://dev.ti.com/tirex/explore/node?node=A__AEK1U73z6SVVx8nu76ziDg__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST&amp;amp;placeholder=true&quot;&gt;Ti docs&lt;/a&gt;, there is already an implementation of HCI for cc13xx devices. The following steps need to be taken to integrate it with Zephyr:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure that the internal structure of HCI does not conflict with Zephyr (I assume it might use Ti-RTOS).&lt;/li&gt;
&lt;li&gt;Add the blob to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/hal_ti&quot;&gt;hal_ti&lt;/a&gt;. West supports fetching &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/contribute/bin_blobs.html&quot;&gt;binary blobs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Write an HCI driver (see &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/bluetooth/hci/hci_esp32.c&quot;&gt;hci_esp32&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This approach requires minimal changes to the current Ti approach and should be reasonably straightforward for anyone with access to the cc13xx HCI source. Additionally, minimal maintenance is required from the Ti side since they already maintain the HCI source for Ti-RTOS.&lt;/p&gt;
&lt;p&gt;This approach is already in use in &lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/01space/esp32c3_042_oled/doc/index.html#prerequisites&quot;&gt;ESP32 boards&lt;/a&gt;. Thus, it should be accepted with minimal resistance.&lt;/p&gt;
&lt;h2 id=&quot;zephyr-software-link-layer&quot;&gt;Zephyr Software Link Layer&lt;/h2&gt;
&lt;p&gt;Zephyr also supports software-based link layers, which are supported by Nordic hardware. While it should be possible to directly interface with cc13xx radio APIs in ROM and use the software link layer, the current ble stack was created around Nordic hardware. This means that supporting the Ti APIs would require significant time and effort to adapt things for Ti driverlib APIs.&lt;/p&gt;
&lt;p&gt;I feel this approach only makes sense if Ti intends to officially support Zephyr since it will also require a permanent maintainer.&lt;/p&gt;
&lt;h1 id=&quot;beagley-ai-zephyr-support&quot;&gt;BeagleY-AI Zephyr Support&lt;/h1&gt;
&lt;p&gt;During the &lt;a rel=&quot;external&quot; href=&quot;https://discord.gg/AGU2VXE3?event=1283128283000606751&quot;&gt;Beagle-Y-AI Hacking Sessions&lt;/a&gt;, we went over how to get started with Zephyr on R5 core of BeagleY-AI. Here is the current &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagley-ai/zephyr/zephyr&quot;&gt;Zephyr repo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Check out the video for more details.&lt;/p&gt;
&lt;div class=&quot;yv&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/0FvyT3ax-S0&quot; title=&quot;Youtube&quot; class=&quot;yvi&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h1 id=&quot;beagleconnect-freedom-micropython&quot;&gt;BeagleConnect Freedom MicroPython&lt;/h1&gt;
&lt;p&gt;I have added basic &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; support to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15891&quot;&gt;draft PR&lt;/a&gt;. It currently contains support for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPIO&lt;/li&gt;
&lt;li&gt;I2C&lt;/li&gt;
&lt;li&gt;SPI&lt;/li&gt;
&lt;li&gt;FLASH&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will move the support for this to the main branch once support for &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/9335&quot;&gt;Zephyr 0.37.0&lt;/a&gt; is merged.&lt;/p&gt;
&lt;p&gt;I am waiting on &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/78667&quot;&gt;upstream Zephyr PR&lt;/a&gt; before adding support for ADC, PWM and IEEE802154g.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-imager-rust-utility&quot;&gt;BeagleBoard Imager Rust Utility&lt;/h1&gt;
&lt;p&gt;More updates for Rust port of BeagleBoard imager utility. I am thinking of creating a release soon.&lt;/p&gt;
&lt;h2 id=&quot;support-for-more-firmware-file-types&quot;&gt;Support for more firmware file types&lt;/h2&gt;
&lt;p&gt;We are trying to make it possible to do development for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; using &lt;a rel=&quot;external&quot; href=&quot;https://www.ti.com/tool/CCSTUDIO&quot;&gt;Ti Code Composer Studio&lt;/a&gt;. However, the current flasher (both GUI and CLI) only supports flashing &lt;code&gt;.bin&lt;/code&gt;. So to make things more ergonomic, I am planning to add support for &lt;a rel=&quot;external&quot; href=&quot;https://downloads.ti.com/docs/esd/SPRUI03/ti-txt-hex-format-ti-txt-option-stdz0795656.html&quot;&gt;Ti-TXT&lt;/a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https://www.intel.com/content/www/us/en/programmable/quartushelp/17.0/reference/glossary/def_hexfile.htm&quot;&gt;Intel Hex&lt;/a&gt;, and other common formats.&lt;/p&gt;
&lt;p&gt;I am using &lt;a rel=&quot;external&quot; href=&quot;https://crates.io/crates/bin_file&quot;&gt;bin_file&lt;/a&gt; to handle and parse the file formats. However, it was missing some functionality I needed. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://gitlab.com/robert.ernst.paf/bin_file/-/merge_requests/2&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have already enabled support for new formats for flashing MSP430. Similar support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt; is coming soon.&lt;/p&gt;
&lt;h2 id=&quot;updated-look&quot;&gt;Updated Look&lt;/h2&gt;
&lt;p&gt;The GUI look lines up with the current &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/bb-imager&quot;&gt;BeagleBoard imager utility&lt;/a&gt;, complete with the background and font.&lt;/p&gt;
&lt;p&gt;I use a window manager (sway), so the screenshots have no window decorations.&lt;/p&gt;
&lt;h3 id=&quot;screenshots&quot;&gt;Screenshots&lt;/h3&gt;
&lt;p&gt;Here are some screenshots from the application.&lt;/p&gt;
&lt;h4 id=&quot;home-page&quot;&gt;Home Page&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/images/post34/bbimager_home.webp&quot; alt=&quot;BeagleBoard Imager home page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;extra-configuration-page&quot;&gt;Extra Configuration Page&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/images/post34/bbimager_config.webp&quot; alt=&quot;BeagleBoard Imager extra configuration page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h4 id=&quot;flashing-page&quot;&gt;Flashing Page&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/images/post34/bbimager_flash.webp&quot; alt=&quot;BeagleBoard Imager flashing page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15891&quot;&gt;MicroPython upstream Zephyr PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagley-ai&quot;&gt;BeagleY-AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #2</title>
        <published>2024-09-22T00:30:12+05:30</published>
        <updated>2024-09-22T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post33/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post33/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post33/">&lt;p&gt;Hello everyone. This is the second post in my weekly series. There was some work on bb-imager-rs, mostly my pet project, along with some developments with upstream Zephyr and MicroPython. In short, there were no major developments, but it was still a good week.&lt;/p&gt;
&lt;h1 id=&quot;beagleboard-rust-imager&quot;&gt;BeagleBoard Rust Imager&lt;/h1&gt;
&lt;p&gt;A while ago, I started work on rewriting &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/bb-imager&quot;&gt;BeagleBoard Imaging Utility&lt;/a&gt; with the goal of adding support for flashing things other than SD cards. I chose &lt;a rel=&quot;external&quot; href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https://iced.rs/&quot;&gt;Iced&lt;/a&gt; for this work.&lt;/p&gt;
&lt;p&gt;Fast forward to the present, and now the &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;Rust port&lt;/a&gt; can flash CC1352P7 and MSP430 in &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. Due to some problems with the original MSP430 USB to UART bridge in BeagleConnect Freedom, it was not working on Windows. I ended up rewriting it to work on Windows.&lt;/p&gt;
&lt;p&gt;However, this still left the problem of providing good instructions for flashing the new firmware. Originally, flashing MSP430 required using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zsquareplusc/python-msp430-tools/tree/master&quot;&gt;python-msp430-tools&lt;/a&gt;, which is a Python 2 script and can be difficult to use, especially on Windows. Thus, I added the functionality to the imager to allow GUI-based flashing. Additionally, since it is a standalone binary, chasing dependencies is unnecessary.&lt;/p&gt;
&lt;p&gt;I also updated to Iced v0.13.1 in the process, which introduced rich text. So anyone interested in porting to new Iced can also use this as a reference.&lt;/p&gt;
&lt;p&gt;The Rust-based imager is still missing one critical platform, MacOS, since I do not have a Mac. So, anyone interested is free to take a crack at it.&lt;/p&gt;
&lt;h2 id=&quot;screenshots&quot;&gt;Screenshots&lt;/h2&gt;
&lt;p&gt;Here are some screenshots from the application.&lt;/p&gt;
&lt;h3 id=&quot;home-page&quot;&gt;Home Page&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/post33/bbimager_home.webp&quot; alt=&quot;BeagleBoard Imager home page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;extra-configuration-page&quot;&gt;Extra Configuration Page&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/post33/bbimager_config.webp&quot; alt=&quot;BeagleBoard Imager extra configuration page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;flashing-page&quot;&gt;Flashing Page&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/post33/bbimager_flash.webp&quot; alt=&quot;BeagleBoard Imager flashing page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;h1 id=&quot;update-beagleconnect-freedom-zephyr-devicetree&quot;&gt;Update BeagleConnect Freedom Zephyr devicetree&lt;/h1&gt;
&lt;p&gt;Currently, PWM and ADC support is absent in the based devicetree for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;BeagleConnect Freedom&lt;/a&gt;. This is due to the fact that I added PWM and ADC support quite recently. So, after some deliberation, I think it would be best to enable ADC and PWM in the base devicetree to make for an easier new user experience. It also allows running PWM and ADC-related tests in Twister. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/78667&quot;&gt;PR&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;beagleplay-cc1352-zephyr-support-updates&quot;&gt;BeaglePlay CC1352 Zephyr Support Updates&lt;/h1&gt;
&lt;p&gt;Zephyr support for &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleplay&quot;&gt;BeaglePlay CC1352P7&lt;/a&gt; has been a work in progress for a long time at this point. It was initially planned for v3.7.0, but sadly, it missed that deadline. Forward to the present, and it finally seems to be ready. The name for the target has changed to &lt;code&gt;beagleplay/cc1352p7&lt;/code&gt; to allow for future support for Zephyr on &lt;code&gt;M4/A53&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It already has the required approvals, so I hope it can be merged soon. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/64718&quot;&gt;PR&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;micropython-zephyr-mainline-port&quot;&gt;MicroPython Zephyr Mainline Port&lt;/h1&gt;
&lt;p&gt;Most BeagleBoard boards have some level of MicroPython support. However, since MicroPython usually tracks some stable versions of Zephyr, it can take a long time to add support for the board to upstream MicroPython. This often means by the time things get ready to be merged upstream, the fork with MicroPython is often unmaintained.&lt;/p&gt;
&lt;p&gt;After a discussion on MicroPython Discord, I decided to maintain a branch of MicroPython that tracks mainline Zephyr. This can serve as a jumping point for boards still in development or ones merged after the Zephyr version currently supported by MicroPython. Currently, the plan is to keep this branch as a draft PR. I will also keep the MicroPython support for new BeagleBoard boards in this fork until they are ready to be merged into the main branch.&lt;/p&gt;
&lt;p&gt;Here is the link to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15891&quot;&gt;draft PR&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, this series helps keep people updated about my work and attracts potential contributors.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/ayush1325/bb-imager-rs&quot;&gt;BeagleBoard Imager Rust Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/64718&quot;&gt;BeaglePlay CC1352P7 Zephyr PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/micropython/micropython/pull/15891&quot;&gt;MicroPython upstream Zephyr PR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Week in Code #1</title>
        <published>2024-09-15T00:30:12+05:30</published>
        <updated>2024-09-15T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post32/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post32/</id>
        
        <content type="html" xml:base="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post32/">&lt;p&gt;Hello everyone. I am starting a new series of weekly posts to go over stuff I worked on/found interesting over the week. I will try to post one every Sunday, but I might skip uneventful weeks.&lt;/p&gt;
&lt;p&gt;Since I work as an embedded systems engineer at BeagleBoard.org, many updates will be about BeagleBoard stuff. Still, I might throw some Rust std and other things in occasionally. Let&#39;s see how this goes.&lt;/p&gt;
&lt;h1 id=&quot;mikrobus-patches&quot;&gt;MikroBUS Patches&lt;/h1&gt;
&lt;p&gt;I finally sent v1 of &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20240911-mikrobus-dt-v1-0-3ded4dc879e7@beagleboard.org/&quot;&gt;MikroBUS patches&lt;/a&gt; using the approach described by &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/linux-arm-kernel/20240702164403.29067-1-afd@ti.com/&quot;&gt;Andrew Davis&lt;/a&gt;. I got the approach to work for GPIO, UART, and I2C but not for SPI.&lt;/p&gt;
&lt;p&gt;I wrote the driver in Rust to see how it would go, and it was a pretty good experience. Danilo Krummrich will post patches for platform device and driver abstractions for Rust, so any future patches will probably not need to carry those either.&lt;/p&gt;
&lt;p&gt;There is also a talk in LPC this week: &lt;a rel=&quot;external&quot; href=&quot;https://lpc.events/event/18/contributions/1696/&quot;&gt;Runtime hotplug on non-discoverable busses with device tree overlays&lt;/a&gt;, so I will be looking forward to it.&lt;/p&gt;
&lt;h1 id=&quot;beagle-y-ai-hacking-sessions&quot;&gt;Beagle-Y-AI Hacking Sessions&lt;/h1&gt;
&lt;p&gt;We at BeagleBoard have started weekly hacking sessions for Beagle-Y-AI. Currently, we are working on adding Zephyr support for the R5 core, so feel free to join in. Here is the &lt;a rel=&quot;external&quot; href=&quot;https://discord.gg/AGU2VXE3?event=1283128283000606751&quot;&gt;event invite&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;gpio-nexus-node-dtschema&quot;&gt;GPIO Nexus Node dtschema&lt;/h1&gt;
&lt;p&gt;In the MikroBUS patches, I was asked to put the GPIO nexus node dtschema in the upstream dtschema. So just a basic &lt;a rel=&quot;external&quot; href=&quot;https://github.com/devicetree-org/dt-schema/pull/143&quot;&gt;PR&lt;/a&gt; to add dtschema for GPIO nexus nodes.&lt;/p&gt;
&lt;h1 id=&quot;pwm-in-beagleplay&quot;&gt;PWM in BeaglePlay&lt;/h1&gt;
&lt;p&gt;While working on MikroBUS patches, I realized that PWM support was not enabled in the upstream device tree for BeaglePlay. So, I decided to send a &lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20240913-beagleplay-pwm-v1-1-d38ee5b36d8c@beagleboard.org&quot;&gt;patch&lt;/a&gt; to enable it.&lt;/p&gt;
&lt;p&gt;Once the patch is added to the kernel tree, it will be possible to use the PWM pin in the MikroBUS connector as described in &lt;a rel=&quot;external&quot; href=&quot;https://docs.kernel.org/driver-api/pwm.html&quot;&gt;Linux kernel docs&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;fix-microblocks-for-beagleconnect-freedom&quot;&gt;Fix MicroBlocks for BeagleConnect Freedom&lt;/h1&gt;
&lt;p&gt;Around two weeks ago, the CI &lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks&quot;&gt;MicroBlocks for BeagleConnect Freedom&lt;/a&gt; broke. After checking the CI logs, it seems &lt;a rel=&quot;external&quot; href=&quot;https://microblocks.fun/&quot;&gt;MicroBlocks&lt;/a&gt; started using &lt;a rel=&quot;external&quot; href=&quot;https://www.arduino.cc/reference/en/language/functions/external-interrupts/digitalpintointerrupt/&quot;&gt;digitalPinToInterrupt&lt;/a&gt;, which was missing in &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core&quot;&gt;Arduino Module for Zephyr&lt;/a&gt;. I created a &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core/pull/121&quot;&gt;PR&lt;/a&gt; for it, and now the CI is fixed again.&lt;/p&gt;
&lt;h1 id=&quot;ending-thoughts&quot;&gt;Ending Thoughts&lt;/h1&gt;
&lt;p&gt;That is all for the week. Hopefully, I can stick to the weekly schedule.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/#support-me&quot;&gt;supporting me&lt;/a&gt; if you like my work.&lt;/p&gt;
&lt;h1 id=&quot;helpful-links&quot;&gt;Helpful links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/all/20240911-mikrobus-dt-v1-0-3ded4dc879e7@beagleboard.org/&quot;&gt;MikroBUS Patches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://discord.gg/AGU2VXE3?event=1283128283000606751&quot;&gt;Beagle-Y-AI Hacking Sessions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/devicetree-org/dt-schema/pull/143&quot;&gt;GPIO Nexus Node dtschema PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://lore.kernel.org/r/20240913-beagleplay-pwm-v1-1-d38ee5b36d8c@beagleboard.org&quot;&gt;PWM in BeaglePlay Patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://openbeagle.org/beagleboard/microblocks&quot;&gt;MicroBlocks for BeagleConnect Freedom&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>MicroBlocks on Beagleconnect Freedom</title>
        <published>2024-06-15T00:30:12+05:30</published>
        <updated>2024-06-15T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post31/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post31/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I have been recently working on porting &lt;a rel=&quot;external&quot; href=&quot;https://microblocks.fun/&quot;&gt;MicroBlocks&lt;/a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beagleconnect-freedom&quot;&gt;Beagleconnect Freedom&lt;/a&gt;. This also involved work improving &lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/gsoc-2022-arduino-core&quot;&gt;Arduino module for Zephyr&lt;/a&gt; since &lt;a rel=&quot;external&quot; href=&quot;https://microblocks.fun/&quot;&gt;MicroBlocks&lt;/a&gt; uses Arduino APIs. I will go over using MicroBlocks on beagleconnect freedom.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>What is BeagleConnect Technology</title>
        <published>2024-01-19T00:30:12+05:30</published>
        <updated>2024-01-19T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post30/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post30/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I have been a bit busy these past few months working to improve BeagleConnect™ Technology. While this work initially started as a Google Summer of Code 2023 project, I am now working part-time on this. While not everything is completed, I felt this was a good point to go through an overview of it before I start creating demos (which are actually reproducable without having to approach me). So here it goes.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>UEFI Rust Std is now in Nightly</title>
        <published>2023-09-25T11:45:12+05:30</published>
        <updated>2023-09-25T11:45:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post29/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post29/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I started working on Rust Std for UEFI last year as a part of my Google Summer of Code 2022 project under Tianocore. My mentors for this project were Michael Kinney and Michael Kubacki. After a year of work, initial support for UEFI Rust std has been merged into upstream. In this post, I will review what is currently possible and my plans.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Summary Post</title>
        <published>2023-08-26T18:15:12+05:30</published>
        <updated>2023-08-26T18:15:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post28/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post28/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. This is the final blog post I will write before Google Summer of Code 2023 ends (hopefully not the final greybus one). In this post, I will summarize my GSoC23 work to make it more accessible to everyone.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: BeaglePlay Greybus Demo</title>
        <published>2023-07-26T23:40:12+05:30</published>
        <updated>2023-07-26T23:40:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post27/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post27/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. My project is now at a point where almost everything is working to a respectable level. Thus I wanted to do a demo. Check out my &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post21/&quot;&gt;GSoC 2023 Introduction post&lt;/a&gt; for more information about my project.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Project Status update</title>
        <published>2023-07-08T00:30:12+05:30</published>
        <updated>2023-07-08T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post26/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post26/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. It will soon be time for the Mid-term evaluation of Google Summer of Code 2023. Thus, I decided to write a post to summarise everything I have been working on. I will also go over how it can be replicated by anyone interested.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Concurrency in ZephyrRTOS</title>
        <published>2023-07-03T00:30:12+05:30</published>
        <updated>2023-07-03T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post25/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post25/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I am working on a CC1352 firmware for Zephyr. This will be responsible for SVC and AP Bridge role in the Greybus topology that Gbridge currently handles. Zephyr provides a lot of abstractions to write efficient concurrent code. I am going to discuss some of them in this post.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Linux Serial Device Bus</title>
        <published>2023-06-15T16:05:12+05:30</published>
        <updated>2023-06-15T16:05:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post24/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post24/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. The Linux driver I am working on will be a Serial Device Bus Driver. So in this post, I will review the critical components of writing a functional Linux Serial Device Bus driver.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Getting started with Zephyr for BeaglePlay CC1352</title>
        <published>2023-06-07T20:05:12+05:30</published>
        <updated>2023-06-07T20:05:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post23/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post23/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. In this post, I will go over setting up BeaglePlay and my Linux host for BeaglePlay CC1352 firmware development. Check out my &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post21/&quot;&gt;GSoC 2023 Introduction post&lt;/a&gt; for more information about my project.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC23: Writing a Hello World Driver for BeaglePlay</title>
        <published>2023-06-01T22:07:12+05:30</published>
        <updated>2023-06-01T22:07:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post22/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post22/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I will go over setting up BeaglePlay for Driver Development in this post. I will write a simple &quot;Hello World&quot; driver once BeaglePlay is set up to demonstrate this. Check out my &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post21/&quot;&gt;previous post&lt;/a&gt; for more information about my project.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC 2023 Introduction</title>
        <published>2023-05-22T19:07:12+05:30</published>
        <updated>2023-05-22T19:07:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post21/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post21/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I am Ayush Singh, a third-year student at the Indian Institute of Technology, Dhanbad, India. As a part of Google Summer of Code 2023, I will be working on Replacing GBridge under the &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/&quot;&gt;BeagleBoard.org&lt;/a&gt; organization. In this post, I will describe the project I will be working on.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Handling ExitBootServices Event in Rust std</title>
        <published>2023-04-07T16:07:12+05:30</published>
        <updated>2023-04-07T16:07:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post20/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post20/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. Recently, there was a discussion about the exact scope/boundary of Rust std for UEFI. In this post, I am going to go over the different stages of UEFI and define what std for UEFI aims to target. Additionally, I will go over how the current implementation handles &lt;code&gt;ExitBootServices()&lt;/code&gt;.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Compiler generate custom entry for any target</title>
        <published>2023-03-18T16:08:12+05:30</published>
        <updated>2023-03-18T16:08:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post19/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post19/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. While implementing Rust std for UEFI, I came across an interesting problem. The signature of the entry function in Rust did not match the UEFI entry signature. Initially, I just used a hacky way to get things to work. However, later I made some changes to upstream Rust to make generating entry functions with custom signatures much easier. In this post, I will show how to implement generating such an entry function in upstream Rust through the example of UEFI.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Minimal Rust Std for UEFI</title>
        <published>2023-03-15T19:01:12+05:30</published>
        <updated>2023-03-15T19:01:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post18/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post18/</id>
        
        <summary type="html">&lt;p&gt;It has been quite a while since I gave any updates about Rust std implementation for UEFI. While the Google Summer of Code ended quite a bit ago (it&#39;s almost time for GSoC 23), I have been continuing my efforts to merge it upstream. Check out my &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post16/&quot;&gt;GSoC 22 Summary Post&lt;/a&gt; for a refresher on the project.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Validating Json Request in axum</title>
        <published>2023-01-17T19:01:12+05:30</published>
        <updated>2023-01-17T19:01:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post17/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post17/</id>
        
        <summary type="html">&lt;p&gt;I have been playing around with &lt;a rel=&quot;external&quot; href=&quot;https://docs.rs/axum/latest/axum/index.html&quot;&gt;axum&lt;/a&gt;, and it has been quite a fun web framework. While using it, I came across what is a relatively common use case of validating the request JSON. However, I could not find any &lt;a rel=&quot;external&quot; href=&quot;https://docs.rs/axum/latest/axum/index.html#extractors&quot;&gt;extractor&lt;/a&gt; for this. Thus I decided to write my own and share it with everyone. While I haven&#39;t put it in a crate, feel free to use the code as you wish.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Rust main from custom entry point (Part 3)</title>
        <published>2022-10-27T22:22:12+05:30</published>
        <updated>2022-10-27T22:22:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post16/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post16/</id>
        
        <summary type="html">&lt;p&gt;Even though GSoC 2022 has ended, I am still working on getting &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/pull/100316&quot;&gt;Rust std PR&lt;/a&gt; merged into the master. In the initial PR, I still used the entry function described in the &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post7/&quot;&gt;prior post&lt;/a&gt;. However, this had many limitations, and thus I have finally transitioned to using a compiler-generated entry function.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC22: Summary Post</title>
        <published>2022-09-05T22:22:12+05:30</published>
        <updated>2022-09-05T22:22:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post15/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post15/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. This is probably the final blog post I write before Google Summer of Code 2022 ends (hopefully not the final uefi one). In this post, I will summarize my GSoC22 work to make it more accessible to everyone.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Writing UEFI Protocol in Rust</title>
        <published>2022-08-27T22:22:12+05:30</published>
        <updated>2022-08-27T22:22:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post14/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post14/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. As a part of Porting Rust std for UEFI, I had to write a hacky implementation of pipes (using UEFI Variables) for piping output from launched programs. However, this implementation had some problems and failed to run tests using the feature &lt;code&gt;panic_abort_tests&lt;/code&gt;. Since I had some time this week, I decided to write a Protocol to fix the pipes. Along the way, I also found many ways to shoot myself on foot. So I decided to write this post documenting all the gotchas I discovered while writing a new protocol in Rust. This post will only contain 1 of the two protocols I decided to create, internally named &lt;code&gt;UEFI_COMMAND_PROTOCOL&lt;/code&gt;.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>UEFI Rust std has a new home</title>
        <published>2022-08-05T20:44:12+05:30</published>
        <updated>2022-08-05T20:44:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post13/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post13/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. All my work on UEFI Rust std has been moved to &lt;a rel=&quot;external&quot; href=&quot;https://github.com/tianocore/rust&quot;&gt;tianocore/rust&lt;/a&gt;. This should help with allowing more contribution from both Tianocore and Rust&#39;s sides. This post is just a sort of introduction to the new repository and how to get started.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC 2022: Progress Report 2</title>
        <published>2022-07-24T02:38:12+05:30</published>
        <updated>2022-07-24T02:38:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post12/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post12/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. It is finally possible to run the whole Rust testing suit for UEFI under QEMU and OVMF. So I think this is a good point to give a detailed overview of everything that has been implemented and the state of those implementations. I will also provide instructions on how to go about running the tests as well.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Implementing Stdio for UEFI</title>
        <published>2022-07-08T00:53:12+05:30</published>
        <updated>2022-07-08T00:53:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post11/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post11/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. In this post, I will go through how I implemented the stdio module for UEFI. The implementation code can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/rust/blob/7f367e14f687a7d485c1d3410e2cf5e22df8f1ad/library/std/src/sys/uefi/stdio.rs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>GSoC 2022: Progress Report 1</title>
        <published>2022-06-29T00:53:12+05:30</published>
        <updated>2022-06-29T00:53:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post10/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post10/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. In this post, I will explain the current state of std implementation for UEFI. The rust repository containing my work can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/rust/tree/uefi-std-next&quot;&gt;here&lt;/a&gt;. In the end, we will use this fork to run a Rust binary.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Rust main from a custom entry point (Part 2)</title>
        <published>2022-06-25T22:28:12+05:30</published>
        <updated>2022-06-25T22:28:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post9/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post9/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. I will continue where I left off in &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post7/&quot;&gt;post&lt;/a&gt; with the Rust main in this post. Since we now have an allocator, the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/rust-lang/rust/blob/00ce47209dfdd8ef8871c6ec804f0e0e04d10702/library/std/src/rt.rs#L85&quot;&gt;&lt;code&gt;Thread::new&lt;/code&gt;&lt;/a&gt; statement at &lt;code&gt;library/std/src/rt.rs&lt;/code&gt; works. So we need to fix the line where we set the main thread with guard information. This will be a short post since it turned out easier than I initially thought.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Writing an Allocator for UEFI</title>
        <published>2022-06-23T16:45:12+05:30</published>
        <updated>2022-06-23T16:45:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post8/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post8/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone, we will discuss how to write the Allocator for UEFI in this post. More specifically, the Allocator is for the DEX phase in UEFI. We will be using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/uefi-spec-rs&quot;&gt;uefi-spec-rs&lt;/a&gt;, which is my wrapper around &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/r-efi&quot;&gt;r-efi&lt;/a&gt; for use in the std.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Rust main from a custom entry point</title>
        <published>2022-06-21T00:12:12+05:30</published>
        <updated>2022-06-21T00:12:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post7/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post7/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone. In this post, we will deep dive into the crux of the &lt;code&gt;main()&lt;/code&gt; function and look behind the scenes. By the end, we will have some understanding of Rust runtime. Primarily, I will describe my current implementation of &lt;code&gt;efi_main&lt;/code&gt; to hook into Rust runtime.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Use Restricted std in UEFI</title>
        <published>2022-06-16T00:00:00+00:00</published>
        <updated>2022-06-16T00:00:00+00:00</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post6/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post6/</id>
        
        <summary type="html">&lt;p&gt;Hello Everyone; in my last &lt;a href=&quot;https://4ac5b57e.programmers-hideaway.pages.dev/posts/post5/&quot;&gt;post&lt;/a&gt;, I set up the development environment for working on adding Rust support for UEFI. In this post, I will get a restricted version of std (basically a glorified core + alloc) to work for the x86_64 UEFI target. We will be starting with the &lt;code&gt;no_std&lt;/code&gt; hello_world program from the last post.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Google Summer of Code 2022</title>
        <published>2022-06-14T00:00:00+00:00</published>
        <updated>2022-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post5/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post5/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone, I am Ayush Singh, a second-year student at the Indian Institute of Technology, Dhanbad, India. As a part of Google Summer of Code 2022, I will be working on Adding Rust Support for building UEFI Applications and Modules under the Tianocore organization. In this post, I will describe this project&#39;s goals and set up my development environment.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using KConfig with Rust</title>
        <published>2022-03-14T22:19:49+05:30</published>
        <updated>2022-03-14T22:19:49+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post4/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post4/</id>
        
        <summary type="html">&lt;p&gt;Hello everyone, I am currently working on KConfig bindings for Rust as a part of the Season of KDE 2022. The wrappers for most of the significant aspects of KConfig are complete, so I decided to rewrite the &lt;a rel=&quot;external&quot; href=&quot;https://develop.kde.org/docs/use/configuration/introduction/&quot;&gt;Introduction to KConfig Docs&lt;/a&gt; in Rust. The bindings are still not stable and will probably change before the end of the Season of KDE. Still, this post should also help me test out the bindings outside tests. The kconfig bindings can be found &lt;a rel=&quot;external&quot; href=&quot;https://invent.kde.org/oreki/kconfig-rs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Bitflags in Rust</title>
        <published>2022-01-30T01:54:01+05:30</published>
        <updated>2022-01-30T01:54:01+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post3/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post3/</id>
        
        <summary type="html">&lt;p&gt;While working on Rust bindings for KConfig as a part of Season of KDE 2022, I came across a few problems while trying to represent &lt;a rel=&quot;external&quot; href=&quot;https://doc.qt.io/qt-5/qflags.html&quot;&gt;&lt;code&gt;QFlags&lt;/code&gt;&lt;/a&gt; in Rust:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Most &lt;code&gt;QFlags&lt;/code&gt; are defined as C++ enums in which multiple members can have the same value. This is not possible in Rust enum.&lt;/li&gt;
&lt;li&gt;It is possible to enable multiple flags using BitwiseOr. Rust enums cannot do bitwise operations.&lt;/li&gt;
&lt;/ol&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Season of KDE 2022</title>
        <published>2022-01-26T20:00:33+05:30</published>
        <updated>2022-01-26T20:00:33+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post2/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post2/</id>
        
        <summary type="html">&lt;p&gt;I am Ayush Singh, a second-year student of the Indian Institute of Technology, Dhanbad, India. My application has been accepted in the Season of KDE 2022. I will be working on writing a Rust wrapper for KConfig KDE Framework. This post describes my journey with KDE and why I submitted this Project for the Season of KDE.&lt;/p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating Rust/QML Project</title>
        <published>2022-01-22T12:00:33+05:30</published>
        <updated>2022-01-27T12:00:33+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://4ac5b57e.programmers-hideaway.pages.dev/posts/post1/"/>
        <id>https://4ac5b57e.programmers-hideaway.pages.dev/posts/post1/</id>
        
        <summary type="html">&lt;p&gt;For the last few months, I have been pushing Rust/Qt development along. I am the author of &lt;a rel=&quot;external&quot; href=&quot;https://github.com/Ayush1325/ki18n-rs&quot;&gt;ki18n&lt;/a&gt; crate and am currently in the middle of creating &lt;a rel=&quot;external&quot; href=&quot;https://invent.kde.org/oreki/kconfig-rs&quot;&gt;kconfig&lt;/a&gt; crate as a part of &lt;a rel=&quot;external&quot; href=&quot;https://season.kde.org/&quot;&gt;Season of KDE 2022&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this post, I will walk you through creating a new Rust/QML project using &lt;a rel=&quot;external&quot; href=&quot;https://github.com/cargo-generate/cargo-generate&quot;&gt;cargo-generate&lt;/a&gt; templates. I made these templates to encourage more people to test out Qt development with Rust.&lt;/p&gt;</summary>
        
    </entry>
</feed>
