<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Sadiq Jaffer</title><link href="https://www.toao.com/" rel="alternate"/><link href="https://www.toao.com/feeds/all.atom.xml" rel="self"/><id>https://www.toao.com/</id><updated>2026-06-07T20:36:57.724504+01:00</updated><entry><title>Free Hardware Performance Counters in OxCaml Runtime Events</title><link href="https://www.toao.com/blog/free-performance-counters-runtime-events" rel="alternate"/><published>2026-04-04T19:37:00+01:00</published><updated>2026-05-27T12:37:36.415573+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2026-04-04:/blog/free-performance-counters-runtime-events</id><summary type="html">&lt;p&gt;A prototype extending OxCaml's Runtime Events to sample hardware performance counters at span boundaries, letting you correlate IPC, cache misses and branch mispredictions with specific GC and program phases with overhead indistinguishable from noise.&lt;/p&gt;</summary><content type="html">&lt;p&gt;At ICFP in Singapore last year I had lunch with Stephen Dolan and we got talking about hardware performance counters. Specifically, about how useful it would be to have them integrated into OxCaml's Runtime Events so you could ask questions like "which phases of my program have the lowest instructions-per-clock?" or "what is causing my TLB misses?". This post covers a prototype I've been working on since then.&lt;/p&gt;
&lt;p&gt;OCaml's &lt;a href="https://ocaml.org/manual/5.3/runtime-tracing.html"&gt;Runtime Events&lt;/a&gt; already gives you lightweight tracing of GC phases and user-defined spans in every OCaml binary. The prototype extends this to sample user-specified hardware counters at the start and end of each span, so you get performance data for free alongside the events you were already collecting. This works for built-in runtime events but also for custom events you can add around any logical section in your own code. Since spans can be continuously consumed, you can gather performance counter data on specific program or runtime phases across large numbers of long-running services. The overhead is indistinguishable from noise.&lt;/p&gt;
&lt;h2&gt;Why hardware performance counters?&lt;/h2&gt;
&lt;p&gt;Modern CPUs look like they execute instructions sequentially, but underneath they're parallel execution engines, reordering and speculatively executing instructions across deep pipelines. Multiple tiers of cache hide the fact that main memory is hundreds of cycles away and a single CPU might have dozens of cores that all need their caches kept coherent. To expose what's really going on, CPUs provide hardware performance counters. My 'Alder Lake' Intel i7-12700F has hundreds of them&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;, covering everything from cache misses at each level to branch mispredictions to instructions retired.&lt;/p&gt;
&lt;p&gt;On Linux the standard way to access these is through perf. You can run &lt;code&gt;perf stat&lt;/code&gt; to get aggregate counter values for a whole program, or use &lt;code&gt;perf record -e ..&lt;/code&gt; to do sampling based on counter overflow, which gives you a profile showing which lines of code are responsible for the event you're monitoring&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;. These work well for standalone questions like finding the code causing the most L1 cache misses but they are unsuitable for continuous monitoring of long-running programs, and they can't easily correlate multiple counters with specific program phases, like asking which GC phases have the lowest instructions-per-clock.&lt;/p&gt;
&lt;p&gt;Runtime Events already traces GC phases and user-defined spans in every binary. It also supports Custom Events, which let you emit spans and counters from your own code. If we extend it to capture hardware counters at span boundaries, we get continuous monitoring of both the runtime and user code, correlating hardware performance with logical program phases on real production traffic.&lt;/p&gt;
&lt;h2&gt;The implementation&lt;/h2&gt;
&lt;p&gt;The implementation has two sides: changes to the C runtime to set up and sample the counters, and changes to the OCaml API to expose the samples to consumers.&lt;/p&gt;
&lt;h3&gt;Runtime&lt;/h3&gt;
&lt;p&gt;We need to call &lt;a href="https://man7.org/linux/man-pages/man2/perf_event_open.2.html"&gt;perf_event_open&lt;/a&gt; for each counter we want to monitor on every thread and domain, and clean up when threads and domains exit. To handle this we add domain_start/stop, thread_start/stop hooks in the appropriate places in systhreads, covering both newly spawned threads and existing threads being registered.&lt;/p&gt;
&lt;p&gt;When a Runtime Events span is started or stopped, we use &lt;a href="https://www.felixcloutier.com/x86/rdpmc"&gt;rdpmc&lt;/a&gt; to sample the counters and append the values to the event data as it's written to the ring buffer. &lt;code&gt;rdpmc&lt;/code&gt; takes around 20-40 cycles&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;, which is what makes the whole approach viable. That's very small compared to the useful work any span is doing.&lt;/p&gt;
&lt;p&gt;The sampling is cheap but the configuration interface is less elegant. Counters to monitor are specified via the &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS&lt;/code&gt; environment variable as a list of hex-encoded event codes and umasks. You need to look up the codes in the Intel Software Developer's Manual, from perfmon-events.intel.com or by running &lt;code&gt;perf list&lt;/code&gt; and extracting the event code from &lt;code&gt;perf stat -vv -e &amp;lt;counter name&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, to count instructions, cpu-cycles, L2 cache misses (l2_request.miss) and L3 cache misses (longest_lat_cache.miss) on a Performance Core of a 12th Gen Intel Core i3-1220P: &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS=r00c0,r003c,r3f24,r412e&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;OCaml API side&lt;/h3&gt;
&lt;p&gt;Consumers receive an additional &lt;code&gt;local_ perf_sample array&lt;/code&gt; parameter on &lt;code&gt;runtime_begin&lt;/code&gt; and &lt;code&gt;runtime_end&lt;/code&gt; callbacks. This is an array of unboxed int64 pairs: the event code from the environment variable and the current counter value, in the same order as specified. The same parameter is available on &lt;code&gt;add_user_event&lt;/code&gt; callbacks for custom events, and the samples are also accessible through the C API.&lt;/p&gt;
&lt;h2&gt;Taking it for a spin&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/ocaml-bench/sandmark/pull/480"&gt;ahrefs benchmarks&lt;/a&gt; from Sandmark exercise code used heavily by their crawler and are known to be memory intensive, which is what we want for correlating GC behaviour with hardware performance. I had Claude port four of them (htmlStream, network, gzip, stre) to OxCaml, fixing up dependencies and using Anil's &lt;a href="https://github.com/avsm/oxmono"&gt;Oxmono&lt;/a&gt; to create a monorepo. You can find the benchmarks and the code to run them here: &lt;a href="https://github.com/sadiqj/runtime-events-pmc-benchmarks"&gt;https://github.com/sadiqj/runtime-events-pmc-benchmarks&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;GC phases by instructions-per-clock&lt;/h3&gt;
&lt;p&gt;Across all four benchmarks I monitored instructions and cpu-cycles for every runtime event span. The table below shows GC phases ordered by their total cycles, with the 5th, 50th and 95th percentile instructions-per-clock (IPC).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th style="text-align: right;"&gt;N&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Cycles&lt;/th&gt;
&lt;th style="text-align: right;"&gt;%&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p5&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p50&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p95&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;major&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10,728&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.91B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;19.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.237&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.748&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.994&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_slice&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10,728&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.60B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;18.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.191&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.720&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.184&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stw_leader&lt;/td&gt;
&lt;td style="text-align: right;"&gt;11,760&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.76B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;11.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.541&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.486&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.249&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.59B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.650&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.955&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.917&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_remembered_set&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.49B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.709&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.112&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.378&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_mark&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2,622&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.38B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;9.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.612&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.639&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.029&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_remembered_set_promote&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.27B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;9.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.614&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.150&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.748&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_sweep&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,216&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.19B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.096&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.762&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.317&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_gc_cycle_domains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,689&lt;/td&gt;
&lt;td style="text-align: right;"&gt;288M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.917&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.706&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.359&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_local_roots&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;85M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.411&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.145&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.823&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_mark_roots&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,680&lt;/td&gt;
&lt;td style="text-align: right;"&gt;65M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.859&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.233&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_local_roots_promote&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;50M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.702&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.906&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.139&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_finalized&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;28M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.763&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.051&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.444&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_gc_stw&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,689&lt;/td&gt;
&lt;td style="text-align: right;"&gt;16M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.837&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.438&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.415&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The p5-to-p95 spread is wide across most phases. &lt;code&gt;major_sweep&lt;/code&gt; ranges from 0.10 to 4.32 IPC, which likely reflects variability in dense versus sparse shared heap pools. A sparse heap pool could be difficult to branch predict, leading to pipeline stalls and low IPC. The next step to investigate would be to add a runtime/custom events counter inside the sweeping code that emitted the occupancy of pools. This would tell you whether the issue is sparse or dense pools, or possibly even the number of pools swept within a &lt;code&gt;major_sweep&lt;/code&gt; phase.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;minor_local_roots&lt;/code&gt; and &lt;code&gt;major_mark_roots&lt;/code&gt; have the lowest median IPC at 1.15 and 1.23 respectively. Root scanning involves chasing pointers through the stack and globals which is unfriendly to caches and branch predictors, so low IPC is expected here.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;major_mark&lt;/code&gt; has the highest median IPC at 2.64, with a p95 of 5.03. Marking does more computation per memory access than sweeping or root scanning, so the CPU has more useful work to keep its pipelines busy. There was also significant optimisation work done by Stephen Dolan on &lt;a href="https://github.com/ocaml/ocaml/pull/10195"&gt;prefetching during marking&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since consumers get counter values at the start and end of every span, you aren't restricted to looking at aggregates. You can dump out individual traces and inspect them too:&lt;/p&gt;
&lt;div id="pmc_trace_embed" style="background:#1e1e2e;border-radius:8px;padding:16px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:#ccc;margin:16px 0"&gt;
&lt;div style="font-size:14px;font-weight:600;color:#ccccdd;margin-bottom:4px"&gt;htmlStream — GC pause (211.8us, 46 phases, IPC 2.91)&lt;/div&gt;
&lt;div style="display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:11px;color:#888"&gt;
&lt;span&gt;IPC:&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;
&lt;div style="width:180px;height:10px;border-radius:2px;background:linear-gradient(to right,rgb(217,46,38),rgb(217,115,31),rgb(191,153,13),rgb(128,173,38),rgb(51,166,51),rgb(26,140,115))"&gt;&lt;/div&gt;
&lt;span&gt;4.5+&lt;/span&gt;
&lt;/div&gt;
&lt;div style="position:relative;width:100%;height:196px;margin-bottom:24px"&gt;
&lt;div style="position:absolute;left:0.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;0ns&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:10.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;25us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:20.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;51us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:30.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;76us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:40.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;102us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:50.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;127us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:60.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;152us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:70.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;178us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:80.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;203us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:90.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;229us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:100.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;254us&lt;/span&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;128.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.902&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448,580&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;853,318&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.333%;width:50.547%;top:5px;height:28px;background:rgb(137,169,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader &amp;mdash; 128.5us &amp;mdash; IPC 1.90&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;112.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.020&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;391,068&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;789,888&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.461%;width:44.063%;top:36px;height:28px;background:rgb(125,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;minor &amp;mdash; 112.0us &amp;mdash; IPC 2.02&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;157ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.031&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;548&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;565&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;69.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;15.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.482%;width:0.250%;top:67px;height:28px;background:rgb(214,118,29);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;110.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.034&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;385,581&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;784,349&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.565%;width:43.447%;top:67px;height:28px;background:rgb(123,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_remembered_set &amp;mdash; 110.4us &amp;mdash; IPC 2.03&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;144ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.938&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;497&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;466&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;42.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.791%;width:0.250%;top:98px;height:28px;background:rgb(217,111,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;395ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.408&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,368&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;558&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;37.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.869%;width:0.250%;top:98px;height:28px;background:rgb(217,74,35);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;109.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.051&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;381,139&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;781,546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:9.047%;width:42.938%;top:98px;height:28px;background:rgb(122,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_rs_promo &amp;mdash; 109.1us &amp;mdash; IPC 2.05&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;975ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.734&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,408&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,500&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.036%;width:0.384%;top:67px;height:28px;background:rgb(217,97,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;124ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.057&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;463&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;30.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.349%;width:0.250%;top:98px;height:28px;background:rgb(213,120,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;148ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.106&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;521&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;38.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;15.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.543%;width:0.250%;top:36px;height:28px;background:rgb(210,123,26);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.479&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;30,110&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;44,543&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.641%;width:3.385%;top:36px;height:28px;background:rgb(191,152,13);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark_roots&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.335&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;239&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;558&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.050%;width:0.250%;top:36px;height:28px;background:rgb(101,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;59ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.103&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;213&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.113%;width:0.250%;top:36px;height:28px;background:rgb(118,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;130ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.960&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.157%;width:0.250%;top:36px;height:28px;background:rgb(217,112,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.774&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;243&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.229%;width:0.250%;top:36px;height:28px;background:rgb(154,164,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;122ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.360&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;417&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;567&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:58.618%;width:0.250%;top:36px;height:28px;background:rgb(197,143,17);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;58.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.092&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;204,841&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,043,135&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:58.924%;width:23.075%;top:5px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 58.6us &amp;mdash; IPC 5.09&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;51.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.545&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;180,720&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,002,028&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:59.052%;width:20.356%;top:36px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 51.7us &amp;mdash; IPC 5.54&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.673&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;175,121&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;993,492&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:59.091%;width:19.725%;top:67px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark &amp;mdash; 50.1us &amp;mdash; IPC 5.67&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;506ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.261&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,770&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,232&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:78.856%;width:0.250%;top:67px;height:28px;background:rgb(202,135,21);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.072&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;430&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:78.916%;width:0.250%;top:98px;height:28px;background:rgb(212,121,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_first&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.982&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;437&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;429&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.086%;width:0.250%;top:67px;height:28px;background:rgb(217,114,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;421ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.523&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,478&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,251&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.165%;width:0.250%;top:67px;height:28px;background:rgb(186,154,14);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;128ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.024&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;455&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;466&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.188%;width:0.250%;top:98px;height:28px;background:rgb(215,117,29);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_last&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.305&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;190&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.358%;width:0.250%;top:67px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.691&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22,286&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;37,690&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.449%;width:2.512%;top:36px;height:28px;background:rgb(164,161,23);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;154ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.047&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;536&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;561&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.476%;width:0.250%;top:67px;height:28px;background:rgb(214,119,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_cycle_domains&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.704&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20,477&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34,900&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.557%;width:2.306%;top:67px;height:28px;background:rgb(163,161,24);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.624&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9,974&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16,194&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;27.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.611%;width:1.124%;top:98px;height:28px;background:rgb(173,158,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;84ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.836&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;298&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;547&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.631%;width:0.250%;top:129px;height:28px;background:rgb(146,167,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;425ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.141&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,487&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,183&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.687%;width:0.250%;top:129px;height:28px;background:rgb(116,171,40);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.123&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;211&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.711%;width:0.250%;top:160px;height:28px;background:rgb(117,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.252&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;246&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.755%;width:0.250%;top:160px;height:28px;background:rgb(107,171,41);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.623&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;284&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;19.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.803%;width:0.250%;top:160px;height:28px;background:rgb(173,158,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;282ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;982&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,500&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.564%;width:0.250%;top:129px;height:28px;background:rgb(85,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.389&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;190&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;454&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.634%;width:0.250%;top:160px;height:28px;background:rgb(97,170,43);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;72ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.313&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;249&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.755%;width:0.250%;top:98px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.806%;width:0.250%;top:98px;height:28px;background:rgb(98,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.328&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;440&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.847%;width:0.250%;top:98px;height:28px;background:rgb(102,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.210&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;195&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.889%;width:0.250%;top:98px;height:28px;background:rgb(110,171,40);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;62ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.523&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;216&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;545&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.931%;width:0.250%;top:98px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_stw&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.664&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,634&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,704&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;59.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;14.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.982%;width:0.861%;top:98px;height:28px;background:rgb(168,160,22);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;430ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.916&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,497&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,371&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.024%;width:0.250%;top:5px;height:28px;background:rgb(217,109,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.771&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;82,995&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;312,971&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.372%;width:9.350%;top:5px;height:28px;background:rgb(38,152,83);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 23.8us &amp;mdash; IPC 3.77&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.787&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81,893&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;310,137&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.461%;width:9.227%;top:36px;height:28px;background:rgb(38,152,84);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 23.5us &amp;mdash; IPC 3.79&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_sweep&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.3us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.794&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81,524&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;309,294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.482%;width:9.185%;top:67px;height:28px;background:rgb(37,152,84);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_sweep &amp;mdash; 23.3us &amp;mdash; IPC 3.79&lt;/div&gt;
&lt;/div&gt;
&lt;div id="pmc_trace_embed_tt" style="display:none;position:fixed;background:#1a1a2a;border:1px solid #555;border-radius:6px;padding:8px 12px;font-size:12px;color:#ddd;line-height:1.6;pointer-events:none;z-index:9999;box-shadow:0 4px 16px rgba(0,0,0,0.5);max-width:320px;min-width:180px"&gt;&lt;/div&gt;
&lt;style&gt;
#pmc_trace_embed .pmc_trace_embed_bar:hover {
  filter: brightness(1.25);
  border-color: rgba(255,255,255,0.5) !important;
  z-index: 100;
}
&lt;/style&gt;
&lt;script&gt;
(function() {
  var tt = document.getElementById('pmc_trace_embed_tt');
  var active = null;
  var container = document.getElementById('pmc_trace_embed');
  container.addEventListener('mousemove', function(e) {
    var bar = e.target.closest('.pmc_trace_embed_bar');
    if (bar &amp;&amp; bar.dataset.tt) {
      if (bar !== active) {
        active = bar;
        tt.innerHTML = bar.dataset.tt;
      }
      tt.style.display = 'block';
      var pad = 14;
      var x = e.clientX + pad;
      var y = e.clientY + pad;
      var r = tt.getBoundingClientRect();
      if (x + r.width &gt; window.innerWidth - 8) x = e.clientX - r.width - pad;
      if (y + r.height &gt; window.innerHeight - 8) y = e.clientY - r.height - pad;
      tt.style.left = x + 'px';
      tt.style.top = y + 'px';
    } else if (active) {
      active = null;
      tt.style.display = 'none';
    }
  });
  container.addEventListener('mouseleave', function() {
    active = null;
    tt.style.display = 'none';
  });
})();
&lt;/script&gt;
&lt;/div&gt;

