<?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://programmershideaway.dev/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://programmershideaway.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-09-06T00:30:12+05:30</updated>
    <id>https://programmershideaway.dev/atom.xml</id>
    <entry xml:lang="en">
        <title>RISC-V Privilege Levels</title>
        <published>2026-09-06T00:30:12+05:30</published>
        <updated>2026-09-06T00:30:12+05:30</updated>
        
        <author>
          <name>Ayush Singh</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://programmershideaway.dev/posts/post71/"/>
        <id>https://programmershideaway.dev/posts/post71/</id>
        
        <content type="html" xml:base="https://programmershideaway.dev/posts/post71/">&lt;p&gt;Hello everyone. It has been a while since my last post. Recently, I encountered some missing
functionality in Zephyr that led me down a rabbit hole into RISC-V privilege levels. While I
was vageuly aware that CPUs have privilege levels, I never had any reason to get a deeper
understanding regarding the subject. Since I ended up working closely on something related to it,
I figured I should document things for my future self.&lt;/p&gt;
&lt;h1 id=&quot;background&quot;&gt;Background&lt;/h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/beaglev-fire&quot;&gt;BeagleV-Fire&lt;/a&gt; is a SBC by BeagleBoard.org with
&lt;a rel=&quot;external&quot; href=&quot;https://www.microchip.com/en-us/product/MPFS025T&quot;&gt;Microchip® Polarfire® MPFS025T&lt;/a&gt; SoC. Unlike most
other BeagleBoard.org boards, the initial Zephyr support for it was
&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/66389&quot;&gt;upstreamed&lt;/a&gt; by
&lt;a rel=&quot;external&quot; href=&quot;https://github.com/con-pax&quot;&gt;Conor Paxton&lt;/a&gt; rather than of me.&lt;/p&gt;
&lt;p&gt;Recently, I started exploring Zephyr on BeagleV-Fire, and found that the only supported way to boot
a Zephyr image was to build a custom image and
&lt;a rel=&quot;external&quot; href=&quot;https://docs.zephyrproject.org/latest/boards/beagle/beaglev_fire/doc/index.html#flashing&quot;&gt;write it to the board&#39;s eMMC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On boards like &lt;a rel=&quot;external&quot; href=&quot;https://www.beagleboard.org/boards/pocketbeagle-2&quot;&gt;PocketBeagle 2&lt;/a&gt;, I normally use
u-boot to launch the Zephyr firmware. Having the ability to use u-boot also allows loading firmware
over nfs or tftp, which makes development much faster. So I wanted a similar development setup for
BeagleV-Fire.&lt;/p&gt;
&lt;p&gt;Initially, I assumed it would come down to a few devicetree and Kconfig changes. However, I soon
discovered that Zephyr simply lacked the ability to launch in Supervisory mode in RISC-V. It always
assumed that it would be entered in Machine Mode, even with &lt;code&gt;RISCV_S_MODE&lt;/code&gt; set. All the option did
was to make Zephyr perform an M-mode to S-mode transition, and run a piece of code (a crude SBI
implementation) in M-Mode to service M-mode only functionality.&lt;/p&gt;
&lt;p&gt;In this post, I will go over the different privilege modes and why they are required.&lt;/p&gt;
&lt;h1 id=&quot;why-have-privilege-levels-at-all&quot;&gt;Why have privilege levels at all&lt;/h1&gt;
&lt;p&gt;The idea behind privilege levels is simple: code that is more trusted gets to touch more of the
machine. An application should not be able to reprogram the interrupt controller. A kernel should
not be able to accidentally reconfigure the memory protection that firmware set up around it. Each
level down the stack is handed a smaller machine than the one above it, and the boundaries are
enforced by hardware rather than by convention.&lt;/p&gt;
&lt;p&gt;There is a second, less obvious reason, and it is the one that matters most for this post:
&lt;em&gt;portability&lt;/em&gt;. Everything that is genuinely SoC specific, or that vendors can get wrong, can be
kept in a small firmware blob at the highest privilege level. The OS below it talks to that firmware
through a stable interface instead of poking vendor registers directly. On RISC-V that interface is
the &lt;a rel=&quot;external&quot; href=&quot;https://docs.riscv.org/reference/sbi/v3.0/index.html&quot;&gt;Supervisory Binary Interface&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;privilege-levels-in-risc-v&quot;&gt;Privilege levels in RISC-V&lt;/h1&gt;
&lt;p&gt;RISC-V defines three privilege modes:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Level&lt;/th&gt;&lt;th&gt;Encoding&lt;/th&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Abbreviation&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;&lt;code&gt;00&lt;/code&gt;&lt;/td&gt;&lt;td&gt;User/Application&lt;/td&gt;&lt;td&gt;U&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Supervisor&lt;/td&gt;&lt;td&gt;S&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;Reserved&lt;/em&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Machine&lt;/td&gt;&lt;td&gt;M&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Higher encoding means higher privilege.&lt;/p&gt;
&lt;p&gt;There is no CSR that tells you which mode you are currently running in. The current privilege level
is the internal state of the hart. Software is expected to already know, because in practice each
piece of software is &lt;em&gt;built&lt;/em&gt; for a particular level.&lt;/p&gt;
&lt;h2 id=&quot;machine-mode-m-mode&quot;&gt;Machine mode (M-mode)&lt;/h2&gt;
&lt;p&gt;M-mode is the highest privilege level and the only mandatory one. Every RISC-V hart comes out of
reset in M-mode. Code here has unrestricted access to the entire physical address space, every CSR,
and all of the platform hardware. Nothing below it can constrain it, and there is no mechanism to
sandbox it.&lt;/p&gt;
&lt;p&gt;This is where firmware lives: DDR and clock bring-up, errata workarounds, and the runtime that
serves the OS. Because M-mode cannot be restricted, the goal is to run as little as possible in it.&lt;/p&gt;
&lt;p&gt;For a small MCU-class RTOS, M-mode is often the &lt;em&gt;only&lt;/em&gt; mode implemented on the target, which is
exactly the world Zephyr was originally written for.&lt;/p&gt;
&lt;h2 id=&quot;supervisor-mode-s-mode&quot;&gt;Supervisor mode (S-mode)&lt;/h2&gt;
&lt;p&gt;S-mode is where an OS kernel runs: Linux, the BSDs, u-boot proper, and now Zephyr. It gets virtual
memory through &lt;code&gt;satp&lt;/code&gt; and the MMU, its own set of trap handling CSRs, its own interrupt enable and
pending bits, and access to whatever physical memory M-mode decided to leave open to it.&lt;/p&gt;
&lt;p&gt;What it does &lt;em&gt;not&lt;/em&gt; get is any view of M-mode. S-mode cannot read &lt;code&gt;mhartid&lt;/code&gt;, cannot write &lt;code&gt;mtvec&lt;/code&gt;.
As far as S-mode is concerned, those registers do not exist.&lt;/p&gt;
&lt;p&gt;S-mode is optional, and it is only meaningful together with U-mode. A system with S-mode but no
U-mode would have a kernel and nothing to isolate it from.&lt;/p&gt;
&lt;h2 id=&quot;user-mode-u-mode&quot;&gt;User mode (U-mode)&lt;/h2&gt;
&lt;p&gt;The least privileged level, where application code runs. U-mode has no trap CSRs of its own, so
every trap it takes is handled by a higher level. Paired with the MMU under S-mode this is what
gives you process isolation.&lt;/p&gt;
&lt;h2 id=&quot;the-csrs&quot;&gt;The CSRs&lt;/h2&gt;
&lt;p&gt;Most of the trap handling machinery exists twice, once per mode, with an &lt;code&gt;m&lt;/code&gt; or &lt;code&gt;s&lt;/code&gt; prefix:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;th&gt;M-mode&lt;/th&gt;&lt;th&gt;S-mode&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Status&lt;/td&gt;&lt;td&gt;&lt;code&gt;mstatus&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;sstatus&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Trap vector&lt;/td&gt;&lt;td&gt;&lt;code&gt;mtvec&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;stvec&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Exception PC&lt;/td&gt;&lt;td&gt;&lt;code&gt;mepc&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;sepc&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Trap cause&lt;/td&gt;&lt;td&gt;&lt;code&gt;mcause&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;scause&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Interrupt enable/pending&lt;/td&gt;&lt;td&gt;&lt;code&gt;mie&lt;/code&gt; / &lt;code&gt;mip&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;sie&lt;/code&gt; / &lt;code&gt;sip&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Scratch&lt;/td&gt;&lt;td&gt;&lt;code&gt;mscratch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;sscratch&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Address translation&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;&lt;code&gt;satp&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Hart ID&lt;/td&gt;&lt;td&gt;&lt;code&gt;mhartid&lt;/code&gt;&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;More CSRs exist, but I am only mentioning the ones I encountered during my work.&lt;/p&gt;
&lt;p&gt;The two asymmetric entries are the interesting ones. &lt;code&gt;satp&lt;/code&gt; only exists in S-mode, because M-mode
never uses address translation. And there is no &lt;code&gt;shartid&lt;/code&gt;, so an S-mode payload cannot ask the
hardware which hart it is running on. Instead, the RISC-V boot protocol hands the payload
&lt;code&gt;a0 = hartid&lt;/code&gt; and &lt;code&gt;a1 = DTB pointer&lt;/code&gt;, and it is expected to hold on to them.&lt;/p&gt;
&lt;p&gt;The access rule is worth stating explicitly, because it caused me some confusion. CSR address bits
&lt;code&gt;[9:8]&lt;/code&gt; encode the lowest privilege level allowed to access that CSR. Attempting to read &lt;code&gt;mhartid&lt;/code&gt;
from S-mode raises an illegal instruction exception. This is the reason why the Zephyr would just
throw an exception when I naively tried launching it from u-boot.&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. In a future post I will cover how a hart actually moves between these
modes, the Supervisor Binary Interface (SBI), openSBI, and how S-mode code talks to the firmware
sitting above it. After that, I will come back to BeagleV-Fire and go through what it took to make
Zephyr boot as an S-mode payload from u-boot.&lt;/p&gt;
&lt;p&gt;Consider &lt;a href=&quot;https://programmershideaway.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/boards/beaglev-fire&quot;&gt;BeagleV-Fire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.microchip.com/en-us/product/MPFS025T&quot;&gt;Microchip® Polarfire® MPFS025T&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/zephyrproject-rtos/zephyr/pull/113656&quot;&gt;Initial Zephyr S-mode only PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://docs.riscv.org/reference/isa/v20260120/priv/priv-index.html&quot;&gt;The RISC-V Instruction Set Manual, Volume II: Privileged Architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <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://programmershideaway.dev/posts/post70/"/>
        <id>https://programmershideaway.dev/posts/post70/</id>
        
        <content type="html" xml:base="https://programmershideaway.dev/posts/post70/">&lt;p&gt;Hello everyone. Today I will be going over getting Fedora Minimal Rawhide running on