&lt;h2&gt;Beyond the GC — profiling your own code&lt;/h2&gt;
&lt;p&gt;Performance counters are also emitted for Custom Events. Adding a custom event around a section of code is straightforward:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nn"&gt;Runtime_events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nn"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;span_name&lt;/span&gt; &lt;span class="nc"&gt;Begin&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="c"&gt;(* your code here *)&lt;/span&gt;
&lt;span class="nn"&gt;Runtime_events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nn"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;span_name&lt;/span&gt; &lt;span class="nc"&gt;End&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We added custom events around each benchmark phase in the ahrefs benchmarks. This time I monitored L2 and last-level cache (LLC) misses alongside cycles. The table below shows LLC misses and L2 misses per 1,000 instructions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th style="text-align: right;"&gt;N&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Cycles&lt;/th&gt;
&lt;th style="text-align: right;"&gt;%&lt;/th&gt;
&lt;th style="text-align: right;"&gt;LLC/ki&lt;/th&gt;
&lt;th style="text-align: right;"&gt;L2/ki&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;bench:large_blocks&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;54.89B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;32.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:generational_violation&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;29.77B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;17.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:morphing_heap&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;14.81B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:complex_network_ops&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.62B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;5.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;12.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:variable_rate&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.49B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;1.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:range_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;7.99B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.2&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:attribute_lists&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.51B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:complex_references&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.83B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.4%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:fragmentation&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.50B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:cidr_calculations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.25B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:small_buffer_storm&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.21B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_size_patterns&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.99B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:compression_pipelines&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.63B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:ip_sorting&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.81B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:large_block_compression&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.61B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:split_storm&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.30B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:streaming_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.16B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:buffer_recycling&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.06B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:broadcast_calculations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;925M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:ipv4_parsing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;855M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:concurrent_style&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;553M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:small_strings&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;432M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:pattern_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;384M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_format_parsing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;350M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:nat_tables&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;250M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;1.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:headers_metadata&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;235M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:enum_string_ops&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;201M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_size_allocations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;201M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:string_building&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;127M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:transformation_chains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;94M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:concatenation_chains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;32M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:substring_slicing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most phases have very low LLC miss rates, well under 1.0 per 1,000 instructions. &lt;code&gt;bench:complex_network_ops&lt;/code&gt; is the exception at 5.6 LLC misses per 1,000 instructions, roughly 10x the rate of most other phases. Its L2 miss rate of 12.7 is also the highest in the table, so if you were chasing memory access patterns this is where you'd start.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bench:nat_tables&lt;/code&gt; stands out too. Its LLC miss rate of 1.1 is modest but its L2 miss rate of 10.7 is among the highest, suggesting a working set that fits in LLC but not in L2.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;perf&lt;/code&gt; alone you would need to run separate profiling passes for each counter and then try to correlate them with specific sections of your code. Here you get it all in one continuous stream.&lt;/p&gt;
&lt;p&gt;Like the runtime events, we can look at individual traces. Here are some operations from the gzip benchmark, showing user events alongside runtime ones. You can mouseover for more detail:&lt;/p&gt;
&lt;div id="pmc_custom_embed" style="background:#1e1e2e;border-radius:8px;padding:16px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:#ccc;margin:16px 0"&gt;
&lt;div style="font-size:14px;font-weight:600;color:#ccccdd;margin-bottom:4px"&gt;gzip / streaming_operations &amp;mdash; GC interrupting application sub-phases (284.7us, 54 spans)&lt;/div&gt;
&lt;div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;font-size:11px;color:#888"&gt;
&lt;span&gt;IPC:&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;
&lt;div style="width:160px;height:10px;border-radius:2px;background:linear-gradient(to right,rgb(217,46,38),rgb(217,115,31),rgb(191,153,13),rgb(128,173,38),rgb(51,166,51),rgb(26,140,115))"&gt;&lt;/div&gt;
&lt;span&gt;4.5+&lt;/span&gt;
&lt;span style="margin-left:12px;color:#666"&gt;thick border = application span&lt;/span&gt;
&lt;/div&gt;
&lt;div style="position:relative;width:100%;height:227px;margin-bottom:24px"&gt;
&lt;div style="position:absolute;left:0.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;0ns&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:10.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;28.5us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:20.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;56.9us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:30.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;85.4us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:40.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;113.9us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:50.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;142.3us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:60.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;170.8us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:70.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;199.3us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:80.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;227.7us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:90.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;256.2us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:100.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;284.7us&lt;/span&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:streaming_operations&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;91.6ms&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.685&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;391,713,260&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,443,358,299&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:0.000%;width:100.000%;top:5px;height:28px;background:rgb(39,154,79);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;streaming_operations &amp;mdash; 91.6ms &amp;mdash; IPC 3.68&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;32.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.898&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;142,196&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;412,150&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:0.000%;width:2.764%;top:36px;height:28px;background:rgb(59,166,49);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_w&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.778&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;57,198&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;158,882&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:2.855%;width:4.570%;top:36px;height:28px;background:rgb(68,167,48);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;43.2us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.988&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189,455&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;566,158&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:19.475%;width:15.163%;top:36px;height:28px;background:rgb(52,166,50);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_write &amp;mdash; 43.2us &amp;mdash; IPC 2.99&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.857&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;154,131&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;132,039&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;57.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.126%;width:12.330%;top:36px;height:28px;background:rgb(217,105,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader &amp;mdash; 35.1us &amp;mdash; IPC 0.86&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54,926&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24,670&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;80.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.254%;width:4.389%;top:67px;height:28px;background:rgb(217,77,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;minor&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;525ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.242&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,297&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;556&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;143.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.289%;width:0.250%;top:98px;height:28px;background:rgb(217,62,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.478&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;28,975&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13,863&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;75.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.488%;width:2.316%;top:98px;height:28px;background:rgb(217,79,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;131ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.799&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;577&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.528%;width:0.250%;top:129px;height:28px;background:rgb(217,101,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.525&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;335&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;511&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.589%;width:2.144%;top:129px;height:28px;background:rgb(185,154,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;112ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.923&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;494&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:37.750%;width:0.250%;top:129px;height:28px;background:rgb(217,110,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.381&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20,362&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,755&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;103.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;82.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:37.819%;width:1.626%;top:98px;height:28px;background:rgb(217,72,35);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.472&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,869&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,717&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;19.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:38.802%;width:0.628%;top:129px;height:28px;background:rgb(217,78,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;199ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.668&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;876&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;585&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:39.658%;width:0.250%;top:67px;height:28px;background:rgb(217,92,33);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.003&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39,171&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39,294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:39.795%;width:3.137%;top:67px;height:28px;background:rgb(216,116,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark_roots&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;52ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.560&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:42.947%;width:0.250%;top:67px;height:28px;background:rgb(84,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.277&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;47,434&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60,576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;62.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:43.022%;width:3.799%;top:67px;height:28px;background:rgb(201,137,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_finalized&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;116ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.861&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;511&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;440&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.836%;width:0.250%;top:67px;height:28px;background:rgb(217,106,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;49ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.079&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;216&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.892%;width:0.250%;top:67px;height:28px;background:rgb(120,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;699ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.181&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,061&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.950%;width:0.250%;top:67px;height:28px;background:rgb(217,58,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.251&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56,705&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70,957&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;18.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.509%;width:4.531%;top:36px;height:28px;background:rgb(203,135,21);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.998&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;29,512&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;29,464&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.625%;width:2.359%;top:67px;height:28px;background:rgb(216,115,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.095&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,579&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13,780&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.668%;width:1.005%;top:98px;height:28px;background:rgb(211,123,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;359ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.423&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,578&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,246&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.815%;width:0.250%;top:98px;height:28px;background:rgb(194,148,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;111ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.000&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;532&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;532&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.838%;width:0.250%;top:129px;height:28px;background:rgb(216,115,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_first&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;130ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.768&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;570&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.993%;width:0.250%;top:98px;height:28px;background:rgb(217,99,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.624&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.060%;width:0.581%;top:98px;height:28px;background:rgb(173,158,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.822&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;258&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;470&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.558%;width:0.250%;top:129px;height:28px;background:rgb(148,166,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_last&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.307&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;186&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;429&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.699%;width:0.250%;top:98px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.527&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24,899&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;38,010&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.016%;width:1.992%;top:67px;height:28px;background:rgb(185,154,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;160ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.825&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;691&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;570&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;43.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.066%;width:0.250%;top:98px;height:28px;background:rgb(217,103,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_cycle_domains&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.564&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22,524&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35,229&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.135%;width:1.802%;top:98px;height:28px;background:rgb(180,156,16);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.952&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4,763&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9,295&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.185%;width:0.380%;top:129px;height:28px;background:rgb(131,171,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;52ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.471&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;556&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.200%;width:0.250%;top:160px;height:28px;background:rgb(91,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;312ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.315&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,373&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,178&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.232%;width:0.250%;top:160px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;44ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.249%;width:0.250%;top:191px;height:28px;background:rgb(98,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.518&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;220&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.279%;width:0.250%;top:191px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;46ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.271&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;203&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.311%;width:0.250%;top:191px;height:28px;background:rgb(106,171,41);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;359ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.942&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,572&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,053&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.356%;width:0.250%;top:160px;height:28px;background:rgb(132,171,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.900&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;239&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;454&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.449%;width:0.250%;top:191px;height:28px;background:rgb(138,169,33);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;240&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;585&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.581%;width:0.250%;top:129px;height:28px;background:rgb(93,169,43);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;55ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.822&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;241&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;439&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.617%;width:0.250%;top:129px;height:28px;background:rgb(148,166,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.525&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;183&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;462&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.652%;width:0.250%;top:129px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;42ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.540&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;480&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.680%;width:0.250%;top:129px;height:28px;background:rgb(86,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;48ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.760&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4,450&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,833&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.710%;width:0.250%;top:129px;height:28px;background:rgb(155,164,26);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_stw&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.228&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10,385&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,753&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;55.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:51.091%;width:0.827%;top:129px;height:28px;background:rgb(204,133,22);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;176ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.780&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;770&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,371&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.062%;width:0.250%;top:36px;height:28px;background:rgb(153,164,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.301&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;158,001&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;205,491&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.314%;width:12.646%;top:36px;height:28px;background:rgb(200,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 36.0us &amp;mdash; IPC 1.30&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;156,797&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;202,816&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;71.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.380%;width:12.543%;top:67px;height:28px;background:rgb(201,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 35.7us &amp;mdash; IPC 1.29&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_sweep&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.298&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;155,538&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;201,906&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;71.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.429%;width:12.445%;top:98px;height:28px;background:rgb(200,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_sweep &amp;mdash; 35.4us &amp;mdash; IPC 1.30&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.232&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56,472&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126,047&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:65.080%;width:4.524%;top:36px;height:28px;background:rgb(109,171,41);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;113,951&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;404,019&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:76.195%;width:9.114%;top:36px;height:28px;background:rgb(42,156,73);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_write 3.55&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.571&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;45,839&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;117,873&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:85.457%;width:3.672%;top:36px;height:28px;background:rgb(83,168,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.230&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;151,590&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;489,568&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:95.399%;width:4.601%;top:36px;height:28px;background:rgb(47,162,60);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_w&lt;/div&gt;
&lt;/div&gt;
&lt;div id="pmc_custom_embed_tt" style="display:none;position:fixed;background:#1a1a2a;border:1px solid #555;border-radius:6px;padding:8px 12px;font-size:12px;color:#ddd;line-height:1.6;pointer-events:none;z-index:9999;box-shadow:0 4px 16px rgba(0,0,0,0.5);max-width:320px;min-width:180px"&gt;&lt;/div&gt;
&lt;style&gt;#pmc_custom_embed .pmc_custom_embed_bar:hover { filter:brightness(1.25);border-color:rgba(255,255,255,0.6) !important;z-index:100; }&lt;/style&gt;
&lt;script&gt;
(function(){
  var tt=document.getElementById('pmc_custom_embed_tt'),active=null,
      el=document.getElementById('pmc_custom_embed');
  el.addEventListener('mousemove',function(e){
    var bar=e.target.closest('.pmc_custom_embed_bar');
    if(bar&amp;&amp;bar.dataset.tt){
      if(bar!==active){active=bar;tt.innerHTML=bar.dataset.tt;}
      tt.style.display='block';
      var p=14,x=e.clientX+p,y=e.clientY+p,r=tt.getBoundingClientRect();
      if(x+r.width&gt;window.innerWidth-8)x=e.clientX-r.width-p;
      if(y+r.height&gt;window.innerHeight-8)y=e.clientY-r.height-p;
      tt.style.left=x+'px';tt.style.top=y+'px';
    }else if(active){active=null;tt.style.display='none';}
  });
  el.addEventListener('mouseleave',function(){active=null;tt.style.display='none';});
})();
&lt;/script&gt;
&lt;/div&gt;