&lt;a rel=&quot;external&quot; href=&quot;https://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 Fedora Minimal Rawhide (2025-12-28) build. Rawhide composes are pruned
after a few weeks, so that exact image is no longer available; the equivalent current build lives in
the &lt;a rel=&quot;external&quot; href=&quot;https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Spins/aarch64/images/&quot;&gt;Rawhide aarch64 Spins images
directory&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 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;/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://programmershideaway.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/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://programmershideaway.dev/posts/post69/"/>
        <id>https://programmershideaway.dev/posts/post69/</id>
        
        <content type="html" xml:base="https://programmershideaway.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/pocketbeagle_2.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://programmershideaway.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://programmershideaway.dev/posts/post68/"/>
        <id>https://programmershideaway.dev/posts/post68/</id>
        
        <content type="html" xml:base="https://programmershideaway.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&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;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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post67/"/>
        <id>https://programmershideaway.dev/posts/post67/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post66/"/>
        <id>https://programmershideaway.dev/posts/post66/</id>
        
        <content type="html" xml:base="https://programmershideaway.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-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;    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://programmershideaway.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://programmershideaway.dev/posts/post65/"/>
        <id>https://programmershideaway.dev/posts/post65/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post64/"/>
        <id>https://programmershideaway.dev/posts/post64/</id>
        
        <content type="html" xml:base="https://programmershideaway.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/pocketbeagle_2.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/pocketbeagle_2.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://programmershideaway.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://programmershideaway.dev/posts/post63/"/>
        <id>https://programmershideaway.dev/posts/post63/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post62/"/>
        <id>https://programmershideaway.dev/posts/post62/</id>
        
        <content type="html" xml:base="https://programmershideaway.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.org&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://programmershideaway.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://programmershideaway.dev/posts/post61/"/>
        <id>https://programmershideaway.dev/posts/post61/</id>
        
        <content type="html" xml:base="https://programmershideaway.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/pocketbeagle_2.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://programmershideaway.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://programmershideaway.dev/posts/post60/"/>
        <id>https://programmershideaway.dev/posts/post60/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post59/"/>
        <id>https://programmershideaway.dev/posts/post59/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post58/"/>
        <id>https://programmershideaway.dev/posts/post58/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post57/"/>
        <id>https://programmershideaway.dev/posts/post57/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post56/"/>
        <id>https://programmershideaway.dev/posts/post56/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post55/"/>
        <id>https://programmershideaway.dev/posts/post55/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post54/"/>
        <id>https://programmershideaway.dev/posts/post54/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post53/"/>
        <id>https://programmershideaway.dev/posts/post53/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post52/"/>
        <id>https://programmershideaway.dev/posts/post52/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post51/"/>
        <id>https://programmershideaway.dev/posts/post51/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post50/"/>
        <id>https://programmershideaway.dev/posts/post50/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post49/"/>
        <id>https://programmershideaway.dev/posts/post49/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post48/"/>
        <id>https://programmershideaway.dev/posts/post48/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post47/"/>
        <id>https://programmershideaway.dev/posts/post47/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post46/"/>
        <id>https://programmershideaway.dev/posts/post46/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post45/"/>
        <id>https://programmershideaway.dev/posts/post45/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post44/"/>
        <id>https://programmershideaway.dev/posts/post44/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post43/"/>
        <id>https://programmershideaway.dev/posts/post43/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post42/"/>
        <id>https://programmershideaway.dev/posts/post42/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post41/"/>
        <id>https://programmershideaway.dev/posts/post41/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post40/"/>
        <id>https://programmershideaway.dev/posts/post40/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post39/"/>
        <id>https://programmershideaway.dev/posts/post39/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post38/"/>
        <id>https://programmershideaway.dev/posts/post38/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post37/"/>
        <id>https://programmershideaway.dev/posts/post37/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post36/"/>
        <id>https://programmershideaway.dev/posts/post36/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post35/"/>
        <id>https://programmershideaway.dev/posts/post35/</id>
        
        <content type="html" xml:base="https://programmershideaway.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/index.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://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post34/"/>
        <id>https://programmershideaway.dev/posts/post34/</id>
        
        <content type="html" xml:base="https://programmershideaway.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#binary-blobs&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://programmershideaway.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://programmershideaway.dev/posts/post33/"/>
        <id>https://programmershideaway.dev/posts/post33/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post32/"/>
        <id>https://programmershideaway.dev/posts/post32/</id>
        
        <content type="html" xml:base="https://programmershideaway.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://docs.arduino.cc/language-reference/en/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://programmershideaway.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://programmershideaway.dev/posts/post31/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post30/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post29/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post28/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post27/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post26/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post25/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post24/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post23/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post22/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post21/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post20/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post19/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post18/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post17/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post16/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post15/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post14/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post13/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post12/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post11/"/>
        <id>https://programmershideaway.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/rust-lang/rust/blob/3f4a289016ed2c7ae351dd77c309ca17ecc1f87a/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://programmershideaway.dev/posts/post10/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post9/"/>
        <id>https://programmershideaway.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://programmershideaway.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://programmershideaway.dev/posts/post8/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post7/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post6/"/>
        <id>https://programmershideaway.dev/posts/post6/</id>
        
        <summary type="html">&lt;p&gt;Hello Everyone; in my last &lt;a href=&quot;https://programmershideaway.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://programmershideaway.dev/posts/post5/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post4/"/>
        <id>https://programmershideaway.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/features/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://programmershideaway.dev/posts/post3/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post2/"/>
        <id>https://programmershideaway.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://programmershideaway.dev/posts/post1/"/>
        <id>https://programmershideaway.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>