&lt;h2&gt;How expensive is it?&lt;/h2&gt;
&lt;p&gt;Each benchmark was run three ways: with runtime events off entirely, with runtime events on but no performance counters, and with runtime events on and four performance counters. Each configuration was run 20 times, pinned to a single P-core on my i3-1220p server, measuring wall-clock time.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Baseline&lt;/th&gt;
&lt;th&gt;Events Overhead&lt;/th&gt;
&lt;th&gt;PMC Overhead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;htmlStream&lt;/td&gt;
&lt;td&gt;29.26 +/- 0.16s&lt;/td&gt;
&lt;td&gt;-0.0% [-0.5, 0.3]&lt;/td&gt;
&lt;td&gt;+0.0% [-0.5, 0.5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stre&lt;/td&gt;
&lt;td&gt;5.32 +/- 0.04s&lt;/td&gt;
&lt;td&gt;+0.1% [-0.4, 1.1]&lt;/td&gt;
&lt;td&gt;+0.5% [-0.0, 1.5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;network&lt;/td&gt;
&lt;td&gt;6.03 +/- 0.16s&lt;/td&gt;
&lt;td&gt;+0.1% [-1.1, 0.5]&lt;/td&gt;
&lt;td&gt;+0.0% [-0.6, 1.0]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;td&gt;2.79 +/- 0.02s&lt;/td&gt;
&lt;td&gt;+0.3% [-0.2, 0.9]&lt;/td&gt;
&lt;td&gt;+0.4% [-1.6, 1.6]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The 5th and 95th percentiles are in square brackets. In every case the range crosses zero, which means the overhead is not distinguishable from noise. The numbers confirm what the cycle counts predict, that &lt;code&gt;rdpmc&lt;/code&gt; adds around 30 cycles per counter per span. Even with four counters that's roughly 120 cycles at each span boundary, which is tiny compared to the work any GC phase is doing. The longest benchmark here runs for nearly 30 seconds.&lt;/p&gt;
&lt;p&gt;This makes it practical to leave performance counters enabled on long-running services and collect hardware-level data continuously.&lt;/p&gt;
&lt;h2&gt;Trying it yourself&lt;/h2&gt;
&lt;p&gt;Note that this is currently x86-only and Linux-only since it relies on &lt;code&gt;rdpmc&lt;/code&gt; and &lt;code&gt;perf_event_open&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To install the prototype, create an opam switch from the branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;opam&lt;span class="w"&gt; &lt;/span&gt;switch&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;oxcaml-dev&lt;span class="w"&gt; &lt;/span&gt;--empty
opam&lt;span class="w"&gt; &lt;/span&gt;pin&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-ny&lt;span class="w"&gt; &lt;/span&gt;git+https://github.com/sadiqj/oxcaml#runtime_events_pmc
opam&lt;span class="w"&gt; &lt;/span&gt;switch&lt;span class="w"&gt; &lt;/span&gt;set-invariant&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;--packages&lt;span class="w"&gt; &lt;/span&gt;oxcaml-dev
&lt;span class="nb"&gt;eval&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;opam&lt;span class="w"&gt; &lt;/span&gt;env&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Build your program as normal. To specify which counters to monitor, set &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS&lt;/code&gt; with the hex event codes as described above.&lt;/p&gt;
&lt;p&gt;You'll also need a consumer to read the events. There's &lt;a href="https://github.com/sadiqj/runtime-events-pmc-benchmarks/tree/main/examples"&gt;an example consumer&lt;/a&gt; in the benchmarks repo that connects to a running program given its executable directory and PID, and writes a CSV of all events with their durations and counter values.&lt;/p&gt;
&lt;p&gt;If you try it out, &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;let me know&lt;/a&gt; what you find.&lt;/p&gt;
&lt;h2&gt;Next steps&lt;/h2&gt;
&lt;p&gt;This is a prototype and isn't merged upstream to OxCaml yet. There are a few things I want to address before proposing it:&lt;/p&gt;
&lt;p&gt;The counter configuration needs to be less clunky. Requiring hex event codes works but ideally you'd be able to specify counters by name, similar to how &lt;code&gt;perf&lt;/code&gt; lets you write &lt;code&gt;cache-misses&lt;/code&gt; instead of &lt;code&gt;r412e&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The API could also be cleaner. Right now the performance samples are passed as an additional parameter on every callback, which makes the signature noisier even when you don't care about counters.&lt;/p&gt;
&lt;p&gt;I'd like to explore the arm64 equivalents. arm64 has comparable facilities through the PMU.&lt;/p&gt;
&lt;p&gt;Finally it would be worth extending &lt;a href="https://github.com/tarides/runtime_events_tools"&gt;Olly&lt;/a&gt; to support collecting the counters and pushing them through to traces, which would make this accessible without writing a custom consumer.&lt;/p&gt;
&lt;p&gt;Longer term, the fact that the overhead is negligible means you could leave counters enabled across an entire fleet of services. Aggregating hardware counter data across hundreds of instances would let you ask questions that are impossible on a single machine, like which program phases have the worst cache behaviour on a specific microarchitecture, or whether certain workloads cause specific GC phases to degrade.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;In reality it has nearly twice as many because there's one set for the P-cores and one set for the E-cores - you have to be reasonably careful to pin to a specific set of cores.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;This isn't entirely true because as we mentioned earlier, modern CPUs are parallel execution engines, so what does it even mean when an event happens but there's 100s of instructions in-flight? Sometimes we've already executed a number of instructions before the interrupt that captures the stack. A subset of the Intel counters are able to more precisely determine their causing instruction. I recommend &lt;a href="https://easyperf.net/blog/2018/06/08/Advanced-profiling-topics-PEBS-and-LBR"&gt;these&lt;/a&gt; &lt;a href="https://travisdowns.github.io/blog/2019/08/20/interrupts.html"&gt;articles&lt;/a&gt;.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Agner Fog has cycle counts in his excellent &lt;a href="https://www.agner.org/optimize/instruction_tables.pdf"&gt;data tables&lt;/a&gt;&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="posts"/></entry><entry><title>Earth Observation on a Budget: Finding Solar Farms with a 42k-Parameter Model</title><link href="https://www.toao.com/blog/earth-observation-budget-solar-farms-tiny-model" rel="alternate"/><published>2026-01-14T17:38:00+00:00</published><updated>2026-05-27T12:37:36.415573+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2026-01-14:/blog/earth-observation-budget-solar-farms-tiny-model</id><summary type="html">&lt;p&gt;Satellite imagery analysis doesn't always require massive data and compute. We show how to combine open data from OpenStreetMap and the UK Government's Renewable Energy Planning database with Tessera foundation model embeddings to map solar farms across the UK using a lightweight neural network.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Solar farms are expanding rapidly across the UK, but keeping track of where they are, and when they appeared, isn't straightforward. In this post, we'll map them using satellite imagery and a surprisingly small neural network with only ~42k parameters.&lt;/p&gt;
&lt;p&gt;We're going to do this using the &lt;a href="https://arxiv.org/abs/2506.20380"&gt;Tessera foundation model&lt;/a&gt;, a pre-trained AI model that already understands satellite imagery in a similar way to how Large Language Models 'understand' text. Using Tessera is a little different from a Large Language Model in that you don't interact with the model directly but rather use pre-generated embeddings for the areas you want to analyse. These embeddings are available at 10m resolution and form a rich summary of that point on Earth's light and radar reflectance over a calendar year, its temporal-spectral characteristics.&lt;/p&gt;
&lt;p&gt;We actually used Tessera when we went &lt;a href="https://toao.com/blog/can-we-really-see-brambles-from-space"&gt;hunting brambles&lt;/a&gt; a few months back. In that instance, we created a pixel-wise model to predict whether a specific 10-meter square contained brambles. This is very easy to do with the &lt;a href="https://anil.recoil.org/notes/geotessera-python-0-7"&gt;efficient sampling support in Geotessera&lt;/a&gt; and works fine when the entity is defined purely by its surface temporal-spectral characteristics. But what if the entity you are looking for is defined by its shape and surroundings? For example, a single pixel might be asphalt but whether it is part of a car park or a road must take into consideration its surroundings. In this post we're going to classify solar farms, which exhibit this property. Despite having similar spectral characteristics what separates a solar farm pixel from a rooftop solar install is the size and shape of the solar panels &lt;em&gt;around&lt;/em&gt; them.&lt;/p&gt;
&lt;p&gt;We could simply classify whether a 1km tile contains a solar farm. However, it's usually more useful to map the exact shape of the farm pixel-by-pixel. This technique is called semantic segmentation, a specific type of &lt;em&gt;dense prediction&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So step one, we need to find some solar farms. For this we use two data sources: &lt;a href="https://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt; and the UK government's &lt;a href="https://www.gov.uk/government/publications/renewable-energy-planning-database-monthly-extract"&gt;Renewable Energy Planning Database&lt;/a&gt;. We join the OSM solar farm polygons with the REPD to find farms that have an operational date in REPD or a start date in OSM before 2024, this helps filter out farms built in 2024 or 2025. We want to find solar farms that existed throughout 2024.&lt;/p&gt;
&lt;p&gt;Now we have a set of solar farm polygons, we need to divide this into train, validation and test sets. For this we use a 25km checkerboard split with roughly 78%, 11% and 11% train, validation and test respectively. We split this way to avoid leaking data from partial and neighbouring polygons. This results in 760 train polygons, 112 validation and 118 test.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/checkerboard_split.png" alt="Checkerboard spatial split pattern"&gt;
&lt;figcaption&gt;Checkerboard spatial split pattern&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We then produce a set of tiles around each polygon, each 160x160 (so 1.6km x 1.6km). As the Tessera embedding is 128 dimensions, this effectively gives us 128 channel images. Here are a couple with just the first 3 channels of the Tessera embeddings.&lt;/p&gt;
&lt;style&gt;
.img-hover-swap { position: relative; display: inline-block; }
.img-hover-swap img { transition: opacity 0.2s; }
.img-hover-swap img:last-child { position: absolute; top: 0; left: 0; opacity: 0; }
.img-hover-swap:hover img:last-child { opacity: 1; }
.img-hover-swap:hover img:first-child { opacity: 0; }
&lt;/style&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000000_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000000_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000001_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000001_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000002_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000002_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000003_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000003_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000004_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000004_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000005_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000005_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000006_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000006_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000007_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000007_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000008_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000008_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For training targets, we have a binary true/false for each pixel in the image depending on whether it is contained within a solar farm polygon or not.&lt;/p&gt;
&lt;p&gt;Now we have these tiles we can train a model using them. For this we use a &lt;a href="https://en.wikipedia.org/wiki/Convolutional_neural_network"&gt;Convolutional Neural Network&lt;/a&gt; (CNN), specifically a &lt;a href="https://en.wikipedia.org/wiki/U-Net"&gt;UNet&lt;/a&gt;. This network design has an encoder-bottleneck-decoder structure with skip connections between the stages and crucially lets us do dense prediction, that is, gives us a prediction at every point. We use a &lt;a href="https://github.com/sadiqj/tessera-cnn-example/blob/blog_post/models.py#L161-L164"&gt;nano-sized UNet configuration&lt;/a&gt;, which is only ~42k parameters. It may seem surprising to use such a small model but we've found the richness of Tessera's embeddings means we often don't need very large models. Smaller models mean fewer parameters to fit and in general, less training data. They're also much faster to train, this nano-sized model can be trained in about 15 minutes on CPU alone.&lt;/p&gt;
&lt;p&gt;To train the model we use &lt;a href="https://github.com/sadiqj/tessera-cnn-example/blob/main/train.py#L36-L45"&gt;a combination of the Dice loss and the Binary Cross Entropy (BCE) loss&lt;/a&gt;. The Dice loss encourages the model to overlap the predicted solar farm regions with our ground-truth regions whilst BCE penalises the model pixel-by-pixel for being wrong, this &lt;a href="https://arxiv.org/abs/2312.05391"&gt;survey paper&lt;/a&gt; has a list of all the possible losses one could use and their properties. We also apply label smoothing (a technique that makes the model less confident in its predictions), which helps it tolerate labelling errors, the kind we probably have through our assumptions about the negatives surrounding solar farms as well as any missing solar farms in OSM that might be in our training tiles.&lt;/p&gt;
&lt;p&gt;A final trick is that we 'stretch' our training data through augmentations: random cropping, flipping, and rotating the tiles. This forces the model to learn the essential features of solar farms rather than memorising specific orientations or positions. I was concerned that the orientation of solar panels was actually a strong signal and the rotational and flip augmentations would be harmful but they seem to give a small benefit instead.&lt;/p&gt;
&lt;p&gt;Training this takes less than 4 minutes on a Ryzen 9950X + NVIDIA RTX 5090 machine. I'm fairly sure this could go faster with a bit more optimisation. To evaluate the model we focus on the Intersection-over-Union (IoU) which measures the overlap between the model's prediction and the ground truth and divides this by their combined union. The trained model reaches 0.76 IoU on the evaluation set, with a precision of 0.80 and recall of 0.93, which isn't bad at all for a model where we've had to make some strong assumptions around our training data.&lt;/p&gt;
&lt;p&gt;Now we have a small trained model, we can use it to do inference. I've run the model over 2017-2024 in the UK. Here's some animations showing growth of solar farms (many of these existed before 2017) in Cornwall and Devon:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/cornwall_3_solar_farms.webp" alt="Solar farms 2017-2024 in Cornwall"&gt;
&lt;figcaption&gt;Solar farms 2017-2024 in Cornwall&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/devon_solar_farms.webp" alt="Solar farms 2017-2024 in Devon"&gt;
&lt;figcaption&gt;Solar farms 2017-2024 in Devon&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;small&gt;(Both of the above use cloudfree composites from https://s2maps.eu by EOX IT Services GmbH which contains modified Copernicus Sentinel data 2017-2024)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Here's a picture of a chunk of England and Wales, the black areas are solar farms the model identified:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/solar_england.png" alt="Solar farms detected by the model across England and Wales"&gt;
&lt;figcaption&gt;Solar farms detected by the model across England and Wales&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can also download the &lt;a href="/static/uk_solar_farms.geojson"&gt;model-generated geojson for the whole of the UK&lt;/a&gt;, though this has not been validated and almost certainly contains some level of false positives.&lt;/p&gt;
&lt;p&gt;Lastly, inferring tiles that are not in the train/validation/test set has revealed a few detected solar farms that don't seem to be in OSM. Determining that is tricky from Sentinel 2 alone, once we have access to a higher resolution source of imagery we should submit the missing ones.&lt;/p&gt;
&lt;p&gt;This demonstrates that effective Earth observation doesn't necessarily require massive compute resources. By leveraging the rich, compressed information in Tessera's embeddings, we were able to train a model with only ~42k parameters to identify solar farms across the UK.&lt;/p&gt;
&lt;p&gt;There's a general recipe here for using Tessera to detect almost anything that's visible from space:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Get your Ground Truth&lt;/em&gt;: Start with a dataset of polygons for the thing you want to find. We used OpenStreetMap and the REPD, but you could use any GIS database or even hand-label a small region.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Split Spatially&lt;/em&gt;: Don't just split your data randomly into train/validation/test sets. Use a spatial split (like our 25km checkerboard) to ensure your model learns to generalize rather than just memorizing the landscape. This is especially important when you are doing classification in very dense areas and where entities can end up very close to each other.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Start with the smallest model you can, it may surprise you&lt;/em&gt;: As we saw in our solar farm example, even a ~42k parameter model produced good results. We found in our &lt;a href="https://arxiv.org/abs/2506.20380"&gt;Tessera paper&lt;/a&gt; even linear models performed reasonably. This makes inference very cheap, when inferring over large landscapes you may find your bottleneck is actually bandwidth.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Give it a go and &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;let me know&lt;/a&gt; what you find.&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Three Steps for OCaml to Crest the AI Humps</title><link href="https://www.toao.com/blog/ai-existential-ocaml" rel="alternate"/><published>2025-10-24T17:38:00+01:00</published><updated>2025-10-24T22:42:52.428295+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-10-24:/blog/ai-existential-ocaml</id><summary type="html">&lt;p&gt;OCaml represents less than 0.01% of training data for many large language models, creating an existential threat for the language community. This talk outlines three concrete steps the OCaml community can take to improve AI coding agent support and ensure the language's future relevance.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I gave the talk "Three Steps for OCaml to Crest the AI Humps" at the 2025 OCaml Workshop at ICFP/SPLASH. In it I discussed the challenges and opportunities for OCaml in the age of AI coding assistants.&lt;/p&gt;
&lt;p&gt;You can find a &lt;a href="https://youtu.be/Xh5PNe0SxDY?t=24014"&gt;video of the talk here&lt;/a&gt;. There's also an &lt;a href="/static/papers/ocaml-workshop2025-abstract.pdf"&gt;extended abstract&lt;/a&gt;. This blog post has a copy of the slides along with some commentary taken from the speaker notes and other links.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-03.png" alt="Slide 3"&gt;
&lt;figcaption&gt;OCaml in training data: ~0.003% of The Stack v2&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;OCaml represents approximately 0.003% of The Stack v2, a major code corpus used for training large language models. Compare this to Python, which makes up about 8% of the same dataset. There are consequences for having so little data available..&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-04.png" alt="Slide 4"&gt;
&lt;figcaption&gt;5x performance difference between Python and OCaml&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The disparity translates in a difference in problem solving ability between languages. &lt;a href="https://dl.acm.org/doi/10.1145/3689735"&gt;Cassano et al&lt;/a&gt; found a 5x difference in Pass@1 HumanEval performance using Starcoder 15B between OCaml and Python. This performance gap has real consequences for developer productivity.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-05.png" alt="Slide 5"&gt;
&lt;figcaption&gt;An existential threat to smaller language communities&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The gap between coding agent performance on mainstream versus niche languages could prove fatal to smaller language communities. New developers increasingly judge a programming language not just on its traditional tooling (compilers, debuggers, libraries) but also on how well AI coding agents support it. If agents struggle with OCaml, fewer new developers will choose to learn it, creating a vicious cycle.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-06.png" alt="Slide 6"&gt;
&lt;figcaption&gt;Three steps forward&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Rather than accept this fate, there are concrete steps the OCaml community can take to improve AI agent support. The talk outlines three actionable strategies that work together to address the training data gap and knowledge accessibility problems.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-07.png" alt="Slide 7"&gt;
&lt;figcaption&gt;Step 1: Where are the deficiencies?&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The first step is to systematically determine where AI agents are deficient for your specific, real-world use cases. You can't improve what you don't measure, and generic benchmarks might not capture the specific ways your community uses the language.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-08.png" alt="Slide 8"&gt;
&lt;figcaption&gt;Define success for your use case&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;To measure agent performance, you first need to define what "well" means for your particular use case. Everyone has different use cases e.g sync vs async, hosted vs local, fine-tunable.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-09.png" alt="Slide 9"&gt;
&lt;figcaption&gt;Our specific needs&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For our evaluation at Cambridge, we had specific requirements: the models needed to run locally or on university servers (no reliance on external APIs), support teaching environments (helping students learn, not just solving problems), be reproducible and have provenance, and be fine-tunable for our specific needs.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-10.png" alt="Slide 10"&gt;
&lt;figcaption&gt;Our benchmark approach&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We chose to evaluate models using the first-year Computer Science Jupyter exercises ("ticks") from Cambridge's Foundations of Computer Science course. These exercises measure introductory CS problem-solving skills in OCaml and are directly relevant to our use case of supporting student learning. The exercises test concepts like recursion, data structures, and streams.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-11.png" alt="Slide 11"&gt;
&lt;figcaption&gt;Example: Finding subscripts of even elements&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This slide shows an actual exercise from the benchmark. Students need to write a function &lt;code&gt;getSubsOfEvens&lt;/code&gt; that returns the subscript positions of even integers in an array. The notebook provides test cases and automatically checks solutions - the same setup we used for evaluating AI models.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-12.png" alt="Slide 12"&gt;
&lt;figcaption&gt;More exercises: Binary trees and sets&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The exercises cover a range of computer science fundamentals. Here we see problems involving binary search tree operations (intersection) and set operations (remove). These test both algorithmic thinking and familiarity with OCaml's syntax and type system.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-13.png" alt="Slide 13"&gt;
&lt;figcaption&gt;Results: Model parameter count vs. success rate&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We benchmarked 19 different open-weight models, from 7B to 70B parameters. Within a family, larger models generally perform better, but there are interesting outliers. The Qwen3 family of models consistently perform well especially when using "thinking" mode. Claude-3.7-Sonnet (96.4%) sits at the top as our reference point for proprietary models.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-14.png" alt="Slide 14"&gt;
&lt;figcaption&gt;Key finding: Qwen3 performance with reasoning&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Qwen3-32b with thinking mode achieved 94.2% success rate, nearly matching Claude-3.7 Sonnet's 96.4%. Without thinking mode, the same model scores only 62.4%. This demonstrates that reasoning significantly improves performance on OCaml tasks, and that, on this task, self-hostable models can achieve near-frontier performance when given space to reason. The cost is increased latency and higher token usage.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-15.png" alt="Slide 15"&gt;
&lt;figcaption&gt;Common mistakes AI models make&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Smaller models frequently make syntax errors. Type system confusion is very common - using integer operators (like &lt;code&gt;+&lt;/code&gt;) on floats is a recurring issue. Models hallucinate functions that don't exist in the standard library, such as &lt;code&gt;List.sub&lt;/code&gt; or &lt;code&gt;List.combinations&lt;/code&gt;, and often assume the Core library or Format module are available when they're not. Recursion errors are also frequent: forgetting the &lt;code&gt;rec&lt;/code&gt; keyword, using incorrect base cases, or failing to make recursive progress.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-16.png" alt="Slide 16"&gt;
&lt;figcaption&gt;Step 2: Contribute to benchmarks&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Once you've identified deficiencies for your use cases, the second step is to contribute those tasks to public benchmarks. This is how you signal to AI labs what matters to your community.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-17.png" alt="Slide 17"&gt;
&lt;figcaption&gt;Add OCaml use cases to public benchmarks&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;AI organizations report performance on public benchmarks like &lt;a href="https://www.swebench.com/"&gt;SWE-bench&lt;/a&gt; and &lt;a href="https://github.com/laude-institute/terminal-bench"&gt;terminal-bench&lt;/a&gt; when releasing new models. They actively train their models to improve on these benchmarks. By adding OCaml-specific tasks that you care about to these benchmarks, you create an incentive for labs to improve their OCaml capabilities. If OCaml tasks are on the benchmark, models will get better at OCaml.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-18.png" alt="Slide 18"&gt;
&lt;figcaption&gt;Example: OCaml GC bug fix task&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As a concrete example, I spend a significant amount of time debugging the garbage collector in OCaml and I found frontier models were still very poor at aiding me do that. So I contributed a task to terminal-bench that requires an agent to debug a segmentation fault in the OCaml garbage collector. In hindsight I worry this was a short-sighted career move (since I'm teaching agents to replace my debugging work).&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-19.png" alt="Slide 19"&gt;
&lt;figcaption&gt;What the GC debugging task requires&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The task is genuinely difficult and tests multiple capabilities: (1) build the OCaml compiler and runtime, (2) reproduce a GC failure, (3) debug with gdb, (4) patch C code, and (5) verify the fix. Completing this requires reading HACKING.adoc to understand the build system, navigating OCaml's runtime C code, and using debugging tools effectively - exactly the kind of complex, multi-step reasoning we want agents to excel at.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-20.png" alt="Slide 20"&gt;
&lt;figcaption&gt;The agents are finding it challenging&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The task is proving quite difficult for agents. As evidenced by these GitHub PRs, the timeout for the fix-ocaml-gc task has been increased multiple times because agents are struggling to complete it within the time limit. This is actually good - it means the task is pushing the boundaries of current agent capabilities and driving improvement.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-21.png" alt="Slide 21"&gt;
&lt;figcaption&gt;Continuous effort required&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Contributing to benchmarks isn't a one-time activity. It needs to be done constantly because benchmarks eventually get "saturated" (models overfit to them) or are leaked into new training sets. The community needs to continuously create new, challenging tasks that represent real OCaml development work to maintain pressure on AI labs to improve their OCaml support.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-22.png" alt="Slide 22"&gt;
&lt;figcaption&gt;Step 3: Tools and documentation&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The third step addresses the immediate problem: even if we can't add more OCaml to training data, we can bridge the knowledge gap by providing good agent-friendly tools and documentation. This can compensate for the lack of training exposure.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-23.png" alt="Slide 23"&gt;
&lt;figcaption&gt;Two complementary approaches&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;There are two main approaches: agent-friendly documentation and tools built on the Model Context Protocol (MCP). Documentation needs to be clean and parseable, while tools give agents the ability to search, discover, and navigate the OCaml ecosystem programmatically.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-24.png" alt="Slide 24"&gt;
&lt;figcaption&gt;What humans see: clean documentation&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;When we visit ocaml.org documentation, we see nicely formatted pages with the information we need. The HTML rendering makes it easy for humans to navigate and understand the API documentation.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-25.png" alt="Slide 25"&gt;
&lt;figcaption&gt;What agents see: HTML soup&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The problem is that when an agent accesses the same documentation, it sees a mix of content and messy HTML markup. This wastes valuable space in the model's limited context window and makes it harder to extract the relevant information. The signal-to-noise ratio is terrible for agents trying to understand OCaml APIs.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-26.png" alt="Slide 26"&gt;
&lt;figcaption&gt;What we should provide: clean markdown&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The solution is to provide clean, markdown-only versions of documentation. This gives agents the information they need without the HTML clutter. Recent improvements to odoc have merged the capability to generate markdown output, and emerging standards like LLMs.txt files provide additional ways to make documentation agent-accessible.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-27.png" alt="Slide 27"&gt;
&lt;figcaption&gt;odoc-llm: MCP tools for OCaml&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Beyond documentation, we can provide tools that agents can actively use. Along with &lt;a href="https://jon.recoil.org"&gt;Jon Ludlam&lt;/a&gt; I've built a prototype called odoc-llm that uses the Model Context Protocol to give agents a set of tools for interacting with the OCaml ecosystem. These tools allow agents to search for packages by functionality, get concise summaries of modules, and search through local project documentation using Sherlocode. This is critical for helping agents discover and use packages they were never trained on. The search uses a hybrid dense and sparse approach. Finding functionality in the OCaml ecosystem is genuinely hard, even for humans.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-28.png" alt="Slide 28"&gt;
&lt;figcaption&gt;Recap: Three actionable steps&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;To summarize: the OCaml community can fight back against the existential threat posed by poor AI agent support through three concrete steps. First, determine where agents are deficient for your specific use cases through systematic evaluation. Second, contribute those use cases to public benchmarks to incentivize AI labs to improve. Third, bridge the knowledge gap with agent-friendly documentation and tools that compensate for the lack of training data. With these steps we can try to close the performance gap.&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Can a model trained on satellite data really find brambles on the ground?</title><link href="https://www.toao.com/blog/can-we-really-see-brambles-from-space" rel="alternate"/><published>2025-09-24T21:04:00+01:00</published><updated>2025-10-24T17:15:44.264542+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-09-24:/blog/can-we-really-see-brambles-from-space</id><summary type="html">&lt;p&gt;Can a model trained on satellite data really find brambles on the ground? We put a new model to the test with a field trip around Cambridge. The results were surprisingly good and taught us a lot about the model's strengths and weaknesses.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Over the summer &lt;a href="https://gabrielmahler.org"&gt;Gabriel Mahler&lt;/a&gt; has been conducting research on &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/07/04/hedgehogs01.html"&gt;hedgehog habitat mapping&lt;/a&gt; using &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/07/13/hedgehogs02.html"&gt;Agent Based Models (ABMs)&lt;/a&gt; and remote sensing. Hedgehogs seem to like &lt;a href="https://en.wikipedia.org/wiki/Rubus"&gt;brambles&lt;/a&gt; and so as part of his work he has produced a &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/08/07/summer5.html"&gt;bramble map&lt;/a&gt;. He did this by combining the &lt;a href="https://arxiv.org/abs/2506.20380"&gt;TESSERA earth representation embeddings&lt;/a&gt; (using the &lt;a href="https://github.com/ucam-eo/geotessera"&gt;geotessera&lt;/a&gt; library) with data from &lt;a href="https://www.inaturalist.org/"&gt;iNaturalist&lt;/a&gt;. The current model is an ensemble of &lt;a href="https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html"&gt;logistic regression&lt;/a&gt; and a &lt;a href="https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html"&gt;knn&lt;/a&gt; classifier.&lt;/p&gt;
&lt;p&gt;Can we really see brambles from space? What better way to test the model than a quick field trip around Cambridge. Gabriel, &lt;a href="https://anil.recoil.org/"&gt;Anil&lt;/a&gt;, &lt;a href="https://www.shaneweisz.com/"&gt;Shane&lt;/a&gt; and I did just that today.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_140445.jpg" alt="Gabriel's model overlaid on a map - which was quite hard to read in outdoor sunlight"&gt;
&lt;figcaption&gt;Gabriel's model overlaid on a map - which was quite hard to read in outdoor sunlight&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We started at Milton Community Centre, as the model was relatively confident there were brambles near the car park and along the path to Milton Park. It took us about 20 seconds to find the first one in an area indicated by the model.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_130422.jpg" alt="Our first bramble!"&gt;
&lt;figcaption&gt;Our first bramble!&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;So it turns out that there's a lot of bramble between the community center and entrance to Milton Country Park. We stopped six or seven times before reaching the park entrance. While the model predicted we'd find brambles all over the park, we went for the few areas of very high confidence near the entrance. In every place we checked, we found pretty significant amounts of bramble.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_131517.jpg" alt="Some bramble on both sides of the path near the park entrance"&gt;
&lt;figcaption&gt;Some bramble on both sides of the path near the park entrance&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/4bad2b6d-8b50-476d-9626-108ae1533a90_1_105_c.jpeg" alt="Trying to navigate using the model"&gt;
&lt;figcaption&gt;Trying to navigate using the model&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/b268335a-6128-4ffa-8895-d1eb4eabc224_1_105_c.jpeg" alt="I was fairly sure it was that way"&gt;
&lt;figcaption&gt;I was fairly sure it was in that direction (and thankfully it was)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We collected photos of all the places we stopped, as well as recording our GPS location. One thought while out exploring is that the model did a great job predicting where we would find very large quantities of bramble without any cover. It didn't have high confidence in other areas where we found smaller brambles under partial cover. Since TESSERA is learned representation from remote sensing data (Sentinel 1 and 2), it would make sense that bramble partially obscured from above might be harder to spot. This is something we can potentially tease apart when we have more validation data.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_131651.jpg" alt="And more bramble"&gt;
&lt;figcaption&gt;And more bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/20250924_130606.jpg" alt="Stopping to check the model"&gt;
&lt;figcaption&gt;Stopping to check the model&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/20250924_134801.jpg" alt="Stopping to take a photo of a very photogenic bee"&gt;
&lt;figcaption&gt;Stopping to take a photo of a very photogenic bee&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Finally, we were satisfied the model was doing a good job in the park area and decided to pick a hotspot the model was predicting in part of a residential street. We drove over to find an empty plot that did indeed have a lot of bramble!&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_141728.jpg" alt="Empty area that had a lot of bramble"&gt;
&lt;figcaption&gt;Empty area that had a lot of bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Another hotspot was on Fen Road and we stopped by to find this absolute unit:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_140247.jpg" alt="Absolute unit of bramble"&gt;
&lt;figcaption&gt;Absolute unit of bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Finally, we headed back in to Cambridge to see what one of the big hotspots in North Cambridge was like. To our amusement we ended up at the local nature reserve Bramblefields, which, true to its name, has a lot of bramble.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_143514.jpg" alt="Bramblefields"&gt;
&lt;figcaption&gt;Bramblefields&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I was pleasantly surprised by how good Gabriel's model was for its simplicity. Great work!&lt;/p&gt;
&lt;p&gt;We had hoped to actually re-run the model based on the data we were gathering but that proved tricky on a laptop, in a park. Given the richness of the TESSERA embeddings and the simplicity of the classifiers being used, a mobile phone-based human-in-the-loop active learning setup could be practical..&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Adding an OCaml GC debugging task to terminal-bench</title><link href="https://www.toao.com/blog/gc-debug-terminal-bench" rel="alternate"/><published>2025-08-20T10:01:00+01:00</published><updated>2026-06-07T20:36:57.724504+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-08-20:/blog/gc-debug-terminal-bench</id><summary type="html">&lt;p&gt;I stumbled onto &lt;a href="https://www.tbench.ai/"&gt;terminal-bench&lt;/a&gt; a few weeks ago while researching datasets to evaluate agents. It contains around 120 tasks that need to be completed using a terminal..&lt;/p&gt;</summary><content type="html">&lt;p&gt;I stumbled onto &lt;a href="https://www.tbench.ai/"&gt;terminal-bench&lt;/a&gt; a few weeks ago while researching datasets to evaluate agents. It contains around 120 tasks that need to be completed using a terminal, they range from easy things like &lt;a href="https://github.com/harbor-framework/terminal-bench/tree/1a6ffa9674b571da0ed040c470cb40c4d85f9b9b/original-tasks/fix-permissions"&gt;fixing permissions&lt;/a&gt; to more tricky things like &lt;a href="https://github.com/harbor-framework/terminal-bench/tree/1a6ffa9674b571da0ed040c470cb40c4d85f9b9b/original-tasks/fix-git"&gt;finding lost changes in git&lt;/a&gt; and &lt;a href="https://github.com/harbor-framework/terminal-bench/tree/1a6ffa9674b571da0ed040c470cb40c4d85f9b9b/original-tasks/install-windows-xp"&gt;installing windows xp (!)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To that collection, we can now add a freshly-merged task focused on finding and fixing &lt;a href="https://github.com/harbor-framework/terminal-bench/tree/1a6ffa9674b571da0ed040c470cb40c4d85f9b9b/original-tasks/fix-ocaml-gc"&gt;a bug in the OCaml GC&lt;/a&gt;. This task is designed to be difficult; it involves a subtle change that isn't obvious at first pass even for experts and mirrors a similar real issue I encountered earlier in the year. Solving it requires interactive debugging.&lt;/p&gt;
&lt;p&gt;As more model providers report performance on terminal-bench, it's a great opportunity to add tasks for common development workflows that aren't currently covered. This could include more native debugging tasks, as well as some general sysadmin tasks - though the latter might be tricky because the containers tasks run in are unprivileged. I'm sure &lt;a href="https://www.tunbury.org/"&gt;Mark Elvers&lt;/a&gt; has some good ideas..&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Last three months in OCaml (July 2025)</title><link href="https://www.toao.com/blog/ocaml-0725" rel="alternate"/><published>2025-07-15T10:01:00+01:00</published><updated>2025-11-16T13:16:17.738686+00:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-07-15:/blog/ocaml-0725</id><summary type="html">&lt;p&gt;A look at recent OCaml projects, from benchmarking AI code models and building new agentic tools to improvements in the garbage collector.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Thanks to sponsorship from &lt;a href="https://www.tarides.com"&gt;Tarides&lt;/a&gt; I've been able to spend some time over the last few months hacking on various OCaml-related projects. Some of these I've already published as blog posts, while others are still works in progress but this post gives brief summaries and ties some of them together for a bigger picture.&lt;/p&gt;
&lt;h1&gt;AI Coding Agents&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://jon.recoil.org/"&gt;Jon Ludlam&lt;/a&gt;, &lt;a href="https://anil.recoil.org/"&gt;Anil Madhavapeddy&lt;/a&gt; and I have spent a fair amount of time thinking broadly about AI coding agents. In addition to this post it's worth checking this &lt;a href="https://www.cl.cam.ac.uk/~avsm2/2025-ocaml-ai-draft1.pdf"&gt;short draft paper&lt;/a&gt; we've written that summaries our work so far and our thoughts for what could be needed going forward for OCaml to work well with AI tooling.&lt;/p&gt;
&lt;h2&gt;Benchmarking&lt;/h2&gt;
&lt;p&gt;Anil and Jon lecture the first year &lt;a href="https://www.cl.cam.ac.uk/teaching/2425/FoundsCS/"&gt;Foundation of Computer Science&lt;/a&gt; here at Cambridge, so we &lt;a href="https://toao.com/blog/ocaml-local-code-models"&gt;tested how well self-hostable models performed on first year coding exercises&lt;/a&gt;. We found the Qwen3 models were very effective, rivaling much bigger and older models. We plan to do some more benchmarking, especially as we've heard good things from community members about newer models like &lt;a href="https://mistral.ai/news/devstral"&gt;Mistral's devstral&lt;/a&gt; which has &lt;a href="https://mistral.ai/news/devstral-2507"&gt;just been updated&lt;/a&gt;. Before we can do that though, we want to build a more extensive set of benchmarks. A step in that direction is &lt;a href="https://toao.com/blog/opam-archive-dataset"&gt;opam-archive-dataset&lt;/a&gt; which is a continuously-updated parquet dataset of all source code in opam. We've also been looking at &lt;a href="https://arxiv.org/abs/2504.14757"&gt;SWE-Synth&lt;/a&gt; and how we would apply a similar method for synthesising across community OCaml projects.&lt;/p&gt;
&lt;h2&gt;Agentic tooling&lt;/h2&gt;
&lt;p&gt;There are coding models that we can't modify ourselves&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; and which users access remotely. Nearly all agents using these coding models support tool use through the &lt;a href="https://modelcontextprotocol.io/introduction"&gt;Model Context Protocol&lt;/a&gt;. We've started working on a tool &lt;a href="https://github.com/sadiqj/odoc-llm"&gt;odoc-llm&lt;/a&gt; which enables natural language search of functionality over all packages and libraries in opam - in a way that can be hosted centraly as a remote MCP server. It's still a work in progress and Jon is planning to write something more extensive once we've fixed the last few issues. We've mentioned a few other potential tools in the &lt;a href="https://www.cl.cam.ac.uk/~avsm2/2025-ocaml-ai-draft1.pdf"&gt;draft piece&lt;/a&gt; and if anyone in the community is working on any of them or would like to collaborate then please do get in touch!&lt;/p&gt;
&lt;p&gt;I've also been exploring using simple collaboration between coding models and created &lt;a href="https://github.com/sadiqj/check-with-gemini"&gt;a very simple MCP server&lt;/a&gt; that lets you use gemini-cli as tool in another agent. Mostly I use this to have Claude Code call Gemini to check it's work - this can be helpful for tasks that involve analysing larger code bases where Gemini's larger context window is useful.&lt;/p&gt;
&lt;h1&gt;The OCaml runtime&lt;/h1&gt;
&lt;p&gt;In addition to the forward-looking work around AI models I've also been doing a bit of runtime maintenance. The &lt;a href="https://github.com/ocaml/ocaml/pull/13616"&gt;change to the shared heap's free list representation&lt;/a&gt; has gone through two stages of review and should land fairly soon. We're just waiting on some final performance testing before merging.&lt;/p&gt;
&lt;p&gt;I had a fun debugging session with &lt;a href="https://janmidtgaard.dk/"&gt;Jan Midtgaard&lt;/a&gt; trying to figure out what could have caused &lt;a href="https://github.com/ocaml/ocaml/issues/13739"&gt;ocaml issue 13739&lt;/a&gt;. It turned out that terminating domains could orphan shared pools in parallel with a running stop-the-world section, which was unexpected and bad as it could lead to a segfault or memory corruption if you were very unfortunate. &lt;a href="https://gallium.inria.fr/~scherer/"&gt;Gabriel Scherer&lt;/a&gt; fixed this in &lt;a href="https://github.com/ocaml/ocaml/pull/14025"&gt;ocaml pr 14025&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lastly with the GC there is the long-running compactor unification between the &lt;a href="https://github.com/ocaml/ocaml/blob/trunk/runtime/shared_heap.c#L1066"&gt;trunk ocaml compactor&lt;/a&gt; and &lt;a href="https://github.com/oxcaml/oxcaml/blob/main/runtime/shared_heap.c#L2166"&gt;OxCaml compactor&lt;/a&gt;&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;. The OxCaml compactor is a bit more expensive than trunk but plays much better with virtual memory. This helps reduce memory usage and improve performance in large, long-running applications. I suspect proposing the OxCaml compactor for trunk will be something worth doing next quarter.&lt;/p&gt;
&lt;p&gt;Finally, there have a number of &lt;a href="https://github.com/ocaml/ocaml/pull/14035"&gt;small&lt;/a&gt; &lt;a href="https://github.com/ocaml/ocaml/pull/13970"&gt;fixes&lt;/a&gt; &lt;a href="https://github.com/ocaml/ocaml/pull/13785"&gt;to&lt;/a&gt; runtime events. It's nice to see these and new feature requests appearing.&lt;/p&gt;
&lt;h2&gt;Projects&lt;/h2&gt;
&lt;p&gt;I had hoped to kick off a couple of undergraduate or masters projects along with &lt;a href="https://kcsrk.info/"&gt;KC Sivaramakrishnan&lt;/a&gt;, either at Cambridge or at IIT Madras. These are intended to be ways of mentoring students who think they might like to become contributors to the OCaml runtime. Unfortunately, February and March are a bit late for picking projects on academic courses.&lt;/p&gt;
&lt;p&gt;The first is implementing 'Early Release' for the OCaml minor collector. At present, all domains pause for a minor collection and wait until all domains have finished promoting their minor heaps before resuming. Consider each domain, it's minor heap consists of values that are reachable from other domains but also values that only it can reach. If all domains have promoted the global roots, their local roots, and their remembered set, then any domain that has finished promoting everything in their minor heap should be free to leave the minor collection and resume the mutator. This should mean that domains that do few minor heap allocations spend very little time in minor collections. We had an early prototype of this implemented a few years ago on the ocaml-multicore repo but we weren't convinced it was correct and ran out of time to fix it before upstreaming multicore. I think now is a good time to try again.&lt;/p&gt;
&lt;p&gt;The second project is 'Domain runtime work-sharing'. At present the number of domains needs to be less than the number of available physical cores. Going over that number can significantly reduce performance as domains wait to enter or complete a stop-the-world section in the runtime. Could we address this by restricting the number of domains running in a stop-the-world section to the number of physical cores and have that set of domains take on the work of all stopped domains? This is probably most advantageous for minor collections but could be done for major stop-the-world sections too.&lt;/p&gt;
&lt;p&gt;A third wild card project is exploring how we could use information from the GC and &lt;a href="https://docs.kernel.org/scheduler/sched-ext.html"&gt;Linux's sched_ext&lt;/a&gt; to better schedule highly parallel OCaml programs. This is a lot more speculative but might make for an interesting Masters project.&lt;/p&gt;
&lt;p&gt;If you are interested in any of these projects for the next academic year, please do get in touch with me or &lt;a href="https://kcsrk.info/"&gt;KC&lt;/a&gt;.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Mainly models from proprietary providers like OpenAI, Anthropic and Google or where the models are huge and uneconomical to run in anything less than large multi-user deployments, like Deepseek V3/R1 or Kimi 2.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;OxCaml actually has two compactors, the trunk compactor and a new one. I only mean the new one here.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="posts"/></entry><entry><title>Letting Claude Code check with Gemini</title><link href="https://www.toao.com/blog/check-with-gemini" rel="alternate"/><published>2025-06-27T10:01:00+01:00</published><updated>2025-07-15T10:24:47.213807+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-06-27:/blog/check-with-gemini</id><summary type="html">&lt;p&gt;A simple MCP server that enables Claude Code (or any MCP host) to check things with gemini-cli&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/google-gemini/gemini-cli"&gt;gemini-cli&lt;/a&gt; was released a few days ago with a very ample free tier that gives access to Gemini 2.5 Pro, a model with a million token context window. I'm already a user of &lt;a href="https://www.anthropic.com/claude-code"&gt;Claude Code&lt;/a&gt; so I wondered if I could have the two talk to each other. Enter &lt;a href="https://github.com/sadiqj/check-with-gemini/"&gt;check-with-gemini&lt;/a&gt; which is a simple mcp server and lets Claude Code call Gemini to help analyse codebases or check plans.&lt;/p&gt;
&lt;p&gt;The MCP server has a single tool &lt;code&gt;check_with_gemini&lt;/code&gt; which takes a prompt and content. Here's some examples of it in use.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;I asked Claude Code to explain a codebase to me without Gemini:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; Analyse this codebase in depth. Produce a short two paragraph summary for a potential new contributor.

● I&amp;#39;ll analyze this codebase to understand its structure and purpose, then provide a summary for potential contributors.

● Task(Analyze codebase structure)
  ⎿  Done (10 tool uses · 44.6k tokens · 1m 28.6s)                                                                                                                                                                  

● This codebase is an AI Pipeline Visualization project that creates an interactive 3D visualization of academic papers and their hierarchical clustering relationships. Built with C++20 and OpenGL 4.1, it renders
   thousands of papers as animated points in 3D space, grouped into transparent convex hull clusters representing semantic topics. The system loads paper data from CSV files containing titles, coordinates, and
  cluster assignments at multiple hierarchical depths (4-64 clusters), then provides real-time animation showing paper exploration progress with interactive camera controls and dynamic statistics.

  For contributors, the project follows a clean architecture with clear separation of concerns: PaperLoader handles data parsing, ClusterRenderer manages 3D visualization, and the OpenGL framework provides
  efficient instanced rendering. The build system uses CMake with dependencies on GLFW3, GLM, FreeType2, and Assimp. Key areas for contribution include improving Windows platform support (currently incomplete),
  optimizing rendering performance for larger datasets, extending the UI with additional visualization modes, or enhancing the clustering algorithms. The codebase is well-structured with logical file organization
   under src/ for core components and data/ for assets, making it approachable for developers familiar with modern C++ and OpenGL programming.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now with &lt;code&gt;check_with_gemini&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; Analyse this codebase in depth. Check with Gemini that your understanding is correct. Produce a short two paragraph summary for a potential new contributor.

● I&amp;#39;ll analyze this codebase in depth and verify my understanding with Gemini before providing a summary for potential contributors.

● Update Todos
  ⎿  ☐ Explore project structure and identify main components
     ☐ Analyze build system (CMakeLists.txt)
     ☐ Examine main.cpp and core functionality
     ☐ Check with Gemini for understanding verification
     ☐ Write contributor summary
     ☐ Review recent commits for project direction

● Update Todos
  ⎿  ☐ Explore project structure and identify main components
     ☐ Analyze build system (CMakeLists.txt)
     ☐ Examine main.cpp and core functionality
     ☐ Check with Gemini for understanding verification
     ☐ Write contributor summary
     ☐ Review recent commits for project direction

● List(.)
  ⎿  Listed 1119 paths (ctrl+r to expand)

● Search(pattern: &amp;quot;**/*&amp;quot;)
  ⎿  Found 100 files (ctrl+r to expand)

● Read(README.md)
  ⎿  Read 65 lines (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore project structure and identify main components
     ☐ Analyze build system (CMakeLists.txt)
     ☐ Examine main.cpp and core functionality
     ☐ Check with Gemini for understanding verification
     ☐ Write contributor summary
     ☐ Review recent commits for project direction

● Read(CMakeLists.txt)
  ⎿  Read 92 lines (ctrl+r to expand)

● Read(main.cpp)
  ⎿  Read 557 lines (ctrl+r to expand)

● Read(csv_loader.cpp)
  ⎿  Read 174 lines (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore project structure and identify main components
     ☒ Analyze build system (CMakeLists.txt)
     ☒ Examine main.cpp and core functionality
     ☐ Review recent commits for project direction
     ☐ Check with Gemini for understanding verification
     ☐ Write contributor summary

● Bash(git log --oneline -10)
  ⎿  903a1c0 Start animation paused
     ab728d8 Reduce vignette
     59cb10e Update README.md
     … +7 lines (ctrl+r to expand)

● Read(src/paper_loader.h)
  ⎿  Read 122 lines (ctrl+r to expand)

● Read(src/clusters.h)
  ⎿  Read 112 lines (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore project structure and identify main components
     ☒ Analyze build system (CMakeLists.txt)
     ☒ Examine main.cpp and core functionality
     ☒ Review recent commits for project direction
     ☐ Check with Gemini for understanding verification
     ☐ Write contributor summary

● check_with_gemini:check_with_gemini (MCP)(prompt: &amp;quot;Review this analysis of a C++ OpenGL visualization project for scientific papers. Is my understanding correct?\n\nThis is an AI Pipeline Visualization project
                                           that:\n1. Loads scientific paper data from CSV files containing paper titles, inclusion status, 2D/3D positions, and hierarchical cluster assignments (clusters at depths
                                            2-6)\n2. Visualizes papers as instanced 3D cubes using OpenGL with diffuse/ambient lighting\n3. Groups papers into hierarchical clusters represented by transparent
                                           convex hull models\n4. Provides interactive exploration with animation that progresses through papers chronologically\n5. Features include bar charts showing cluster
                                           distributions, viewing mode toggles, and animation speed controls\n6. Uses modern C++ (C++20), CMake build system, and libraries: GLFW3, GLAD, GLM, Assimp, FreeType2,
                                           and convhull_3d\n7. Recent development focused on UI improvements (vignette effects, post-processing) and documentation updates\n\nThe project appears designed for
                                           exploring relationships between scientific papers in a 3D space with hierarchical clustering visualization. Is this assessment accurate?&amp;quot;, content: &amp;quot;Key code
                                           structure:\n- main.cpp: Core rendering loop, handles user input, manages animation state\n- paper_loader.h/cpp: Loads paper data from CSV, manages clustering
                                           hierarchy\n- clusters.h/cpp: Renders cluster convex hulls using Assimp-loaded models\n- opengl/: Contains shader management, mesh/model loading, camera, fonts, etc.\n-
                                           CMakeLists.txt: Linux-focused build (Windows build marked as faulty)\n- Data files: CSV with paper metadata, pre-generated cluster models (.obj), shaders, fonts,
                                           textures&amp;quot;)
  ⎿  Yes, your assessment is highly accurate. Based on the file structure and your description, this project is indeed a 3D visualization tool for exploring hierarchically clustered scientific paper data.

     Your breakdown of the components and their functions is spot on:
     … +9 lines (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore project structure and identify main components
     ☒ Analyze build system (CMakeLists.txt)
     ☒ Examine main.cpp and core functionality
     ☒ Check with Gemini for understanding verification
     ☒ Review recent commits for project direction
     ☐ Write contributor summary

● This is an OpenGL-based 3D visualization tool for exploring hierarchically clustered scientific paper data from AI research pipelines. The project renders thousands of papers as colored cubes in 3D space, with
  their positions and cluster assignments derived from dimensionality reduction techniques. Papers are grouped into transparent convex hull clusters at multiple hierarchical levels (2-6), allowing researchers to
  explore relationships between papers through interactive navigation with real-time animation that progresses chronologically through the dataset.

  The codebase uses modern C++20 with a CMake build system targeting Linux (Windows support is incomplete). Core dependencies include GLFW3/GLAD for OpenGL context, GLM for 3D math, Assimp for loading cluster
  models, and FreeType2 for text rendering. The architecture cleanly separates concerns: data loading from CSV files, instanced rendering for performance, cluster hull generation/rendering, and UI overlays
  showing statistics like cluster distributions and exploration progress. Recent development has focused on post-processing effects and UI improvements to enhance the visual exploration experience.

● Update Todos
  ⎿  ☒ Explore project structure and identify main components
     ☒ Analyze build system (CMakeLists.txt)
     ☒ Examine main.cpp and core functionality
     ☒ Check with Gemini for understanding verification
     ☒ Write contributor summary
     ☒ Review recent commits for project direction
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We can also have Gemini do the initial work and have Claude Code check it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; Have Gemini analyse this codebase in depth. Critically evaluate the resutls Gemini gives you and make sure they are correct. Produce a short two paragraph summary for a potential new contributor.

● I&amp;#39;ll analyze this codebase using Gemini and provide a comprehensive summary for potential contributors.

● Update Todos
  ⎿  ☐ Explore codebase structure and files             
     ☐ Have Gemini analyze the codebase in depth
     ☐ Critically evaluate Gemini&amp;#39;s analysis
     ☐ Create two paragraph summary for new contributors

● Update Todos
  ⎿  ☐ Explore codebase structure and files             
     ☐ Have Gemini analyze the codebase in depth
     ☐ Critically evaluate Gemini&amp;#39;s analysis
     ☐ Create two paragraph summary for new contributors

● List(.)
  ⎿  Listed 1119 paths (ctrl+r to expand)

● Read(CMakeLists.txt)
  ⎿  Read 92 lines (ctrl+r to expand)

● Read(main.cpp)
  ⎿  Read 557 lines (ctrl+r to expand)

● Search(pattern: &amp;quot;**/*.{cpp,h,hpp,c,txt,md,json}&amp;quot;)
  ⎿  Found 100 files (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore codebase structure and files             
     ☐ Have Gemini analyze the codebase in depth
     ☐ Critically evaluate Gemini&amp;#39;s analysis
     ☐ Create two paragraph summary for new contributors

● Read(README.md)
  ⎿  Read 65 lines (ctrl+r to expand)

● Task(Analyze source files structure)
  ⎿  Done (15 tool uses · 50.0k tokens · 1m 6.4s)                                                                                                                                                                   

● Now I&amp;#39;ll have Gemini analyze the codebase comprehensively:

● check_with_gemini:check_with_gemini (MCP)(prompt: &amp;quot;Please provide a comprehensive analysis of this codebase. This is a 3D visualization application for academic papers that uses OpenGL. I want you to analyze
                                           the code quality, architecture, potential issues, and provide insights about its design patterns and implementation approaches. Consider:\n\n1. Code organization and
                                           structure\n2. OpenGL and graphics programming best practices\n3. Memory management and resource handling\n4. Performance considerations\n5. Error handling and
                                           robustness\n6. Code maintainability and extensibility\n7. Any potential security or stability issues\n8. Overall software engineering quality\n\nBe thorough and critical
                                            in your analysis. Point out both strengths and weaknesses.&amp;quot;, content: &amp;quot;This codebase is a 3D visualization application called \&amp;quot;AI Pipeline Visualisation\&amp;quot; that renders
                                            academic papers as cubes in 3D space, organized into clusters. Here&amp;#39;s the key information:\n\n## Core Architecture:\n- Built with C++20, OpenGL 4.1, CMake build
                                           system\n- Uses GLFW for windowing, GLAD for OpenGL loading, GLM for math, Assimp for 3D models, FreeType for fonts\n- Main components: App (OpenGL wrapper), PaperLoader
                                           (data management), Clusters (3D cluster visualization), Shader management\n\n## Main Files Structure:\n- main.cpp: Main application loop with animation, rendering, and
                                           UI\n- src/opengl/app.cpp: Core OpenGL application framework\n- src/paper_loader.cpp: Loads papers from CSV, generates clusters\n- src/clusters.cpp: Generates and renders
                                            3D convex hulls for clusters\n- src/opengl/shader.cpp: Shader program management\n\n## Key Code Snippets:\n\n### main.cpp (main loop):\n```cpp\n// Main rendering loop
                                           with instanced paper rendering\nwhile (!app.shouldClose())\n{\n    app.handleInput();\n    app.enablePostProcessing();\n    app.clear();\n    \n    // Render papers as
                                           instanced cubes\n    pointShader.use();\n    pointShader.setMat4(\&amp;quot;projection\&amp;quot;, app.getPerspectiveMatrix());\n    pointShader.setMat4(\&amp;quot;view\&amp;quot;, app.getViewMatrix());\n
                                              glDrawArraysInstanced(GL_TRIANGLES, 0, 36, static_cast&amp;lt;int&amp;gt;(paperData.size() / 5));\n    \n    // Render transparent clusters with depth sorting\n    std::map&amp;lt;float,
                                           std::pair&amp;lt;int, glm::vec3&amp;gt;&amp;gt; sortedClusters{};\n    for (int c = 0; c &amp;lt; std::pow(2, CLUSTER_DEPTH); ++c) {\n        // Sort clusters by distance for proper transparency\n
                                                  distance = glm::length(app.getCameraPosition() - clusterData-&amp;gt;position);\n        sortedClusters[distance] = std::make_pair(c, color);\n    }\n    \n    //
                                           Animation and UI updates\n    animationProgress += ANIMATION_SPEED * app.getDeltaTime();\n}\n```\n\n### src/opengl/app.cpp (OpenGL framework):\n```cpp\nclass App {\n
                                           GLFWwindow* window;\n    Camera camera;\n    PostProcessor* postProcessor;\n    \n    void init(int width, int height, const std::string&amp;amp; title) {\n        if
                                           (!glfwInit()) { /* error handling */ }\n        \n        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);\n        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);\n
                                            glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n        \n        window = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr);\n        if
                                            (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {\n            /* error handling */\n        }\n    }\n};\n```\n\n### src/paper_loader.cpp (data
                                           management):\n```cpp\nclass PaperLoader {\n    std::vector&amp;lt;Paper&amp;gt; papers;\n    std::map&amp;lt;int, std::map&amp;lt;int, Cluster&amp;gt;&amp;gt; clusters;\n    \n    void loadFromFile(const
                                           std::string&amp;amp; filename, float scale) {\n        // Parse CSV with wide string support for UTF-8\n        std::wifstream file(filename);\n
                                           file.imbue(std::locale(\&amp;quot;en_US.UTF-8\&amp;quot;));\n        \n        // Process each paper line\n        while (std::getline(file, line)) {\n            Paper paper;\n
                                             // Parse coordinates, title, inclusion status\n            paper.x = std::stof(fields[1]) * scale;\n            paper.y = std::stof(fields[2]) * scale;\n
                                           papers.push_back(paper);\n        }\n    }\n    \n    void generateClusters() {\n        // Generate hierarchical clusters (levels 2-6)\n        for (int level = 2;
                                           level &amp;lt;= 6; ++level) {\n            // Group papers into 2^level clusters\n            clusters[level] = generateClusterLevel(level);\n        }\n    }\n};\n```\n\n###
                                           src/clusters.cpp (3D cluster visualization):\n```cpp\nclass ClusterRenderer {\n    std::map&amp;lt;int, std::map&amp;lt;int, ClusterData&amp;gt;&amp;gt; clusterData;\n    \n    void
                                           generateClusters(const std::map&amp;lt;int, std::map&amp;lt;int, Cluster&amp;gt;&amp;gt;&amp;amp; clusters) {\n        for (const auto&amp;amp; [level, levelClusters] : clusters) {\n            for (const auto&amp;amp;
                                           [id, cluster] : levelClusters) {\n                // Generate convex hull from paper positions\n                ConvexHull hull = convhull_3d_build(cluster.vertices);\n
                                                          \n                // Export as .obj file\n                std::ofstream objFile(\&amp;quot;data/cluster_models/cluster_\&amp;quot; + \n
                                           std::to_string(level) + \&amp;quot;_\&amp;quot; + std::to_string(id) + \&amp;quot;.obj\&amp;quot;);\n                // Write vertices and faces\n            }\n        }\n    }\n    \n    void
                                           renderCluster(const Shader&amp;amp; shader, const glm::mat4&amp;amp; projection, \n                      const glm::mat4&amp;amp; view, const glm::vec3&amp;amp; color, int level, int id) {\n
                                           ClusterData* data = getClusterData(level, id);\n        shader.setVec3(\&amp;quot;color\&amp;quot;, color);\n        shader.setMat4(\&amp;quot;model\&amp;quot;, data-&amp;gt;modelMatrix);\n
                                           glBindVertexArray(data-&amp;gt;VAO);\n        glDrawElements(GL_TRIANGLES, data-&amp;gt;indexCount, GL_UNSIGNED_INT, 0);\n    }\n};\n```\n\n### Shader
                                           examples:\n```glsl\n//points.vert - Instanced paper rendering\n#version 410 core\nlayout (location = 0) in vec3 aPos;\nlayout (location = 1) in vec3 aNormal;\nlayout
                                           (location = 2) in vec3 aOffset; // per-instance position\nlayout (location = 3) in float aIncluded; // per-instance inclusion flag\n\nuniform mat4 model, view,
                                           projection;\nout vec3 FragPos, Normal;\nout float Included;\n\nvoid main() {\n    vec3 worldPos = aPos + aOffset;\n    gl_Position = projection * view * model *
                                           vec4(worldPos, 1.0);\n    FragPos = worldPos;\n    Normal = aNormal;\n    Included = aIncluded;\n}\n\n//cluster.frag - Transparent cluster rendering\n#version 410
                                           core\nin vec3 FragPos, Normal;\nuniform vec3 color, CameraPos;\n\nvoid main() {\n    // Blinn-Phong lighting\n    vec3 lightDir = normalize(CameraPos - FragPos);\n
                                           float diff = max(dot(Normal, lightDir), 0.0);\n    vec3 result = (0.3 + 0.7 * diff) * color;\n    gl_FragColor = vec4(result, 0.3); // Semi-transparent\n}\n```\n\n##
                                           CMakeLists.txt build configuration:\n```cmake\nproject(main VERSION 0.2 DESCRIPTION \&amp;quot;AI Pipeline Visualisation\&amp;quot; LANGUAGES CXX)\nset(CMAKE_CXX_STANDARD 20)\n\n#
                                           Cross-platform library linking\nif (CMAKE_SYSTEM MATCHES Linux)\n    set(GL_LIBS GL GLU glfw3 assimp freetype)\n
                                           include_directories(${CMAKE_SOURCE_DIR}/include/linux)\nendif()\n\n# Copy assets and shaders to build directory\nadd_custom_target(copy_assets\n    COMMAND
                                           ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/data ${CMAKE_CURRENT_BINARY_DIR}/data)\n```\n\nThe application loads academic papers from CSV, renders them
                                           as animated 3D cubes, groups them into hierarchical clusters with convex hull visualization, and provides interactive controls for exploration.&amp;quot;)
  ⎿  Error: Gemini request timed out after 30 seconds

● Let me try with a more concise analysis request:

● check_with_gemini:check_with_gemini (MCP)(prompt: &amp;quot;Analyze this 3D visualization codebase for code quality, architecture, and potential issues. Focus on OpenGL best practices, memory management, error handling,
                                            and overall software engineering quality. Provide both strengths and weaknesses.&amp;quot;, content: &amp;quot;C++ OpenGL 4.1 academic paper visualization app with these key
                                           components:\n\n**Architecture:**\n- App class: OpenGL/GLFW wrapper, handles window, camera, rendering loop\n- PaperLoader: CSV data loading, cluster generation, UTF-8
                                           support  \n- ClusterRenderer: 3D convex hull generation/rendering for clusters\n- Shader management system\n\n**Key Code Patterns:**\n\nMain loop with instanced
                                           rendering:\n```cpp\nwhile (!app.shouldClose()) {\n    app.handleInput();\n    app.clear();\n    \n    // Instanced paper cubes\n    glDrawArraysInstanced(GL_TRIANGLES,
                                           0, 36, paperCount);\n    \n    // Transparent clusters with depth sorting\n    std::map&amp;lt;float, std::pair&amp;lt;int, glm::vec3&amp;gt;&amp;gt; sortedClusters;\n    for (clusters) {\n
                                           distance = glm::length(cameraPos - clusterPos);\n        sortedClusters[distance] = clusterData;\n    }\n    // Render back-to-front\n}\n```\n\nResource
                                           management:\n```cpp\nclass App {\n    GLFWwindow* window;\n    unsigned int framebuffer, colorTexture, depthTexture;\n    \n    ~App() {\n        glDeleteFramebuffers(1,
                                            &amp;amp;framebuffer);\n        glfwTerminate();\n    }\n};\n```\n\nData loading with wide strings:\n```cpp\nvoid PaperLoader::loadFromFile(const std::string&amp;amp; filename, float
                                           scale) {\n    std::wifstream file(filename);\n    file.imbue(std::locale(\&amp;quot;en_US.UTF-8\&amp;quot;));\n    // Parse CSV data, handle UTF-8 paper titles\n}\n```\n\nOpenGL state
                                           management:\n```cpp\nvoid App::enableDepthTesting() {\n    glEnable(GL_DEPTH_TEST);\n    glDepthFunc(GL_LESS);\n}\n\nvoid App::enableBlending() {\n
                                           glEnable(GL_BLEND);\n    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n}\n```\n\n**Libraries:** GLFW, GLAD, GLM, Assimp, FreeType, ConvexHull3D\n**Features:**
                                           Instanced rendering, transparent clusters, post-processing, font rendering, CSV data loading, animation system&amp;quot;)
  ⎿ First, I&amp;#39;ll conduct a comprehensive search of the codebase to identify all C++ and header files. This will give me a complete picture of the project&amp;#39;s structure and all its components.Okay, that&amp;#39;s a lot of fi
    les. Based on your description and the file list, I&amp;#39;ll focus on the core application logic in the `src` directory and the root-level `.cpp` files. The `include` and `lib` directories appear to contain third-p
    arty libraries, so I&amp;#39;ll exclude those from the primary analysis.
    … +57 lines (ctrl+r to expand)



● Update Todos
  ⎿  ☒ Explore codebase structure and files             
     ☒ Have Gemini analyze the codebase in depth
     ☐ Critically evaluate Gemini&amp;#39;s analysis
     ☐ Create two paragraph summary for new contributors

● Let me critically evaluate Gemini&amp;#39;s analysis by examining specific code examples to verify the claims:

● Read(src/opengl/app.h)
  ⎿  Read 183 lines (ctrl+r to expand)

● Read(src/opengl/app.cpp)
  ⎿  Read 100 lines (ctrl+r to expand)

● Search(pattern: &amp;quot;delete|new|malloc|free&amp;quot;, include: &amp;quot;*.cpp&amp;quot;)
  ⎿  Found 8 files (ctrl+r to expand)

● Update Todos
  ⎿  ☒ Explore codebase structure and files             
     ☒ Have Gemini analyze the codebase in depth
     ☒ Critically evaluate Gemini&amp;#39;s analysis
     ☐ Create two paragraph summary for new contributors

● After critically evaluating Gemini&amp;#39;s analysis against the actual codebase, I found it to be largely accurate and insightful. The analysis correctly identifies the use of raw pointers (_defaultShader and
  _postProcessor) in app.h:146 and app.h:151, the memory management issue in wstring2string (main.cpp:500-503), and the hardcoded paths throughout the codebase. The assessment of OpenGL best practices, instanced
  rendering usage, and transparency handling is also correct based on the code structure.

● Update Todos
  ⎿  ☒ Explore codebase structure and files             
     ☒ Have Gemini analyze the codebase in depth
     ☒ Critically evaluate Gemini&amp;#39;s analysis
     ☒ Create two paragraph summary for new contributors

● Summary for New Contributors

  This is a sophisticated 3D data visualization application built in C++20 with OpenGL 4.1 that renders academic papers as animated cubes in 3D space, organized into hierarchical clusters with convex hull
  visualizations. The codebase demonstrates solid software engineering practices with clear separation of concerns across its main components: the App class manages OpenGL context and rendering pipeline,
  PaperLoader handles CSV data ingestion with UTF-8 support and cluster generation, ClusterRenderer creates and renders 3D convex hulls using the ConvexHull3D library, and a comprehensive shader management
  system. The application uses modern OpenGL techniques including instanced rendering for performance, proper transparency handling with depth sorting, and post-processing effects, while supporting real-time
  animation controls and interactive 3D navigation.

  The architecture is well-organized with appropriate use of modern C++ features, RAII principles for resource management, and established graphics programming patterns, though it has some areas for improvement
  including inconsistent error handling, occasional use of raw pointers instead of smart pointers, and hardcoded configuration values. New contributors should be comfortable with OpenGL/graphics programming
  concepts, understand 3D mathematics (GLM library), and be familiar with build systems like CMake. The codebase includes comprehensive asset handling (3D models, shaders, fonts, textures), supports
  cross-platform development (Linux focus with Windows compatibility), and implements a complete data pipeline from CSV loading through hierarchical clustering to real-time 3D visualization with interactive
  controls for exploring academic paper datasets.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As you can see one of the downsides is that some of the calls to &lt;code&gt;check_with_gemini&lt;/code&gt; take longer than 30 seconds and so timeout.&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Qwen3 Leads the Pack: Evaluating how Local LLMs tackle First Year CS OCaml exercises</title><link href="https://www.toao.com/blog/ocaml-local-code-models" rel="alternate"/><published>2025-05-06T17:52:00+01:00</published><updated>2025-05-07T13:45:51.413195+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-05-06:/blog/ocaml-local-code-models</id><summary type="html">&lt;p&gt;How well can locally-runnable language models handle OCaml code generation? We evaluate 19 open-weight LLMs on first-year Computer Science exercises, exploring the balance between model size, architecture, and reasoning capabilities for less mainstream programming languages.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;TL;DR&lt;/em&gt; Qwen3's self-hostable sized models are very strong and would score top-marks on Cambridge's first year Computer Science OCaml exercises.&lt;/p&gt;
&lt;p&gt;Large language models (LLMs) are transforming software development. What if you use a language outside the mainstream that has relatively little training data though? Worse, what if you want to use features that are still under development or only recently released? The model can't have seen those features during training and so won't make use of them when generating unless explicitly prompted to do so. My colleague &lt;a href="https://www.cst.cam.ac.uk/people/jjl25"&gt;Jon Ludlam&lt;/a&gt;, Anil Madhavapeddy and I &lt;a href="https://anil.recoil.org/notes/claude-copilot-sandbox"&gt;have been thinking about this&lt;/a&gt; in the context of OCaml and some of the &lt;a href="https://blog.janestreet.com/oxidizing-ocaml-locality/"&gt;new extensions under development at Jane Street&lt;/a&gt;. Having a process for teaching models to use novel language features would not just be useful for interactive code generation but could also enable retrofitting existing codebases or if cheap enough, could be used in the design process for the features themselves.&lt;/p&gt;
&lt;p&gt;Before we dived in though we wanted to understand just how good the kind of models are that a developer could run either locally or on a shared local inference server? To do that we used the OCaml tutorial problems first year Computer Science students at the university tackle on the &lt;a href="https://www.cl.cam.ac.uk/teaching/2425/FoundsCS/"&gt;Foundations of Computer Science&lt;/a&gt; course taught by Anil and Jon. These are &lt;a href="https://jon.recoil.org/blog/2025/04/this-site.html"&gt;interactive jupyter notebooks&lt;/a&gt; where students populate answer cells and their solutions are automatically checked. Each tutorial is known as a 'tick' and has one or more questions. Students must complete earlier questions in order to progress to later questions. There are also 'starred' ticks which are essentially stretch goals and harder than the non-starred ones.&lt;/p&gt;
&lt;h1&gt;Terminology&lt;/h1&gt;
&lt;p&gt;A quick bit of terminology that will help in the later sections:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tokens&lt;/em&gt; are the units that Large Language Models take as input and output. A token is roughly three quarters of a word in length on average and they come from a fixed vocabulary for a given model. Here's &lt;a href="https://huggingface.co/deepseek-ai/DeepSeek-R1/raw/main/tokenizer.json"&gt;Deepseek R1's vocab&lt;/a&gt; (warning it's about 8mb of json).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Reasoning models&lt;/em&gt; or a thinking mode when the model is given some space in which to reason through its approach to the problem before it generates an answer. After pre-training on very large text corpora reasoning models undergo a phase of Reinforcement Learning. If you want to know more, Sebastian Raschka has a &lt;a href="https://sebastianraschka.com/blog/2025/the-state-of-reinforcement-learning-for-llm-reasoning.html"&gt;great overview article&lt;/a&gt;. The latest Qwen3 models from Alibaba have the ability to selectively enable thinking mode. This lets you trade off latency and performance. More on this later.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OpenRouter&lt;/em&gt; is a marketplace for LLM providers. It provides a unified OpenAI-compatible API and then routes requests to different model providers based on the model you specify and any filtering options (e.g., no training on data, support for certain features). If you only use proprietary models then this is less interesting, they are often only available via a small handful of APIs that largely have similar pricing (e.g., for Gemini you can go via the Gemini or Vertex API). If you use open weights models though, there are a plethora of providers all competing on price, latency and throughput. For example if you want &lt;a href="https://openrouter.ai/meta-llama/llama-3.3-70b-instruct"&gt;Llama 3.3 70B&lt;/a&gt; you can currently choose the cheapest (inference.net) at $0.10 per million tokens input and $0.25 per million tokens output with 1.02s time-to-first-token and 28.41 tokens per second throughput. On the other hand, if throughput is your primary concern then there's Groq at 372.2 tokens per second but you'll pay a premium at $0.59 in and $0.79 out.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Distillation&lt;/em&gt; is when you use the output of a much larger model to improve the performance of a smaller model. When releasing Deepseek-R1, Deepseek also released a series of smaller (originally non-Deepseek) models that had been fine-tuned on the outputs of Deepseek-R1.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mixture of experts&lt;/em&gt; is a type of architecture where only a subset of the network weights are activated for each token processed. This can lead to a performance win at inference time and is in contrast to a &lt;em&gt;dense&lt;/em&gt; model in which every process token interacts with every non-embedding model parameter.&lt;/p&gt;
&lt;h1&gt;Models&lt;/h1&gt;
&lt;p&gt;We took the following open weight models, using instruct variants models where available:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Google Gemma3 12B and 27B&lt;/li&gt;
    &lt;li&gt;Deepseek-R1-Llama 70B&lt;/li&gt;
    &lt;li&gt;Meta Llama-3.1 8B and 70B&lt;/li&gt;
    &lt;li&gt;Microsoft Phi-4&lt;/li&gt;
    &lt;li&gt;Mistral 8B&lt;/li&gt;
    &lt;li&gt;Mistral Nemo (12B)&lt;/li&gt;
    &lt;li&gt;Mistral Small 24B&lt;/li&gt;
    &lt;li&gt;Qwen 2.5 7B and 72B&lt;/li&gt;
    &lt;li&gt;Qwen 2.5 Coder 7B and 32B&lt;/li&gt;
    &lt;li&gt;Qwen 3 8B, 14B, 32B and 30BA3B (Thinking and non-thinking)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We gave models a similar setup to students. Each model had 3 attempts to complete each question by producing a code block that would pass the notebook's tests. If they produced a passing block of code they proceeded to the next question. We repeated this 5 times per model per tick. We used OpenRouter for inference.&lt;/p&gt;
&lt;p&gt;The tick questions tested a range of concepts such as recursion, data structures, streams etc.. We'll look at them in more depth in the results.&lt;/p&gt;
&lt;h1&gt;Results&lt;/h1&gt;
&lt;p&gt;Here's a graph of the success rate against parameter count for all models. Note the logarithmic x-axis:&lt;/p&gt;
&lt;style&gt;
.centered-graph {
    display: block;
    margin: 0 auto;
    max-width: 100%;
    padding: 10px;
}
&lt;/style&gt;

&lt;p&gt;&lt;img src="/static/model_parameters.png" alt="Performance against model parameters" class="centered-graph"&gt;&lt;/p&gt;
&lt;p&gt;And a table of &lt;b&gt;overall success rate&lt;/b&gt;. This is the percentage of tick-question pairs that a model was able to solve given 3 attempts.&lt;/p&gt;
&lt;style&gt;
.table-container {
    padding: 15px;
    margin: 0 auto;
    max-width: 830px; /* slightly wider than table to account for padding */
}

.stats-table {
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    width: 800px;
    max-width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    margin: 0 auto;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
    border-radius: 8px;
    overflow: hidden;
}

.stats-table thead tr {
    background-color: #4a5568; /* Slightly softer dark header */
    color: white;
    font-weight: 600; /* Slightly bolder */
    text-align: left;
}

.stats-table th, .stats-table td {
    padding: 14px 18px; /* Increased padding */
    border-bottom: 1px solid #e2e8f0; /* Lighter border */
    text-align: left; /* Ensure alignment */
}

.stats-table th:first-child, .stats-table td:first-child {
    text-align: left;
}


.stats-table tbody tr:nth-child(even) {
    background-color: #f7fafc; /* Lighter even row color */
}

.stats-table tbody tr:hover {
    background-color: #edf2f7; /* Softer hover color */
}

.stats-table td:first-child {
    font-weight: 500;
    color: #2d3748; /* Darker text for model names */
    max-width: 220px;
    word-break: break-word;
}

/* Adjusted success colors for better contrast/visual appeal */
.low-success { color: #e53e3e; } /* Slightly brighter red */
.med-success { color: #3182ce; font-weight: 600; } /* Bolder blue */
.high-success { color: #38a169; font-weight: 600; } /* Bolder green */

/* Center align percentage columns */
.stats-table th:not(:first-child), .stats-table td:not(:first-child) {
    text-align: center;
}
&lt;/style&gt;

&lt;div class="table-container"&gt;
&lt;table class="stats-table model-summary"&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Model&lt;/th&gt;
                    &lt;th&gt;Overall Success Rate&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;anthropic/claude-3.7-sonnet:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;96.4%&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-32b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;95.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-14b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;84.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-30b-a3b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;83.0%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen-2.5-coder-32b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;77.6%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;meta-llama/llama-3.3-70b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;69.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-8b:thinking&lt;/td&gt;
                    &lt;td class="med-success"&gt;66.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-32b&lt;/td&gt;
                    &lt;td class="med-success"&gt;62.4%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistralai/mistral-small-3.1-24b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;58.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-14b&lt;/td&gt;
                    &lt;td class="med-success"&gt;56.4%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-30b-a3b&lt;/td&gt;
                    &lt;td class="med-success"&gt;48.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;deepseek/deepseek-r1-distill-llama-70b&lt;/td&gt;
                    &lt;td class="med-success"&gt;44.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;google/gemma-3-27b-it&lt;/td&gt;
                    &lt;td class="low-success"&gt;33.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-8b&lt;/td&gt;
                    &lt;td class="low-success"&gt;33.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;microsoft/phi-4&lt;/td&gt;
                    &lt;td class="low-success"&gt;32.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;google/gemma-3-12b-it&lt;/td&gt;
                    &lt;td class="low-success"&gt;28.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistralai/mistral-nemo&lt;/td&gt;
                    &lt;td class="low-success"&gt;26.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;meta-llama/llama-3.1-8b-instruct&lt;/td&gt;
                    &lt;td class="low-success"&gt;25.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistral/ministral-8b&lt;/td&gt;
                    &lt;td class="low-success"&gt;15.8%&lt;/td&gt;
                &lt;/tr&gt;

            &lt;/tbody&gt;
        &lt;/table&gt;
&lt;/div&gt;

&lt;h1&gt;High-level takeaways&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;Qwen 3 models performed very well&lt;/b&gt; The best performing model was qwen3-32b in thinking mode at 95.2%. This is very close to Anthropic's Claude 3.7 Sonnet with thinking. At Qwen3 32B's current &lt;a href="https://openrouter.ai/qwen/qwen3-32b"&gt;$0.10 per million input tokens and $0.30 per million output tokens&lt;/a&gt; this is up to 50x cheaper than &lt;a href="https://www.anthropic.com/pricing#api"&gt;Claude 3.7's $3 M in / $15 M out pricing&lt;/a&gt;. Even better the Qwen3 32B model is Apache2 licensed and so can be self-hosted. In addition, all Qwen3 models in non-thinking mode outperformed comparably-sized models from other families.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qwen2.5's coding variant was the best non-thinking model.&lt;/b&gt; The Qwen2.5-Coder-32B model performed well at 77.6% and was the best non-thinking model. It outperformed Qwen3 32B and this means &lt;a href="https://x.com/ggerganov/status/1918373399891513571"&gt;the upcoming Qwen3-Coder model&lt;/a&gt; should be very strong.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qwen3 with thinking on performed better than non-thinking variants.&lt;/b&gt; In every case allowing Qwen3 to think significantly improved performance. The qwen3-8b model with thinking on was very close in performance to llama-3.3-70b, a model almost an order of magnitude larger. Note though that this comes at the expense of increased latency and cost. In most cases thinking added 2-3,000 tokens of reasoning before the model produced its final answer, for Qwen3 32B on openrouter that is roughly a minute of thinking. There were also cases where the model entered a loop and kept reasoning until it hit the token limit.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Qwen3 30B-A3B MoE model could be a good compromise&lt;/b&gt; Whilst it has 30 billion parameters the MoE model only activates about 3 billion of them for each token processed. This can be a substantial performance win when doing inference and indeed you can see the throughput ratio on OpenRouter between &lt;a href="https://openrouter.ai/qwen/qwen3-32b"&gt;Qwen3 32B&lt;/a&gt; and &lt;a href="https://openrouter.ai/qwen/qwen3-30b-a3b"&gt;Qwen3 30B-A3B&lt;/a&gt;. I suspect that gap will widen as providers do more optimisation of their MoE serving code.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Within a family more parameters means better performance.&lt;/b&gt; Within the Gemma and Qwen families, larger parameter counts generally led to better performance, as seen in the graph. Presumably there is &lt;em&gt;some&lt;/em&gt; OCaml in the pretraining corpus and the larger models have a higher chance of retaining information from it?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deepseek R1's distilled Llama 3.3 70B reasoning model did not beat base model.&lt;/b&gt; The Deepseek-R1-Llama-3.3-70B model which was produced by Deepseek by distilling from their large Deepseek R1 model had worse performance than the model it was based on Llama-3.3-70B.&lt;/p&gt;
&lt;h1&gt;What went wrong?&lt;/h1&gt;
&lt;p&gt;There were some consistent themes amongst failures across especially the smaller models. Here are some of the most common:&lt;/p&gt;
&lt;h2&gt;Syntax errors&lt;/h2&gt;
&lt;p&gt;Many models had basic syntax errors in their solutions, such as incorrect comment syntax or a lack of &lt;code&gt;in&lt;/code&gt;. There were also cases of incorrect function application syntax. A very common mistake was not including &lt;code&gt;rec&lt;/code&gt; for recursive functions.&lt;/p&gt;
&lt;h2&gt;Type system confusion&lt;/h2&gt;
&lt;p&gt;On several of the tick questions this involved confusing the int and float operators (+/+., &lt;em&gt;/&lt;/em&gt;.). A common pattern was changing just one of the operators in response to a compile error, then changing another on the next error, etc..&lt;/p&gt;
&lt;h2&gt;Hallucinated functions&lt;/h2&gt;
&lt;p&gt;Some failures came from hallucinating functions such as &lt;code&gt;List.sub&lt;/code&gt; or &lt;code&gt;List.combinations&lt;/code&gt;, as well as assuming things like &lt;code&gt;Core&lt;/code&gt; and &lt;code&gt;Format&lt;/code&gt; were available. This is curious as even small models (like Qwen2.5-Coder-7B) assumed Core was available and yet still made fundamental OCaml syntactic errors.&lt;/p&gt;
&lt;h2&gt;Recursion&lt;/h2&gt;
&lt;p&gt;Beyond the failure to include &lt;code&gt;rec&lt;/code&gt; the models struggled with recursion. There were several incorrect base cases in questions involving streams which resulted in a fair bit of non-termination in those questions. It would be interesting to try rewriting some of the tick questions as iterative and seeing whether success rates increase.&lt;/p&gt;
&lt;h1&gt;Limitations&lt;/h1&gt;
&lt;p&gt;These are only introductory tasks aimed at first year Computer Science students and so are not representative of the complexity of larger OCaml codebases that may also use advanced language features.&lt;/p&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
&lt;p&gt;Qwen3 had an impressive showing. I had actually already written a draft of this blog post before Qwen3 was released, and re-running the evaluation to include it led to a very different outcome!&lt;/p&gt;
&lt;p&gt;So what next? It would be interesting to understand where the gap in performance is when thinking mode is on and off. Are there common mistakes Qwen3 is making when thinking is off?&lt;/p&gt;
&lt;p&gt;As a next step we clearly need to move beyond first-year Computer Science questions, especially as the top models are already saturating on this test. Anil reports performance on OCaml vibe-coded projects through Claude lags behind its abilities in Python.&lt;/p&gt;
&lt;p&gt;Next, how do we improve their performance? For this we really need more data. We now have a dataset of &lt;a href="https://huggingface.co/datasets/sadiqj/opam-archive-dataset"&gt;OCaml code extracted from opam&lt;/a&gt; that is regularly updated but still small (~80k ml/mli files) and it is unclear as to the difficulty level of each bit of code. This is important because there is good evidence (&lt;a href="https://arxiv.org/abs/2403.09472"&gt;Sun et al&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2504.00829"&gt;Ji et al&lt;/a&gt;) that going from easy to difficult examples when training via reinforcement learning can improve performance.&lt;/p&gt;
&lt;p&gt;One promising avenue is &lt;a href="https://arxiv.org/abs/2308.09895"&gt;Cassano et al&lt;/a&gt; who have done some work leveraging training data from 'high resource' languages to generate code and validation tests in target 'low resource' languages. This approach could be extended to novel language features, as well as being used for reinforcement learning rather than just fine-tuning.&lt;/p&gt;
&lt;p&gt;Unrelated to OCaml, I'm looking forward to testing out how these models perform on the &lt;a href="https://anil.recoil.org/projects/ce/"&gt;Conservation Evidence work&lt;/a&gt; that Anil and I are involved in. We currently self-host Deepseek-R1-Llama-3.3-70B and switching to Qwen3 32B could substantially improve the performance at one of our crucial bottlenecks.&lt;/p&gt;</content><category term="posts"/></entry><entry><title>A dataset of OCaml's Opam</title><link href="https://www.toao.com/blog/opam-archive-dataset" rel="alternate"/><published>2025-05-01T10:01:00+01:00</published><updated>2025-05-01T11:54:54.731501+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-05-01:/blog/opam-archive-dataset</id><summary type="html">&lt;p&gt;Introducing opam-archive-dataset: a Parquet dataset containing code from OCaml packages, designed to improve performance of language models for OCaml development through better training data&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you have tried to use locally-hostable language models to develop OCaml code, then you will have noticed their performance significantly lags in more niche languages compared to Python or Javascript. &lt;a href="https://www.cst.cam.ac.uk/people/jjl25"&gt;Jon Ludlam&lt;/a&gt;, &lt;a href="https://anil.recoil.org/"&gt;Anil Madhavapeddy&lt;/a&gt; and I have been doing some work on this recently and there will be more on that soon.&lt;/p&gt;
&lt;p&gt;To improve code models, we first need data. To help with that I've created &lt;a href="https://huggingface.co/datasets/sadiqj/opam-archive-dataset"&gt;opam-archive-dataset&lt;/a&gt; which periodically takes the code for all packages from the &lt;a href="https://hub.docker.com/r/ocaml/opam/tags?name=archive"&gt;ocaml/opam:archive&lt;/a&gt; docker image, filters for the most recent version of each package, and then converts everything into the columnar parquet format. This is a very efficient format and results in a ~800MB set of files.&lt;/p&gt;
&lt;p&gt;To use the dataset and run queries over it, you can use the &lt;a href="https://huggingface.co/docs/datasets/en/load_hub"&gt;Hugging Face datasets library&lt;/a&gt; or if you prefer SQL then you can do the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gp"&gt;# &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;dataset&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;huggingface
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://huggingface.co/datasets/sadiqj/opam-archive-dataset
&lt;span class="go"&gt;Cloning into &amp;#39;opam-archive-dataset&amp;#39;...&lt;/span&gt;
&lt;span class="go"&gt;remote: Enumerating objects: 17, done.&lt;/span&gt;
&lt;span class="go"&gt;remote: Total 17 (delta 0), reused 0 (delta 0), pack-reused 17 (from 1)&lt;/span&gt;
&lt;span class="go"&gt;Unpacking objects: 100% (17/17), 4.31 KiB | 315.00 KiB/s, done.&lt;/span&gt;
&lt;span class="go"&gt;Filtering content: 100% (3/3), 388.79 MiB | 14.30 MiB/s, done.&lt;/span&gt;

&lt;span class="gp"&gt;# &lt;/span&gt;grab&lt;span class="w"&gt; &lt;/span&gt;clickhouse
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;https://clickhouse.com/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sh
&lt;span class="go"&gt;Successfully downloaded the ClickHouse binary, you can run it as:&lt;/span&gt;
&lt;span class="go"&gt;    ./clickhouse&lt;/span&gt;

&lt;span class="go"&gt;You can also install it:&lt;/span&gt;
&lt;span class="go"&gt;sudo ./clickhouse install&lt;/span&gt;

&lt;span class="gp"&gt;# &lt;/span&gt;we&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;need&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;it!&lt;span class="w"&gt; &lt;/span&gt;We&lt;span class="w"&gt; &lt;/span&gt;use&lt;span class="w"&gt; &lt;/span&gt;clickhouse&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;./clickhouse&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;

&lt;span class="go"&gt;./clickhouse local&lt;/span&gt;
&lt;span class="go"&gt;ClickHouse local version 25.5.1.1804 (official build).&lt;/span&gt;

&lt;span class="go"&gt;:) -- let&amp;#39;s have a look at a few rows&lt;/span&gt;
&lt;span class="go"&gt;SELECT * FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet) LIMIT 1;&lt;/span&gt;

&lt;span class="go"&gt;Query id: 0f786705-1568-40ac-837b-004457c3519d&lt;/span&gt;

&lt;span class="go"&gt;Row 1:&lt;/span&gt;
&lt;span class="go"&gt;──────&lt;/span&gt;
&lt;span class="go"&gt;package_name:  dune-action-plugin&lt;/span&gt;
&lt;span class="go"&gt;version:       3.18.1&lt;/span&gt;
&lt;span class="go"&gt;license:       MIT&lt;/span&gt;
&lt;span class="go"&gt;homepage:      https://github.com/ocaml/dune&lt;/span&gt;
&lt;span class="go"&gt;dev_repo:      git+https://github.com/ocaml/dune.git&lt;/span&gt;
&lt;span class="go"&gt;file_type:     dune&lt;/span&gt;
&lt;span class="go"&gt;file_path:     dune-3.18.1/test/blackbox-tests/test-cases/formatting/feature.t/enabled/dune-ocaml-syntax/dune&lt;/span&gt;
&lt;span class="go"&gt;file_contents: (* -*- tuareg -*- *)&lt;/span&gt;

&lt;span class="go"&gt;let&lt;/span&gt;
&lt;span class="gp gp-VirtualEnv"&gt;()&lt;/span&gt; &lt;span class="go"&gt;=&lt;/span&gt;
&lt;span class="go"&gt;Jbuild_plugin.V1.send {|&lt;/span&gt;
&lt;span class="go"&gt;(alias&lt;/span&gt;
&lt;span class="go"&gt; (name runtest)&lt;/span&gt;
&lt;span class="go"&gt; (action (echo &amp;quot;ocaml syntax&amp;quot;)))&lt;/span&gt;
&lt;span class="go"&gt;|}&lt;/span&gt;

&lt;span class="go"&gt;:) -- Let&amp;#39;s count how many rows we have&lt;/span&gt;
&lt;span class="go"&gt;SELECT COUNT(*) FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet);&lt;/span&gt;

&lt;span class="go"&gt;SELECT COUNT(*)&lt;/span&gt;
&lt;span class="go"&gt;FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet)&lt;/span&gt;

&lt;span class="go"&gt;Query id: 3ee6eb4b-13b7-47aa-be67-d027c81b47b0&lt;/span&gt;

&lt;span class="go"&gt;   ┌─COUNT()─┐&lt;/span&gt;
&lt;span class="go"&gt;1. │  198862 │&lt;/span&gt;
&lt;span class="go"&gt;   └─────────┘&lt;/span&gt;

&lt;span class="go"&gt;1 row in set. Elapsed: 0.013 sec. &lt;/span&gt;

&lt;span class="go"&gt;:) -- How many unique packages are spawning Domains?&lt;/span&gt;
&lt;span class="go"&gt;SELECT COUNT(DISTINCT package_name) FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet) WHERE position(&amp;#39;Domain.spawn&amp;#39;, file_contents) &amp;gt; 0;&lt;/span&gt;

&lt;span class="go"&gt;SELECT COUNTDistinct(package_name)&lt;/span&gt;
&lt;span class="go"&gt;FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet)&lt;/span&gt;
&lt;span class="go"&gt;WHERE position(&amp;#39;Domain.spawn&amp;#39;, file_contents) &amp;gt; 0&lt;/span&gt;

&lt;span class="go"&gt;Query id: 6f0978d9-3907-4572-bf5e-99aa4e2fceb8&lt;/span&gt;

&lt;span class="go"&gt;   ┌─COUNTDistinct(package_name)─┐&lt;/span&gt;
&lt;span class="go"&gt;1. │                         193 │&lt;/span&gt;
&lt;span class="go"&gt;   └─────────────────────────────┘&lt;/span&gt;

&lt;span class="go"&gt;1 row in set. Elapsed: 0.723 sec. Processed 197.86 thousand rows, 402.85 MB (273.81 thousand rows/s., 557.48 MB/s.)&lt;/span&gt;
&lt;span class="go"&gt;Peak memory usage: 385.88 MiB.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We currently extract the package name, version, license, dev repo, file type (dune, opam, mli, ml, .c and .h), file path and the contents itself.&lt;/p&gt;
&lt;p&gt;If there are any extra fields that would be useful, let &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;me&lt;/a&gt; know. Enjoy!&lt;/p&gt;</content><category term="posts"/></entry><entry><title>JSON output from Deepseek R1 and distills with llama.cpp</title><link href="https://www.toao.com/blog/json-output-from-deepseek-r1-and-distills-with-llamacpp" rel="alternate"/><published>2025-01-30T17:52:00+00:00</published><updated>2025-04-17T12:48:29.504816+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-01-30:/blog/json-output-from-deepseek-r1-and-distills-with-llamacpp</id><summary type="html">&lt;p&gt;Here's a workaround to get JSON output from Deepseek R1 and distills when using the llama.cpp OpenAI-compatible server endpoint&lt;/p&gt;</summary><content type="html">&lt;p&gt;We're evaluating Deepseek R1 and its distills for our project on &lt;a href="https://anil.recoil.org/projects/ce"&gt;identifying and extracting evidence from literature&lt;/a&gt;. One part of our pipeline needs a strong reasoning model with JSON structured output.&lt;/p&gt;
&lt;p&gt;Using llama-server's OpenAI compatible completion endpoint with response_format and JSON schema conflicts with the model's reasoning in &amp;lt;think&amp;gt; tags. Here's a workaround using the grammar functionality.&lt;/p&gt;
&lt;p&gt;First, grab &lt;a href="https://github.com/ggerganov/llama.cpp/blob/master/examples/json_schema_to_grammar.py"&gt;json_schema_to_grammar&lt;/a&gt; from the llama.cpp repo.&lt;/p&gt;
&lt;p&gt;Next you can use the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;convert_schema_to_grammar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json_schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;converter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json_schema_to_grammar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SchemaConverter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;prop_order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;
        &lt;span class="n"&gt;allow_fetch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;dotall&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;raw_pattern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json_schema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;json-schema&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;json_grammar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format_grammar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# do the root gbnf grammar that handles the &amp;lt;think&amp;gt; and &amp;lt;/think&amp;gt; tags&lt;/span&gt;
    &lt;span class="c1"&gt;# lack of less-than didn&amp;#39;t hinder performance for us but ymmv!&lt;/span&gt;
    &lt;span class="n"&gt;base_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="s2"&gt;root ::= &amp;quot;&amp;lt;think&amp;gt;&amp;quot; [^&amp;lt;]+ &amp;quot;&amp;lt;/think&amp;gt;&amp;quot; [&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;n]* json-schema&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_rules&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;json_grammar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then use the 'extra_body' parameter in your request:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;extra_body&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;grammar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grammar&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Example below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Provide a fictional name and address using the following JSON schema:

{
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,
  &amp;quot;properties&amp;quot;: {
    &amp;quot;name&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
    },
    &amp;quot;age&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;
    },
    &amp;quot;address&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,
      &amp;quot;properties&amp;quot;: {
        &amp;quot;street&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        },
        &amp;quot;city&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        },
        &amp;quot;zip&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        }
      }
    }
  }
}

&amp;lt;think&amp;gt;
Okay, so the user wants me to provide a fictional name and address following a specific JSON schema. Let me break this down.

First, the schema has an object with name, age, and address. The address itself is another object containing street, city, and zip. I need to make sure each field is of the correct type: strings for name, street, city, zip, and an integer for age.

I should come up with a plausible name. Maybe something common like Emily Carter. Age should be an adult, say 32. For the address, I&amp;#39;ll pick a street name, perhaps Maple Street, a number like 147. The city could be something like Riverton, and the zip code needs to be a 5-digit number, maybe 12345.

Wait, is Riverton a real city? I think there are places named Riverton in various states, but since it&amp;#39;s fictional, it doesn&amp;#39;t matter. Alternatively, I could make up a city name, but using a real one might be easier.

Putting it all together, I&amp;#39;ll structure the JSON with these values. I need to ensure that the syntax is correct, with proper commas and brackets. Also, the keys should match exactly: name, age, address, street, city, zip.

I should double-check that all the types are correct. Name is a string, age is an integer, and each part of the address is a string. That should satisfy the schema requirements.

I think that&amp;#39;s all. Time to put it together in the response.
&amp;lt;/think&amp;gt;

{
  &amp;quot;name&amp;quot;: &amp;quot;Emily Carter&amp;quot;,
  &amp;quot;age&amp;quot;: 32,
  &amp;quot;address&amp;quot;: {
    &amp;quot;street&amp;quot;: &amp;quot;147 Maple Street&amp;quot;,
    &amp;quot;city&amp;quot;: &amp;quot;Riverton&amp;quot;,
    &amp;quot;zip&amp;quot;: &amp;quot;12345&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This approach lets you preserve model reasoning while enforcing JSON output structure. Enjoy!&lt;/p&gt;</content><category term="posts"/></entry><entry><title>Teaching Bloom Filters new tricks</title><link href="https://www.toao.com/blog/teaching-bloom-filters-new-tricks" rel="alternate"/><published>2020-12-25T00:52:00+00:00</published><updated>2025-04-17T16:09:31.209101+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2020-12-25:/blog/teaching-bloom-filters-new-tricks</id><summary type="html">&lt;p&gt;In this post we're going to discuss how to teach Bloom Filters new tricks. We'll start with examining Partitioned Bloom Filters and then look at ways we can generalise Bloom Filters to new and interesting uses. By the end of the post you will be able to use this generalised framework to come up with novel probabilistic data structures.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've had a few interesting conversations around text indexing recently with friends and something that's fallen out is that there are some really cool data structures you build that are extensions of Bloom filters. The techniques for constructing them don't seem to be that widely known so this blog post intends to remedy that.&lt;/p&gt;
&lt;p&gt;We will start by examining a variant of the traditional Bloom filter and then we'll look at ways we can generalise the model to produce new types of probabilistic data structures and understand what properties they might have.&lt;/p&gt;
&lt;h3&gt;Bloom Filters&lt;/h3&gt;
&lt;p&gt;To begin with, let's take a look at what a Bloom filter is and how it works so we're all on the same page.&lt;/p&gt;
&lt;p&gt;Loosely a Bloom filter is a data structure into which you can add a set of elements. Later you can query it with any of those elements and it will return true. Crucially it &lt;em&gt;might&lt;/em&gt; also return true for elements that weren't in the set with some (tunable) probability. The benefit you get from this trade-off is that Bloom filters can be very compact.&lt;/p&gt;
&lt;h4&gt;Trade-offs&lt;/h4&gt;
&lt;p&gt;How big this benefit is depends on two things. First, how high a probability of an incorrect answer (a false positive) your application can tolerate and second, how large the items are in the set you want to track.&lt;/p&gt;
&lt;p&gt;For the first case, let's look at a simple example. Imagine if you were a social network and you want to maintain a cache of your most active ten million users. Each user has is identified by a 32-bit integer. If we naively stored the identifiers of our most active million users we're need 320 million bits or 40 megabytes. On the other hand, if we're willing to accept a 1% false positive rate then a Bloom filter needs just over 11 megabytes. A decent win.&lt;/p&gt;
&lt;p&gt;The benefits become much greater as soon as you have large keys. As we'll see in a minute this is because Bloom filters use hashing to avoid storing the keys themselves. If instead of 32-bit user identifiers we are storing urls which could be 320 bits upwards then the win becomes significantly greater. Storing ten million is suddenly &amp;gt;400 megabytes but a bloom filter still clocks in at 11 megabytes for a 1% false positive rate or 17 megabytes for a 0.1% false positive rate.&lt;/p&gt;
&lt;h4&gt;False positives&lt;/h4&gt;
&lt;p&gt;Bloom filters are suited to situations where they can filter out the need to do some work and where a false positive just means some wasted work. A good example would be a local Bloom filter sitting in front of a remote key-value cache. The filter can contain the set of keys the remote cache holds the values for and can filter out needless network requests for keys that aren't present. A false positive in this case means we end up doing a request to the remote cache when not necessary.&lt;/p&gt;
&lt;h4&gt;How they work&lt;/h4&gt;
&lt;p&gt;Let's look at how a Bloom filter actually works. For those already familiar with Bloom filters, for presentation purposes we're only going to discuss Partitioned Bloom filters as this makes the mathematics simpler and exact.&lt;/p&gt;
&lt;p&gt;A Bloom filter consists of an array of &lt;span class="math"&gt;\(m\)&lt;/span&gt; bits &lt;span class="math"&gt;\(B\)&lt;/span&gt; and &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash functions &lt;span class="math"&gt;\(h_0..h_{k-1}\)&lt;/span&gt;. The hash functions take a key &lt;span class="math"&gt;\(x\)&lt;/span&gt; and map it to a location in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. The hash functions are assumed to be independent of each other. That is if we hash some value "foo" with &lt;span class="math"&gt;\(h_0\)&lt;/span&gt; then the result should give us no information about the result from hashing with &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;.&lt;/p&gt;
&lt;h4&gt;Adding to a filter&lt;/h4&gt;
&lt;p&gt;To add to the Bloom filter we hash the key with the hash functions and use their results to set bits in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt;. More specifically:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i = 0 to k-1
    j = h[i](x)
    B[i*k+j] = true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Each hash function indexes into a subrange of size &lt;span class="math"&gt;\(\frac{m}{k}\)&lt;/span&gt; i.e if there are 4 hash functions and array &lt;span class="math"&gt;\(B\)&lt;/span&gt; is 256 bits then the first hash function picks a position in 0 to 63, the second hash function 64 to 127 and so on. These are later referred to as a hash function's &lt;em&gt;partition&lt;/em&gt;.&lt;/p&gt;
&lt;h4&gt;Querying a filter&lt;/h4&gt;
&lt;p&gt;To check a Bloom filter for an element we again use the hash functions to hash the key (resulting in the same positions we would have had if we had added the element) and check the array positions they generate in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. Again, some some pseudo code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;p = true /* whether the element is present or not */
for i = 0 to k-1
    j = h[i](x)
    p = p &amp;amp; B[i*k+j]
return p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Why they work&lt;/h4&gt;
&lt;p&gt;Let's reason out how this works. If we have the element "foo" and add it to a Bloom filter, it will result in a number (&lt;span class="math"&gt;\(k\)&lt;/span&gt;) of positions in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt; being set to true. If we then test that same Bloom filter with "foo" we check those same positions and if they are all true then we probably added "foo" at some point in the past to the filter. There can never be a false negative, if we added "foo" those bits &lt;em&gt;must&lt;/em&gt; have been set.&lt;/p&gt;
&lt;p&gt;There can however be false positives, we may have added some other keys which just so happened to generate positions that covered all the ones that "foo" would hash to. This is the source of false positives in Bloom filters. We can actually calculate the probability that this will occur.&lt;/p&gt;
&lt;h4&gt;False positive probability for k=1&lt;/h4&gt;
&lt;p&gt;To simplify let us have a Bloom filter with a single hash function (so &lt;span class="math"&gt;\(k=1\)&lt;/span&gt;) and with array &lt;span class="math"&gt;\(B\)&lt;/span&gt; of size &lt;span class="math"&gt;\(m\)&lt;/span&gt; bits.&lt;/p&gt;
&lt;p&gt;A single element is added with the routine we specified above. What is the probability that a bit in &lt;span class="math"&gt;\(B\)&lt;/span&gt; is set? Since &lt;span class="math"&gt;\(h_{0}\)&lt;/span&gt; can pick any position&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; then the probability that a bit is set is &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now comes testing. We test the single element we added. The position will be the same as when we added it, so we'll correctly return that it is present. What if we tested a different element to the one we just added to the Bloom filter? What is the probability that we get a false positive? For a false positive to occur the element we are testing must map to a position that was already set in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt;. We've already calculated that as &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now instead of a single element, let us consider what happens if we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements and then test something not in those elements.&lt;/p&gt;
&lt;p&gt;For each element we add, the probability that a bit position &lt;em&gt;won't&lt;/em&gt; be set is &lt;span class="math"&gt;\(1-\frac{1}{m}\)&lt;/span&gt;. After adding &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements, the probability the bit hasn't been set is &lt;span class="math"&gt;\((1 - \frac{1}{m})^n\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Testing an element that wasn't one we added, we want to know the probability that the bit has been set by one of the previous &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements. This is complement of the event that it hasn't been set previously, so:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{1}{m})^n$$&lt;/div&gt;
&lt;p&gt;An intuitive way of looking at this is that it is the percentage of 1s set in &lt;span class="math"&gt;\(B\)&lt;/span&gt; after we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; items. To test out our simple filter, if the size of &lt;span class="math"&gt;\(B\)&lt;/span&gt; (&lt;span class="math"&gt;\(m\)&lt;/span&gt;) is 512 bits and we add 32 elements then the false positive rate if we test a new element that wasn't in the original set is:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{1}{512})^{32} = 0.061$$&lt;/div&gt;
&lt;p&gt;So about 6.1%. If we add another 32 elements this increases to 11.8% and so on.&lt;/p&gt;
&lt;h4&gt;Generalising to multiple hash functions&lt;/h4&gt;
&lt;p&gt;How do we extend this to multiple hash functions? For partitioned Bloom filters we don't need to deal with collisions between hash functions e.g where &lt;span class="math"&gt;\(h_0("foo")\)&lt;/span&gt; and &lt;span class="math"&gt;\(h_1("foo")\)&lt;/span&gt; give the same result. To reiterate, a false positive is where all bit positions in &lt;span class="math"&gt;\(B\)&lt;/span&gt; for an element tested, but not initially added, are set.&lt;/p&gt;
&lt;p&gt;Let's add a second hash function to our simple filter. Now we have &lt;span class="math"&gt;\(h_0\)&lt;/span&gt; and &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;. To get a false positive we would have needed the bit in &lt;span class="math"&gt;\(h_0\)&lt;/span&gt;'s partition to be set &lt;em&gt;and&lt;/em&gt; the bit in &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;'s partition. The probability that a bit is set in the 0th partition when an element is added is &lt;span class="math"&gt;\(\frac{1}{\frac{m}{2}} = \frac{2}{m}\)&lt;/span&gt; because each partition is now &lt;span class="math"&gt;\(m/2\)&lt;/span&gt; in size as there are two) That the bit is not set after &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements are added is &lt;span class="math"&gt;\((1 - \frac{2}{m})^n\)&lt;/span&gt;. For the two (independent) hash functions we end up with:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{2}{m})^n)^2$$&lt;/div&gt;
&lt;p&gt;This generalises to:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;We can quickly work our earlier example again. If B is 512 bits (&lt;span class="math"&gt;\(m = 512\)&lt;/span&gt;), have 4 hash functions (&lt;span class="math"&gt;\(k = 4\)&lt;/span&gt;) and we add 32 elements (&lt;span class="math"&gt;\(n = 32\)&lt;/span&gt;) then we end up with:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{4}{512})^{32})^4 = $$&lt;/div&gt;
&lt;p&gt;Which is 0.2%. Increasing k initially reduces the false positive rate but there's an optimum number (&lt;span class="math"&gt;\(k_{opt}\)&lt;/span&gt;) before the rate starts to rise. In this example that is &lt;span class="math"&gt;\(k = 11\)&lt;/span&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Graph of k vs false positive rate for m = 512, n = 32" src="/static/bloom_false_positive_graph.png"&gt;&lt;/p&gt;
&lt;h3&gt;Generalising Bloom filters&lt;/h3&gt;
&lt;p&gt;Now we understand how a Bloom filter works, let's look at how we can generalise the technique and apply it to create some data structures with interesting properties. We'll start by sketching out a general structure and then look at how traditional Bloom filters fit within it.&lt;/p&gt;
&lt;p&gt;For the generalised data structure we have an array &lt;span class="math"&gt;\(B\)&lt;/span&gt; as before but instead of bits we have state of type &lt;span class="math"&gt;\(T\)&lt;/span&gt; i.e &lt;span class="math"&gt;\(B[0]\)&lt;/span&gt; is data of type T at the first position in array &lt;span class="math"&gt;\(B\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To add to the generalised Bloom filter we have an input element &lt;span class="math"&gt;\(x\)&lt;/span&gt; and associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt;. We use &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash functions (&lt;span class="math"&gt;\(h_0\)&lt;/span&gt;, &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;, etc..) as before. The algorithm is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i = 0 to k-1
    j = h[i](x)
    B[i*k+j] = combine(B[i*k+j], y)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So the main difference from before is that we use the &lt;em&gt;combine&lt;/em&gt; function and element's associated data to update the state at the hash partition location.&lt;/p&gt;
&lt;p&gt;Now let's look at how we would query the generalised Bloom filter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;p = list() /* empty list */

for i = 0 to k-1
    j = h[i](x)
    p.append(B[i*k+j])

return reduce(p)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here we take the state each hash partition location, make a list of them and pass them to a &lt;em&gt;reduce&lt;/em&gt; function. The &lt;em&gt;reduce&lt;/em&gt; function returns a result that is some value &lt;span class="math"&gt;\(d\)&lt;/span&gt; or none.&lt;/p&gt;
&lt;p&gt;Lastly we're going to state that the result from querying our generalised Bloom filter will have a &lt;em&gt;one-sided&lt;/em&gt; error. We define a third function &lt;em&gt;error&lt;/em&gt; and say that if an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; with associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is added to the generalised Bloom filter then querying for element &lt;span class="math"&gt;\(x\)&lt;/span&gt;, will always contain some value &lt;span class="math"&gt;\(d\)&lt;/span&gt; and the function error(&lt;span class="math"&gt;\(y\)&lt;/span&gt;, &lt;span class="math"&gt;\(d\)&lt;/span&gt;) will always return true. If an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; with associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; was not added to the filter then querying will return none or with some (tunable) probability a value &lt;span class="math"&gt;\(d\)&lt;/span&gt; which error(&lt;span class="math"&gt;\(y\)&lt;/span&gt;, &lt;span class="math"&gt;\(d\)&lt;/span&gt;) could return true or false for.&lt;/p&gt;
&lt;p&gt;So to summarise, our parameters are a type &lt;span class="math"&gt;\(T\)&lt;/span&gt; for the data array and three functions &lt;em&gt;combine&lt;/em&gt;, &lt;em&gt;reduce&lt;/em&gt; and &lt;em&gt;error&lt;/em&gt;. It turns out that if we pick those four parameters carefully, we can maintain a one-sided error. We'll start with the traditional Bloom filter and then get more adventurous.&lt;/p&gt;
&lt;h3&gt;Fitting the traditional filter&lt;/h3&gt;
&lt;p&gt;&lt;span class="math"&gt;\(T\)&lt;/span&gt; in the traditional filter is a single bit. &lt;em&gt;combine&lt;/em&gt; is the max function&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;, &lt;em&gt;reduce&lt;/em&gt; is the min function and &lt;em&gt;error&lt;/em&gt; is equals.&lt;/p&gt;
&lt;p&gt;We also need to modify the input slightly, &lt;span class="math"&gt;\(x\)&lt;/span&gt; is still the element to be added but the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is 1 if the element is in the set we added to the filter and 0 if it is not.&lt;/p&gt;
&lt;p&gt;If you plug these in to the earlier pieces of pseudo code you should be able to convince yourself that the filter performs identically to the standard description of a partitioned Bloom filter.&lt;/p&gt;
&lt;h3&gt;Maxmin-based Bloom filters&lt;/h3&gt;
&lt;p&gt;It turns out if we leave &lt;em&gt;combine&lt;/em&gt; as the max function, &lt;em&gt;reduce&lt;/em&gt; as the min function and &lt;em&gt;error&lt;/em&gt; is &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt; then we can still get one-sided errors as long as the elements of type T have a total order.&lt;/p&gt;
&lt;p&gt;By a total order we mean that we can compare any two elements of type T&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;. We'll see later why we're being very specific about this.&lt;/p&gt;
&lt;p&gt;Here's an example filter that would satisfy the above requirements. Assuming the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; for each element is a positive integer (think files with a corresponding sizes in kilobytes) then we could use a maxmin-based Bloom filter with T being an unsigned integer. We initialise all elements of &lt;span class="math"&gt;\(B\)&lt;/span&gt; to 0 and don't allow 0 as a &lt;span class="math"&gt;\(y\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To add to the example maxmin filter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i = 0 to k-1
    j = h[i](x)
    B[i*k+j] = max(B[i*k+j], y)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And to query:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;p = list() /* empty list */

for i = 0 to k-1
    j = h[i](x)
    p.append(B[i*k+j])

return min(*p) /* min in list */
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For an &lt;span class="math"&gt;\(x\)&lt;/span&gt; added to the example filter, a query returns a result greater than or equal to the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; seen with &lt;span class="math"&gt;\(x\)&lt;/span&gt;. For &lt;span class="math"&gt;\(x\)&lt;/span&gt; that wasn't added to the filter we will return &lt;em&gt;none&lt;/em&gt; or with some probability, a random number from the filter.&lt;/p&gt;
&lt;p&gt;There's actually two types of error here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We test an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; that we haven't added to the Bloom filter and get a value back for it instead of &lt;em&gt;none&lt;/em&gt;. We call this a false positive.&lt;/li&gt;
&lt;li&gt;We test an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; that we &lt;em&gt;have&lt;/em&gt; added to the Bloom filter and get a value back that is higher than the associated value &lt;span class="math"&gt;\(y\)&lt;/span&gt; we originally added.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let's start with the false positive probability. We can reuse most of the reasoning from the partitioned Bloom filter false positive derivation earlier. Instead of the bit in &lt;span class="math"&gt;\(B\)&lt;/span&gt; having been set by a different &lt;span class="math"&gt;\(x\)&lt;/span&gt; we're instead interested in the element in &lt;span class="math"&gt;\(B\)&lt;/span&gt; being greater than zero, which means it has been set before.&lt;/p&gt;
&lt;p&gt;Since we have &lt;span class="math"&gt;\(m\)&lt;/span&gt; elements in &lt;span class="math"&gt;\(B\)&lt;/span&gt;, the probability that an element is set to greater than zero on adding to the filter is still &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;. After &lt;span class="math"&gt;\(n\)&lt;/span&gt; additions the probability that it is still zero is &lt;span class="math"&gt;\((1 - \frac{1}{m})^n\)&lt;/span&gt;. So we again have the same probability of giving a false positive as the traditional case:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;What about the second error? For this to happen each of the &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash partition locations for an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; must contain a value that is higher than the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt;. They all must because we take the minimum. There's a bit of difficulty involved in calculating this directly since this kind of error requires a hash collision in each partition &lt;em&gt;and&lt;/em&gt; for that collision to result in a higher resulting value. The probability clearly depends on &lt;span class="math"&gt;\(y\)&lt;/span&gt;, if &lt;span class="math"&gt;\(y\)&lt;/span&gt; is very low (or even the minimum we could see, which is 1) then any collision may lead to this error. If &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the maximum we could see then &lt;em&gt;no&lt;/em&gt; collision will lead to this error.&lt;/p&gt;
&lt;p&gt;For now let us go with a very pessimistic assumption that a collision results in a higher value, implying &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the minimum we will see. This gives us an upper bound on the probability of the second type of error.&lt;/p&gt;
&lt;p&gt;Assume we add &lt;span class="math"&gt;\(x\)&lt;/span&gt; to the filter and we now add a second item.  Again we start with a single hash function &lt;span class="math"&gt;\(k = 1\)&lt;/span&gt; and element array &lt;span class="math"&gt;\(B\)&lt;/span&gt; of size &lt;span class="math"&gt;\(m\)&lt;/span&gt;. What is the probability there was a collision? We picked a location randomly (using &lt;span class="math"&gt;\(h_0(x)\)&lt;/span&gt;) for our element &lt;span class="math"&gt;\(x\)&lt;/span&gt; and now we're picking one again for the second one - the probability of picking the same one is &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; items, what's the chance we &lt;em&gt;didn't&lt;/em&gt; collide? Not colliding after one is &lt;span class="math"&gt;\(1-\frac{1}{m}\)&lt;/span&gt;. After &lt;span class="math"&gt;\(n\)&lt;/span&gt; items we end up with &lt;span class="math"&gt;\((1-\frac{1}{m})^n\)&lt;/span&gt;. Similar to earlier on with the traditional Bloom filter but reversed, an intuitive way of looking at this is the percentage of unset elements in &lt;span class="math"&gt;\(B\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;So for a single hash function, our estimate (&lt;span class="math"&gt;\(d\)&lt;/span&gt;) for the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is exact with probability at least &lt;span class="math"&gt;\((1-\frac{1}{m})^n\)&lt;/span&gt;. Specifically:&lt;/p&gt;
&lt;div class="math"&gt;$$p(d-y &amp;gt; 0) \leq (1-\frac{1}{m})^n$$&lt;/div&gt;
&lt;p&gt;What is the situation with multiple hash functions? As we are taking the &lt;em&gt;min&lt;/em&gt; then we only need one of the partitions not to have a collision to get an exact answer e.g &lt;em&gt;not&lt;/em&gt; where there has been a collision in every partition.&lt;/p&gt;
&lt;p&gt;The probability of having a at least one collision in a partition after &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements is:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{k}{m})^n$$&lt;/div&gt;
&lt;p&gt;for &lt;span class="math"&gt;\(k\)&lt;/span&gt; partitions this is:&lt;/p&gt;
&lt;div class="math"&gt;$$p(d - y &amp;gt; 0) \leq (1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;Which is the same as the equation we worked out for the first class of error! If we step back though this should make intuitive sense. Both class of error depend on the proportion of data elements that are non-zero in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. In the first class of error we might read all non-zero elements and incorrectly return a value instead of none and in the second class of error the more set elements we have the greater the chance we have of colliding in every partition.&lt;/p&gt;
&lt;p&gt;I should point out at this point that this is a very pessimistic bound. It assumes that any collision leads to an increase in the stored value. There's also a question we've skirted around in this discussion and that is if we make an error of the second class, how big is our over-estimate? I think there's a follow-up blog post on that - though at this stage I'm not sure we can make statements on the over-estimate without making assumptions as to the distribution of &lt;span class="math"&gt;\(y\)&lt;/span&gt;. I may be wrong, let's discuss on twitter: &lt;a href="https://twitter.com/intent/tweet?screen_name=sadiqj&amp;ref_src=twsrc%5Etfw" class="twitter-mention-button" data-dnt="true" data-show-count="false"&gt;tweet me&lt;/a&gt;&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;.&lt;/p&gt;
&lt;p&gt;Another thing to note about this filter is that while we only specified it for elements &lt;span class="math"&gt;\(x\)&lt;/span&gt; with accompanying data &lt;span class="math"&gt;\(y\)&lt;/span&gt;, you can add &lt;span class="math"&gt;\(x\)&lt;/span&gt; multiple times to the filter with &lt;em&gt;different&lt;/em&gt; &lt;span class="math"&gt;\(y\)&lt;/span&gt;s and the filter will return an estimate for the maximum &lt;span class="math"&gt;\(y\)&lt;/span&gt; it encountered.&lt;/p&gt;
&lt;h3&gt;Generalising this model further&lt;/h3&gt;
&lt;p&gt;Just to recap. For Maxmin filters we have &lt;em&gt;combine&lt;/em&gt; as the max function, &lt;em&gt;reduce&lt;/em&gt; as the min function and &lt;em&gt;error&lt;/em&gt; is &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt;. Our elements are of type T and have a total order.&lt;/p&gt;
&lt;p&gt;We can go further than this with a technique &lt;a href="https://arxiv.org/abs/cs/0306046"&gt;Boldi &amp;amp; Vigna showed in 2004&lt;/a&gt; called &lt;em&gt;Compressed Approximators&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For Compressed Approximators we have &lt;em&gt;combine&lt;/em&gt; as the least upper bound, &lt;em&gt;reduce&lt;/em&gt; as the greatest lower bound and &lt;em&gt;error&lt;/em&gt; is still &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt;. We'll define these terms in a second. The elements are of type T and form a lattice. For T, this means two things.&lt;/p&gt;
&lt;p&gt;First, it means we have some way of comparing two elements of type T, a &lt;em&gt;partial order&lt;/em&gt;. The partial part means not all elements are comparable - this is contrast to a total order, where all elements are.&lt;/p&gt;
&lt;p&gt;The second is that for any two elements of type T we can find:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the smallest element of type T that is greater than or equal to those two elements (the least upper bound)&lt;/li&gt;
&lt;li&gt;the largest element of type T that is less than or equal to those two elements (the greatest lower bound)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is convenient because we need to be able to do those two things for &lt;em&gt;combine&lt;/em&gt; and &lt;em&gt;reduce&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We'll look at an example now to try to build up an intuitive feeling of what's going on. We base our example around the &lt;em&gt;inclusion&lt;/em&gt; order of sets, which is a partial order&lt;sup id="fnref:4"&gt;&lt;a class="footnote-ref" href="#fn:4"&gt;4&lt;/a&gt;&lt;/sup&gt;. Inclusion order means that if all elements of A are also in B i.e A is a subset of B (&lt;span class="math"&gt;\(A \subseteq B\)&lt;/span&gt;) then &lt;span class="math"&gt;\(A \leq B\)&lt;/span&gt;. For inclusion order, the least upper bound of two sets is their union and the greatest lower bound is their intersection&lt;sup id="fnref:5"&gt;&lt;a class="footnote-ref" href="#fn:5"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3&gt;A multi-member Bloom Filter&lt;/h3&gt;
&lt;p&gt;Armed with this lattice, let's turn to a practical application. Imagine you have assets with a key &lt;span class="math"&gt;\(x\)&lt;/span&gt; that may be cached on one or more of multiple caching servers all of which are infront of some authoritative source (an origin for a CDN, for example). The caching servers may be ephemeral and so we don't want to simply rely on hashing the key to a single server.&lt;/p&gt;
&lt;p&gt;The most naive option would be to maintain a Bloom filter for each of the servers but this requires us to potentially do as many tests as we have servers. We can construct a Compressed Approximator for this problem which we only need to test once.&lt;/p&gt;
&lt;p&gt;To add to the multi-member Bloom filter we do the following, assuming &lt;span class="math"&gt;\(x\)&lt;/span&gt; is our key, &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the server it is now cached on, &lt;span class="math"&gt;\(k\)&lt;/span&gt; is the number of hashes and &lt;span class="math"&gt;\(B\)&lt;/span&gt; is an array of sets.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i = 0 to k-1
    j = h[i](x)
    B[i*k+j] = B[i*k+j].add(y)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So for each hash function and partition, we simply add &lt;span class="math"&gt;\(y\)&lt;/span&gt; to the set at the hash's index. Assuming &lt;em&gt;add&lt;/em&gt; adds to the set if it exists or if not, instantiates it to the singleton set containing just the parameter.&lt;/p&gt;
&lt;p&gt;To query the filter we do:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;p = set() /* empty set */

for i = 0 to k-1
    j = h[i](x)
    if i == 0 then
        p = B[i*k+j]
    else
        p = intersection(p, B[i*k+j])

return p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We loop over each hash function and partition, taking the intersection of all the sets at those locations&lt;sup id="fnref:6"&gt;&lt;a class="footnote-ref" href="#fn:6"&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Again we have a data structure with two possible types of error. As with the maxmin filter, the first type of error is that we test an element we have not added to the filter and we will mistakenly return a set of servers it may be cached on instead of the empty set.&lt;/p&gt;
&lt;p&gt;The second type of error is if we test an element we have added to the filter we may get back a set of caches that contains servers the item is not cached on in addition to the right server.&lt;/p&gt;
&lt;p&gt;We can use the derivation from earlier for the first type of error, the probability of a false positive is:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;For the second error we can also make a similar argument to the maxmin filter, our probability of getting an extra caching server back is at most that of our false positive rate&lt;sup id="fnref:7"&gt;&lt;a class="footnote-ref" href="#fn:7"&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3&gt;Recap and conclusion&lt;/h3&gt;
&lt;p&gt;So to recap, we've discussed the standard Bloom filter and derived a probability for the false positive rate of the partitioned variant. We then looked at maxmin Bloom filters which generalise them to elements that have a total order, including deriving probabilities for the false positive rate and the event that the value the filter returns is higher than the original value added. Finally we looked at a further generalisation for elements that have a partial order, Compact Approximators, and looked at one specific data structure using that model.&lt;/p&gt;
&lt;p&gt;We should be able to use this knowledge to come up with other novel probabilistic data structures based on Bloom filters that have properties which make them better suited to practical problems. I have a whole laundry list of other ones to write up for the next holiday. Want to stay tuned? Follow me on twitter: &lt;a href="https://twitter.com/sadiqj?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-dnt="true" data-show-count="false"&gt;@sadiqj&lt;/a&gt;&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Hopefully with uniform probability, if it's a good hash function.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Technically it doesn't have to be the max function, you're effectively ignoring the existing state but the symmetry with min as reduce makes the narrative a bit easier later on.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;There are further restrictions on how the comparison must work, see &lt;a href="https://en.wikipedia.org/wiki/Total_order"&gt;the wikipedia page&lt;/a&gt; for more information.&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;We're just going to casually steam past this but Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Partially_ordered_set#Formal_definition"&gt;has a page with the formal definitions&lt;/a&gt;. We're also going to handwave a bit around the set definitions in this bit to keep things short. The take aways should be how to use the framework to develop new data structures.&amp;#160;&lt;a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;This only works if all the elements that could be in either set come from some other set, say S. More specifically we say that both of the sets belong to the power set of S.&amp;#160;&lt;a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;We could optimise this by early-outing if we ever get an empty set from a hash location.&amp;#160;&lt;a class="footnote-backref" href="#fnref:6" title="Jump back to footnote 6 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;We can probably make the bound stronger by making some assumptions on how we use the filter and how many caching servers we add items to. That's material for another post though!&amp;#160;&lt;a class="footnote-backref" href="#fnref:7" title="Jump back to footnote 7 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="posts"/></entry><entry><title>Getting OCaml running on the ESP32</title><link href="https://www.toao.com/blog/getting-ocaml-running-on-the-esp32" rel="alternate"/><published>2017-01-15T00:00:00+00:00</published><updated>2026-06-07T20:36:57.724504+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2017-01-15:/blog/getting-ocaml-running-on-the-esp32</id><summary type="html">&lt;p&gt;&lt;img alt="End result" src="/static/wemos_board.gif" title="End result"&gt;&lt;/p&gt;
&lt;p&gt;I was looking for some small Christmas stocking-fillers to give to techie friends and decided to try to find some interesting electronics boards from China.&lt;/p&gt;
&lt;p&gt;In the end, I went with the WEMOS Lolin32 Lite which features Espressif's ESP32. If you're not familiar with the ESP32, it's an awesome little …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="End result" src="/static/wemos_board.gif" title="End result"&gt;&lt;/p&gt;
&lt;p&gt;I was looking for some small Christmas stocking-fillers to give to techie friends and decided to try to find some interesting electronics boards from China.&lt;/p&gt;
&lt;p&gt;In the end, I went with the WEMOS Lolin32 Lite which features Espressif's ESP32. If you're not familiar with the ESP32, it's an awesome little chip that features the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dual core 240Mhz 32-bit Xtensa LX6s&lt;/li&gt;
&lt;li&gt;Wi-Fi (802.11 b/g/n) and Bluetooth (v4.2 + BLE)&lt;/li&gt;
&lt;li&gt;520kb of SRAM&lt;/li&gt;
&lt;li&gt;A separate ultra-low power processor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Lolin32 Lite couples that with 4mb of flash, micro-usb connection and Li-Po charging circuitry.&lt;/p&gt;
&lt;p&gt;Espressif has a gcc-based toolchain and an &lt;a href="https://github.com/espressif/esp-idf"&gt;"IoT Development Framework"&lt;/a&gt; which provides a port of Newlib, FreeRTOS, LWIP and a whole host of other frameworks.&lt;/p&gt;
&lt;p&gt;My friend &lt;a href="http://anil.recoil.org/"&gt;Anil&lt;/a&gt; suggested that with a gcc and libc, porting of the OCaml interpreter would be fairly easy. He was mostly right.&lt;/p&gt;
&lt;h3&gt;Caml runtime&lt;/h3&gt;
&lt;p&gt;It took a little while to understand how OCaml's build system worked and thankfully it seems there's been good support for cross compilation since 4.02. The configure script has a pretty funky way of determining features of the compiler and runtime by compiling lots of small C programs and seeing what builds. This required a few small changes where features were detected but only partially available via Espressif's port of Newlib. Posix signals and BSD sockets were two cases where this happened. I should expand the code for the tests to cover the missing functionality and try to upstream it, which would avoid the configure script hacks.&lt;/p&gt;
&lt;h3&gt;Rebuilding Newlib&lt;/h3&gt;
&lt;p&gt;Unfortunately either I was failing or Espressif's build of newlib doesn't seem to include signal(). This meant a rebuild of newlib was required without the SIGNAL_PROVIDED flag, which includes an implementation of signal(). There's also no support for directories in the IDF, so I had to stub out some parts of sys.c and unix.c. With those changes it was possible to get libcamlrun.a compiled. &lt;/p&gt;
&lt;p&gt;Once I had a cross compiled bytecode runtime, I was most of the way there.&lt;/p&gt;
&lt;h3&gt;Building an image&lt;/h3&gt;
&lt;p&gt;Next step was to get some OCaml compiled which could then be incorporated into the image to flash. This is actually pretty simple with &lt;a href="https://github.com/sadiqj/hello_caml/blob/master/main/component.mk#L12"&gt;ocamlc and custom runtimes&lt;/a&gt; and you end up with a C source file you can then throw in to the rest of the IDF component build system. I wrote a &lt;a href="https://github.com/sadiqj/hello_caml/blob/master/main/hello_world_main.c#L34"&gt;little bit of C&lt;/a&gt; that kickstarted ocaml via caml_startup and had a buildable image to flash.&lt;/p&gt;
&lt;h3&gt;Debugging&lt;/h3&gt;
&lt;p&gt;I flashed the board and immediately got an abort after malloc failed. First things to tweak were the &lt;a href="https://github.com/sadiqj/ocaml-esp32/blob/2798033d8e113f5da6c03ff8ef5ac9edec3e54f9/byterun/caml/config.h"&gt;garbage collection settings&lt;/a&gt; which were not designed for 512kb of ram. I tuned many of those and was still getting an abort but after some instrumentation it turns out that the runtime allocates a 64kb buffer for both stdin and stdout. After reducing those buffers considerably, the interpreter no longer aborted! It didn't, however, print anything out - which concerned me.&lt;/p&gt;
&lt;p&gt;After a fair amount of debugging, I still have no idea where stdout goes. It's certainly not the same place as printf, which makes it to the monitor. Once I had that figured out, I realised I had a functioning interpreter!&lt;/p&gt;
&lt;h3&gt;State of play&lt;/h3&gt;
&lt;p&gt;There's a &lt;a href="https://github.com/sadiqj/ocaml-esp32-docker/blob/master/Dockerfile"&gt;Dockerfile&lt;/a&gt; for the whole build process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installs the prerequisites, Xtensa gcc port, Espressif IDF&lt;/li&gt;
&lt;li&gt;Rebuilds Newlib&lt;/li&gt;
&lt;li&gt;Installs an OCaml via OPAM, then builds the OCaml ESP32 bytecode runtime&lt;/li&gt;
&lt;li&gt;Finally builds a simple Hello World OCaml project and builds an image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should be able to then flash the resulting image with &lt;code&gt;make flash&lt;/code&gt; if you have a dev board connected and have passed the USB-serial device through to the container with &lt;code&gt;--device=/dev/ttyUSB0&lt;/code&gt; (on Linux).&lt;/p&gt;
&lt;h3&gt;Short term TODOs&lt;/h3&gt;
&lt;p&gt;There are a couple of TODOs that probably need to be cleaned up or fixed. As I mentioned earlier, we could expand some of the hasgot tests to include functionality Espressif's Newlib build doesn't have and this would simplify some of the configure changes. Figuring out how to redirect stdout and stderr to the monitor would also be incredibly useful.&lt;/p&gt;
&lt;h3&gt;Longer term plans&lt;/h3&gt;
&lt;p&gt;A native compiler backend for Xtensa would mean we could produce a more compact and hopefully more performant image which would be very useful in environments with tight power budgets. Speaking of low-power, some kind of DSL for programming the ultra-low power core on the board would also probably be very useful.&lt;/p&gt;
&lt;p&gt;In terms of networking, the Espressif IDF ships with an lwip port for networking but there are sufficiently &lt;a href="https://github.com/espressif/esp-idf/blob/3a271a4ae7df8a9049fbbb801feafca5043c31eb/components/esp32/include/esp_wifi_internal.h"&gt;low level interfaces&lt;/a&gt; available for the Wi-Fi device that could work with &lt;a href="https://mirage.io/"&gt;Mirage&lt;/a&gt;'s &lt;a href="https://github.com/mirage/mirage-tcpip"&gt;tcpip&lt;/a&gt; direct driver.&lt;/p&gt;
&lt;p&gt;Any volunteers?&lt;/p&gt;
&lt;h3&gt;End result&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Hello from OCaml!" src="/static/hello_caml.png" title="Hello from OCaml!"&gt;&lt;/p&gt;</content><category term="posts"/></entry></feed>